763 lines
25 KiB
C
763 lines
25 KiB
C
|
/****************************************************************************************************
|
|||
|
//=========================================<3D><>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>================================================//
|
|||
|
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
|||
|
// VCC <20><> DC5V/3.3V //<2F><>Դ
|
|||
|
// GND <20><> GND //<2F><>Դ<EFBFBD><D4B4>
|
|||
|
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
|||
|
//<2F><>ģ<EFBFBD><C4A3>Ĭ<EFBFBD><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSPI<50><49><EFBFBD><EFBFBD>
|
|||
|
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
|||
|
// SDA <20><> PB15 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
|||
|
//=======================================Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD><EFBFBD>==========================================//
|
|||
|
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
|||
|
// LED <20><> PB9 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>źţ<C5BA><C5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>5V<35><56>3.3V
|
|||
|
// SCK <20><> PB13 //Һ<><D2BA><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
|||
|
// A0 <20><> PB10 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
// RESET <20><> PB12 //Һ<><D2BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
// CS <20><> PB11 //Һ<><D2BA><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
//=========================================<3D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>=========================================//
|
|||
|
//<2F><><EFBFBD><EFBFBD>ģ<EFBFBD>鲻<EFBFBD><E9B2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܻ<EFBFBD><DCBB>ߴ<EFBFBD><DFB4>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><DCA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// LCDģ<44><C4A3> STM32<33><32>Ƭ<EFBFBD><C6AC>
|
|||
|
// T_IRQ <20><> PC10 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6>ź<EFBFBD>
|
|||
|
// T_DO <20><> PC2 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD>߶<EFBFBD><DFB6>ź<EFBFBD>
|
|||
|
// T_DIN <20><> PC3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>д<EFBFBD>ź<EFBFBD>
|
|||
|
// T_CS <20><> PC13 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD><EFBFBD>ź<EFBFBD>
|
|||
|
// T_CLK <20><> PC0 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ź<EFBFBD>
|
|||
|
**************************************************************************************************/
|
|||
|
/* @attention
|
|||
|
*
|
|||
|
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|||
|
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
|||
|
* TIME. AS A RESULT, QD electronic SHALL NOT BE HELD LIABLE FOR ANY
|
|||
|
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
|||
|
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
|||
|
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|||
|
**************************************************************************************************/
|
|||
|
#include "lcd.h"
|
|||
|
#include "string.h"
|
|||
|
#include "font.h"
|
|||
|
#include "gui.h"
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
* @name :void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :draw a point in LCD screen
|
|||
|
* @parameters :x:the x coordinate of the point
|
|||
|
y:the y coordinate of the point
|
|||
|
color:the color value of the point
|
|||
|
* @retvalue :None
|
|||
|
********************************************************************/
|
|||
|
void GUI_DrawPoint(uint16_t x,uint16_t y,uint16_t color)
|
|||
|
{
|
|||
|
LCD_SetCursor(x,y);//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
Lcd_WriteData_16Bit(color);
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
* @name :void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :fill the specified area
|
|||
|
* @parameters :sx:the bebinning x coordinate of the specified area
|
|||
|
sy:the bebinning y coordinate of the specified area
|
|||
|
ex:the ending x coordinate of the specified area
|
|||
|
ey:the ending y coordinate of the specified area
|
|||
|
color:the filled color value
|
|||
|
* @retvalue :None
|
|||
|
********************************************************************/
|
|||
|
void LCD_Fill(uint16_t sx,uint16_t sy,uint16_t ex,uint16_t ey,uint16_t color)
|
|||
|
{
|
|||
|
uint16_t i,j;
|
|||
|
uint16_t width=ex-sx+1; //<2F>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀ<EFBFBD><C4BF><EFBFBD>
|
|||
|
uint16_t height=ey-sy+1; //<2F>߶<EFBFBD>
|
|||
|
LCD_SetWindows(sx,sy,ex,ey); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<height;i++)
|
|||
|
{
|
|||
|
for(j=0;j<width;j++)
|
|||
|
Lcd_WriteData_16Bit(color); //д<><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
}
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|
|||
|
|
|||
|
/*******************************************************************
|
|||
|
* @name :void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Draw a line between two points
|
|||
|
* @parameters :x1:the bebinning x coordinate of the line
|
|||
|
y1:the bebinning y coordinate of the line
|
|||
|
x2:the ending x coordinate of the line
|
|||
|
y2:the ending y coordinate of the line
|
|||
|
* @retvalue :None
|
|||
|
********************************************************************/
|
|||
|
void LCD_DrawLine(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
{
|
|||
|
uint16_t t;
|
|||
|
int xerr=0,yerr=0,delta_x,delta_y,distance;
|
|||
|
int incx,incy,uRow,uCol;
|
|||
|
|
|||
|
delta_x=x2-x1; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
delta_y=y2-y1;
|
|||
|
uRow=x1;
|
|||
|
uCol=y1;
|
|||
|
if(delta_x>0)incx=1; //<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else if(delta_x==0)incx=0;//<2F><>ֱ<EFBFBD><D6B1>
|
|||
|
else {incx=-1;delta_x=-delta_x;}
|
|||
|
if(delta_y>0)incy=1;
|
|||
|
else if(delta_y==0)incy=0;//ˮƽ<CBAE><C6BD>
|
|||
|
else{incy=-1;delta_y=-delta_y;}
|
|||
|
if( delta_x>delta_y)distance=delta_x; //ѡȡ<D1A1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
else distance=delta_y;
|
|||
|
for(t=0;t<=distance+1;t++ )//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
LCD_DrawPoint(uRow,uCol);//<2F><><EFBFBD><EFBFBD>
|
|||
|
xerr+=delta_x ;
|
|||
|
yerr+=delta_y ;
|
|||
|
if(xerr>distance)
|
|||
|
{
|
|||
|
xerr-=distance;
|
|||
|
uRow+=incx;
|
|||
|
}
|
|||
|
if(yerr>distance)
|
|||
|
{
|
|||
|
yerr-=distance;
|
|||
|
uCol+=incy;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Draw a rectangle
|
|||
|
* @parameters :x1:the bebinning x coordinate of the rectangle
|
|||
|
y1:the bebinning y coordinate of the rectangle
|
|||
|
x2:the ending x coordinate of the rectangle
|
|||
|
y2:the ending y coordinate of the rectangle
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void LCD_DrawRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
{
|
|||
|
LCD_DrawLine(x1,y1,x2,y1);
|
|||
|
LCD_DrawLine(x1,y1,x1,y2);
|
|||
|
LCD_DrawLine(x1,y2,x2,y2);
|
|||
|
LCD_DrawLine(x2,y1,x2,y2);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void LCD_DrawFillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Filled a rectangle
|
|||
|
* @parameters :x1:the bebinning x coordinate of the filled rectangle
|
|||
|
y1:the bebinning y coordinate of the filled rectangle
|
|||
|
x2:the ending x coordinate of the filled rectangle
|
|||
|
y2:the ending y coordinate of the filled rectangle
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void LCD_DrawFillRectangle(uint16_t x1, uint16_t y1, uint16_t x2, uint16_t y2)
|
|||
|
{
|
|||
|
LCD_Fill(x1,y1,x2,y2,POINT_COLOR);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void _draw_circle_8(int xc, int yc, int x, int y, uint16_t c)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :8 symmetry circle drawing algorithm (internal call)
|
|||
|
* @parameters :xc:the x coordinate of the Circular center
|
|||
|
yc:the y coordinate of the Circular center
|
|||
|
x:the x coordinate relative to the Circular center
|
|||
|
y:the y coordinate relative to the Circular center
|
|||
|
c:the color value of the circle
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void _draw_circle_8(int xc, int yc, int x, int y, uint16_t c)
|
|||
|
{
|
|||
|
GUI_DrawPoint(xc + x, yc + y, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc - x, yc + y, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc + x, yc - y, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc - x, yc - y, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc + y, yc + x, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc - y, yc + x, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc + y, yc - x, c);
|
|||
|
|
|||
|
GUI_DrawPoint(xc - y, yc - x, c);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void gui_circle(int xc, int yc,uint16_t c,int r, int fill)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Draw a circle of specified size at a specified location
|
|||
|
* @parameters :xc:the x coordinate of the Circular center
|
|||
|
yc:the y coordinate of the Circular center
|
|||
|
r:Circular radius
|
|||
|
fill:1-filling,0-no filling
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void gui_circle(int xc, int yc,uint16_t c,int r, int fill)
|
|||
|
{
|
|||
|
int x = 0, y = r, yi, d;
|
|||
|
|
|||
|
d = 3 - 2 * r;
|
|||
|
|
|||
|
|
|||
|
if (fill)
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣨<EFBFBD><E4A3A8>ʵ<EFBFBD><CAB5>Բ<EFBFBD><D4B2>
|
|||
|
while (x <= y) {
|
|||
|
for (yi = x; yi <= y; yi++)
|
|||
|
_draw_circle_8(xc, yc, x, yi, c);
|
|||
|
|
|||
|
if (d < 0) {
|
|||
|
d = d + 4 * x + 6;
|
|||
|
} else {
|
|||
|
d = d + 4 * (x - y) + 10;
|
|||
|
y--;
|
|||
|
}
|
|||
|
x++;
|
|||
|
}
|
|||
|
} else
|
|||
|
{
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䣨<EFBFBD><E4A3A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Բ<EFBFBD><D4B2>
|
|||
|
while (x <= y) {
|
|||
|
_draw_circle_8(xc, yc, x, y, c);
|
|||
|
if (d < 0) {
|
|||
|
d = d + 4 * x + 6;
|
|||
|
} else {
|
|||
|
d = d + 4 * (x - y) + 10;
|
|||
|
y--;
|
|||
|
}
|
|||
|
x++;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void Draw_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Draw a triangle at a specified position
|
|||
|
* @parameters :x0:the bebinning x coordinate of the triangular edge
|
|||
|
y0:the bebinning y coordinate of the triangular edge
|
|||
|
x1:the vertex x coordinate of the triangular
|
|||
|
y1:the vertex y coordinate of the triangular
|
|||
|
x2:the ending x coordinate of the triangular edge
|
|||
|
y2:the ending y coordinate of the triangular edge
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void Draw_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
|||
|
{
|
|||
|
LCD_DrawLine(x0,y0,x1,y1);
|
|||
|
LCD_DrawLine(x1,y1,x2,y2);
|
|||
|
LCD_DrawLine(x2,y2,x0,y0);
|
|||
|
}
|
|||
|
|
|||
|
static void _swap(uint16_t *a, uint16_t *b)
|
|||
|
{
|
|||
|
uint16_t tmp;
|
|||
|
tmp = *a;
|
|||
|
*a = *b;
|
|||
|
*b = tmp;
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void Fill_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :filling a triangle at a specified position
|
|||
|
* @parameters :x0:the bebinning x coordinate of the triangular edge
|
|||
|
y0:the bebinning y coordinate of the triangular edge
|
|||
|
x1:the vertex x coordinate of the triangular
|
|||
|
y1:the vertex y coordinate of the triangular
|
|||
|
x2:the ending x coordinate of the triangular edge
|
|||
|
y2:the ending y coordinate of the triangular edge
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void Fill_Triangel(uint16_t x0,uint16_t y0,uint16_t x1,uint16_t y1,uint16_t x2,uint16_t y2)
|
|||
|
{
|
|||
|
uint16_t a, b, y, last;
|
|||
|
int dx01, dy01, dx02, dy02, dx12, dy12;
|
|||
|
long sa = 0;
|
|||
|
long sb = 0;
|
|||
|
if (y0 > y1)
|
|||
|
{
|
|||
|
_swap(&y0,&y1);
|
|||
|
_swap(&x0,&x1);
|
|||
|
}
|
|||
|
if (y1 > y2)
|
|||
|
{
|
|||
|
_swap(&y2,&y1);
|
|||
|
_swap(&x2,&x1);
|
|||
|
}
|
|||
|
if (y0 > y1)
|
|||
|
{
|
|||
|
_swap(&y0,&y1);
|
|||
|
_swap(&x0,&x1);
|
|||
|
}
|
|||
|
if(y0 == y2)
|
|||
|
{
|
|||
|
a = b = x0;
|
|||
|
if(x1 < a)
|
|||
|
{
|
|||
|
a = x1;
|
|||
|
}
|
|||
|
else if(x1 > b)
|
|||
|
{
|
|||
|
b = x1;
|
|||
|
}
|
|||
|
if(x2 < a)
|
|||
|
{
|
|||
|
a = x2;
|
|||
|
}
|
|||
|
else if(x2 > b)
|
|||
|
{
|
|||
|
b = x2;
|
|||
|
}
|
|||
|
LCD_Fill(a,y0,b,y0,POINT_COLOR);
|
|||
|
return;
|
|||
|
}
|
|||
|
dx01 = x1 - x0;
|
|||
|
dy01 = y1 - y0;
|
|||
|
dx02 = x2 - x0;
|
|||
|
dy02 = y2 - y0;
|
|||
|
dx12 = x2 - x1;
|
|||
|
dy12 = y2 - y1;
|
|||
|
|
|||
|
if(y1 == y2)
|
|||
|
{
|
|||
|
last = y1;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
last = y1-1;
|
|||
|
}
|
|||
|
for(y=y0; y<=last; y++)
|
|||
|
{
|
|||
|
a = x0 + sa / dy01;
|
|||
|
b = x0 + sb / dy02;
|
|||
|
sa += dx01;
|
|||
|
sb += dx02;
|
|||
|
if(a > b)
|
|||
|
{
|
|||
|
_swap(&a,&b);
|
|||
|
}
|
|||
|
LCD_Fill(a,y,b,y,POINT_COLOR);
|
|||
|
}
|
|||
|
sa = dx12 * (y - y1);
|
|||
|
sb = dx02 * (y - y0);
|
|||
|
for(; y<=y2; y++)
|
|||
|
{
|
|||
|
a = x1 + sa / dy12;
|
|||
|
b = x0 + sb / dy02;
|
|||
|
sa += dx12;
|
|||
|
sb += dx02;
|
|||
|
if(a > b)
|
|||
|
{
|
|||
|
_swap(&a,&b);
|
|||
|
}
|
|||
|
LCD_Fill(a,y,b,y,POINT_COLOR);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display a single English character
|
|||
|
* @parameters :x:the bebinning x coordinate of the Character display position
|
|||
|
y:the bebinning y coordinate of the Character display position
|
|||
|
fc:the color value of display character
|
|||
|
bc:the background color of display character
|
|||
|
num:the ascii code of display character(0~94)
|
|||
|
size:the size of display character
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t fc, uint16_t bc, uint8_t num,uint8_t size,uint8_t mode)
|
|||
|
{
|
|||
|
uint8_t temp;
|
|||
|
uint8_t pos,t;
|
|||
|
uint16_t colortemp=POINT_COLOR;
|
|||
|
|
|||
|
num=num-' ';//<2F>õ<EFBFBD>ƫ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>ֵ
|
|||
|
LCD_SetWindows(x,y,x+size/2-1,y+size-1);//<2F><><EFBFBD>õ<EFBFBD><C3B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|||
|
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
|||
|
{
|
|||
|
for(pos=0;pos<size;pos++)
|
|||
|
{
|
|||
|
if(size==12)temp=asc2_1206[num][pos];//<2F><><EFBFBD><EFBFBD>1206<30><36><EFBFBD><EFBFBD>
|
|||
|
else temp=asc2_1608[num][pos]; //<2F><><EFBFBD><EFBFBD>1608<30><38><EFBFBD><EFBFBD>
|
|||
|
for(t=0;t<size/2;t++)
|
|||
|
{
|
|||
|
if(temp&0x01)Lcd_WriteData_16Bit(fc);
|
|||
|
else Lcd_WriteData_16Bit(bc);
|
|||
|
temp>>=1;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
}else//<2F><><EFBFBD>ӷ<EFBFBD>ʽ
|
|||
|
{
|
|||
|
for(pos=0;pos<size;pos++)
|
|||
|
{
|
|||
|
if(size==12)temp=asc2_1206[num][pos];//<2F><><EFBFBD><EFBFBD>1206<30><36><EFBFBD><EFBFBD>
|
|||
|
else temp=asc2_1608[num][pos]; //<2F><><EFBFBD><EFBFBD>1608<30><38><EFBFBD><EFBFBD>
|
|||
|
for(t=0;t<size/2;t++)
|
|||
|
{
|
|||
|
POINT_COLOR=fc;
|
|||
|
if(temp&0x01)LCD_DrawPoint(x+t,y+pos);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
temp>>=1;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
POINT_COLOR=colortemp;
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display English string
|
|||
|
* @parameters :x:the bebinning x coordinate of the English string
|
|||
|
y:the bebinning y coordinate of the English string
|
|||
|
p:the start address of the English string
|
|||
|
size:the size of display character
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void LCD_ShowString(uint16_t x,uint16_t y,uint8_t size,uint8_t *p,uint8_t mode)
|
|||
|
{
|
|||
|
while((*p<='~')&&(*p>=' '))//<2F>ж<EFBFBD><D0B6>Dz<EFBFBD><C7B2>ǷǷ<C7B7><C7B7>ַ<EFBFBD>!
|
|||
|
{
|
|||
|
if(x>(lcddev.width-1)||y>(lcddev.height-1))
|
|||
|
return;
|
|||
|
LCD_ShowChar(x,y,POINT_COLOR,BACK_COLOR,*p,size,mode);
|
|||
|
x+=size/2;
|
|||
|
p++;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :uint32_t mypow(uint8_t m,uint8_t n)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :get the nth power of m (internal call)
|
|||
|
* @parameters :m:the multiplier
|
|||
|
n:the power
|
|||
|
* @retvalue :the nth power of m
|
|||
|
******************************************************************************/
|
|||
|
uint32_t mypow(uint8_t m,uint8_t n)
|
|||
|
{
|
|||
|
uint32_t result=1;
|
|||
|
while(n--)result*=m;
|
|||
|
return result;
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display number
|
|||
|
* @parameters :x:the bebinning x coordinate of the number
|
|||
|
y:the bebinning y coordinate of the number
|
|||
|
num:the number(0~4294967295)
|
|||
|
len:the length of the display number
|
|||
|
size:the size of display number
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void LCD_ShowNum(uint16_t x,uint16_t y,uint32_t num,uint8_t len,uint8_t size)
|
|||
|
{
|
|||
|
uint8_t t,temp;
|
|||
|
uint8_t enshow=0;
|
|||
|
for(t=0;t<len;t++)
|
|||
|
{
|
|||
|
temp=(num/mypow(10,len-t-1))%10;
|
|||
|
if(enshow==0&&t<(len-1))
|
|||
|
{
|
|||
|
if(temp==0)
|
|||
|
{
|
|||
|
LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,' ',size,0);
|
|||
|
continue;
|
|||
|
}else enshow=1;
|
|||
|
|
|||
|
}
|
|||
|
LCD_ShowChar(x+(size/2)*t,y,POINT_COLOR,BACK_COLOR,temp+'0',size,0);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display a single 16x16 Chinese character
|
|||
|
* @parameters :x:the bebinning x coordinate of the Chinese character
|
|||
|
y:the bebinning y coordinate of the Chinese character
|
|||
|
fc:the color value of Chinese character
|
|||
|
bc:the background color of Chinese character
|
|||
|
s:the start address of the Chinese character
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void GUI_DrawFont16(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
{
|
|||
|
uint8_t i,j;
|
|||
|
uint16_t k;
|
|||
|
uint16_t HZnum;
|
|||
|
uint16_t x0=x;
|
|||
|
HZnum=sizeof(tfont16)/sizeof(typFNT_GB16); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
|||
|
|
|||
|
for (k=0;k<HZnum;k++)
|
|||
|
{
|
|||
|
if ((tfont16[k].Index[0]==*(s))&&(tfont16[k].Index[1]==*(s+1)))
|
|||
|
{ LCD_SetWindows(x,y,x+16-1,y+16-1);
|
|||
|
for(i=0;i<16*2;i++)
|
|||
|
{
|
|||
|
for(j=0;j<8;j++)
|
|||
|
{
|
|||
|
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
|||
|
{
|
|||
|
if(tfont16[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
|||
|
else Lcd_WriteData_16Bit(bc);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
POINT_COLOR=fc;
|
|||
|
if(tfont16[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
x++;
|
|||
|
if((x-x0)==16)
|
|||
|
{
|
|||
|
x=x0;
|
|||
|
y++;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
|||
|
}
|
|||
|
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display a single 24x24 Chinese character
|
|||
|
* @parameters :x:the bebinning x coordinate of the Chinese character
|
|||
|
y:the bebinning y coordinate of the Chinese character
|
|||
|
fc:the color value of Chinese character
|
|||
|
bc:the background color of Chinese character
|
|||
|
s:the start address of the Chinese character
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void GUI_DrawFont24(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
{
|
|||
|
uint8_t i,j;
|
|||
|
uint16_t k;
|
|||
|
uint16_t HZnum;
|
|||
|
uint16_t x0=x;
|
|||
|
HZnum=sizeof(tfont24)/sizeof(typFNT_GB24); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
|
|||
|
for (k=0;k<HZnum;k++)
|
|||
|
{
|
|||
|
if ((tfont24[k].Index[0]==*(s))&&(tfont24[k].Index[1]==*(s+1)))
|
|||
|
{ LCD_SetWindows(x,y,x+24-1,y+24-1);
|
|||
|
for(i=0;i<24*3;i++)
|
|||
|
{
|
|||
|
for(j=0;j<8;j++)
|
|||
|
{
|
|||
|
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
|||
|
{
|
|||
|
if(tfont24[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
|||
|
else Lcd_WriteData_16Bit(bc);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
POINT_COLOR=fc;
|
|||
|
if(tfont24[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
x++;
|
|||
|
if((x-x0)==24)
|
|||
|
{
|
|||
|
x=x0;
|
|||
|
y++;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
|||
|
}
|
|||
|
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display a single 32x32 Chinese character
|
|||
|
* @parameters :x:the bebinning x coordinate of the Chinese character
|
|||
|
y:the bebinning y coordinate of the Chinese character
|
|||
|
fc:the color value of Chinese character
|
|||
|
bc:the background color of Chinese character
|
|||
|
s:the start address of the Chinese character
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void GUI_DrawFont32(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *s,uint8_t mode)
|
|||
|
{
|
|||
|
uint8_t i,j;
|
|||
|
uint16_t k;
|
|||
|
uint16_t HZnum;
|
|||
|
uint16_t x0=x;
|
|||
|
HZnum=sizeof(tfont32)/sizeof(typFNT_GB32); //<2F>Զ<EFBFBD>ͳ<EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD><EFBFBD><EFBFBD>Ŀ
|
|||
|
for (k=0;k<HZnum;k++)
|
|||
|
{
|
|||
|
if ((tfont32[k].Index[0]==*(s))&&(tfont32[k].Index[1]==*(s+1)))
|
|||
|
{ LCD_SetWindows(x,y,x+32-1,y+32-1);
|
|||
|
for(i=0;i<32*4;i++)
|
|||
|
{
|
|||
|
for(j=0;j<8;j++)
|
|||
|
{
|
|||
|
if(!mode) //<2F>ǵ<EFBFBD><C7B5>ӷ<EFBFBD>ʽ
|
|||
|
{
|
|||
|
if(tfont32[k].Msk[i]&(0x80>>j)) Lcd_WriteData_16Bit(fc);
|
|||
|
else Lcd_WriteData_16Bit(bc);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
POINT_COLOR=fc;
|
|||
|
if(tfont32[k].Msk[i]&(0x80>>j)) LCD_DrawPoint(x,y);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
|
|||
|
x++;
|
|||
|
if((x-x0)==32)
|
|||
|
{
|
|||
|
x=x0;
|
|||
|
y++;
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
continue; //<2F><><EFBFBD>ҵ<EFBFBD><D2B5><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ֿ<EFBFBD><D6BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD>ȡģ<C8A1><C4A3><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0>
|
|||
|
}
|
|||
|
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display Chinese and English strings
|
|||
|
* @parameters :x:the bebinning x coordinate of the Chinese and English strings
|
|||
|
y:the bebinning y coordinate of the Chinese and English strings
|
|||
|
fc:the color value of Chinese and English strings
|
|||
|
bc:the background color of Chinese and English strings
|
|||
|
str:the start address of the Chinese and English strings
|
|||
|
size:the size of Chinese and English strings
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void Show_Str(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
|||
|
{
|
|||
|
uint16_t x0=x;
|
|||
|
uint8_t bHz=0; //<2F>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(*str!=0)//<2F><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if(!bHz)
|
|||
|
{
|
|||
|
if(x>(lcddev.width-size/2)||y>(lcddev.height-size))
|
|||
|
return;
|
|||
|
if(*str>0x80)bHz=1;//<2F><><EFBFBD><EFBFBD>
|
|||
|
else //<2F>ַ<EFBFBD>
|
|||
|
{
|
|||
|
if(*str==0x0D)//<2F><><EFBFBD>з<EFBFBD><D0B7><EFBFBD>
|
|||
|
{
|
|||
|
y+=size;
|
|||
|
x=x0;
|
|||
|
str++;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
if(size>16)//<2F>ֿ<EFBFBD><D6BF><EFBFBD>û<EFBFBD>м<EFBFBD><D0BC><EFBFBD>12X24 16X32<33><32>Ӣ<EFBFBD><D3A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><>8X16<31><36><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
LCD_ShowChar(x,y,fc,bc,*str,16,mode);
|
|||
|
x+=8; //<2F>ַ<EFBFBD>,Ϊȫ<CEAA>ֵ<EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
LCD_ShowChar(x,y,fc,bc,*str,size,mode);
|
|||
|
x+=size/2; //<2F>ַ<EFBFBD>,Ϊȫ<CEAA>ֵ<EFBFBD>һ<EFBFBD><D2BB>
|
|||
|
}
|
|||
|
}
|
|||
|
str++;
|
|||
|
|
|||
|
}
|
|||
|
}else//<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
if(x>(lcddev.width-size)||y>(lcddev.height-size))
|
|||
|
return;
|
|||
|
bHz=0;//<2F>к<EFBFBD><D0BA>ֿ<EFBFBD>
|
|||
|
if(size==32)
|
|||
|
GUI_DrawFont32(x,y,fc,bc,str,mode);
|
|||
|
else if(size==24)
|
|||
|
GUI_DrawFont24(x,y,fc,bc,str,mode);
|
|||
|
else
|
|||
|
GUI_DrawFont16(x,y,fc,bc,str,mode);
|
|||
|
|
|||
|
str+=2;
|
|||
|
x+=size;//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫ<EFBFBD><C6AB>
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void Gui_StrCenter(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Centered display of English and Chinese strings
|
|||
|
* @parameters :x:the bebinning x coordinate of the Chinese and English strings
|
|||
|
y:the bebinning y coordinate of the Chinese and English strings
|
|||
|
fc:the color value of Chinese and English strings
|
|||
|
bc:the background color of Chinese and English strings
|
|||
|
str:the start address of the Chinese and English strings
|
|||
|
size:the size of Chinese and English strings
|
|||
|
mode:0-no overlying,1-overlying
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void Gui_StrCenter(uint16_t x, uint16_t y, uint16_t fc, uint16_t bc, uint8_t *str,uint8_t size,uint8_t mode)
|
|||
|
{
|
|||
|
uint16_t len=strlen((const char *)str);
|
|||
|
uint16_t x1=(lcddev.width-len*8)/2;
|
|||
|
Show_Str(x1,y,fc,bc,str,size,mode);
|
|||
|
}
|
|||
|
|
|||
|
/*****************************************************************************
|
|||
|
* @name :void Gui_Drawbmp16(uint16_t x,uint16_t y,const unsigned char *p)
|
|||
|
* @date :2018-08-09
|
|||
|
* @function :Display a 16-bit BMP image
|
|||
|
* @parameters :x:the bebinning x coordinate of the BMP image
|
|||
|
y:the bebinning y coordinate of the BMP image
|
|||
|
p:the start address of image array
|
|||
|
* @retvalue :None
|
|||
|
******************************************************************************/
|
|||
|
void Gui_Drawbmp16(uint16_t x,uint16_t y,const unsigned char *p) //<2F><>ʾ40*40 QQͼƬ
|
|||
|
{
|
|||
|
int i;
|
|||
|
unsigned char picH,picL;
|
|||
|
LCD_SetWindows(x,y,x+40-1,y+40-1);//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
for(i=0;i<40*40;i++)
|
|||
|
{
|
|||
|
picL=*(p+i*2); //<2F><><EFBFBD>ݵ<EFBFBD>λ<EFBFBD><CEBB>ǰ
|
|||
|
picH=*(p+i*2+1);
|
|||
|
Lcd_WriteData_16Bit(picH<<8|picL);
|
|||
|
}
|
|||
|
LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);//<2F>ָ<EFBFBD><D6B8><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊȫ<CEAA><C8AB>
|
|||
|
}
|