|
|
#include "stm32f10x.h" |
|
|
#include "Lcd_Driver.h" |
|
|
#include "GUI.h" |
|
|
#include "delay.h" |
|
|
#include "font.h" |
|
|
|
|
|
//<EFBFBD><EFBFBD>ILI93xx<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪGBR<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ΪRGB<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD> |
|
|
//ͨ<EFBFBD><EFBFBD><EFBFBD>ú<EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD> |
|
|
//c:GBR<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫֵ |
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD>ʽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫֵ |
|
|
u16 LCD_BGR2RGB(u16 c) |
|
|
{ |
|
|
u16 r,g,b,rgb; |
|
|
b=(c>>0)&0x1f; |
|
|
g=(c>>5)&0x3f; |
|
|
r=(c>>11)&0x1f; |
|
|
rgb=(b<<11)+(g<<5)+(r<<0); |
|
|
return(rgb); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
void Gui_Circle(u16 X,u16 Y,u16 R,u16 fc) |
|
|
{//Bresenham<EFBFBD>㷨 |
|
|
unsigned short a,b; |
|
|
int c; |
|
|
a=0; |
|
|
b=R; |
|
|
c=3-2*R; |
|
|
while (a<b) |
|
|
{ |
|
|
Gui_DrawPoint(X+a,Y+b,fc); // 7 |
|
|
Gui_DrawPoint(X-a,Y+b,fc); // 6 |
|
|
Gui_DrawPoint(X+a,Y-b,fc); // 2 |
|
|
Gui_DrawPoint(X-a,Y-b,fc); // 3 |
|
|
Gui_DrawPoint(X+b,Y+a,fc); // 8 |
|
|
Gui_DrawPoint(X-b,Y+a,fc); // 5 |
|
|
Gui_DrawPoint(X+b,Y-a,fc); // 1 |
|
|
Gui_DrawPoint(X-b,Y-a,fc); // 4 |
|
|
|
|
|
if(c<0) c=c+4*a+6; |
|
|
else |
|
|
{ |
|
|
c=c+4*(a-b)+10; |
|
|
b-=1; |
|
|
} |
|
|
a+=1; |
|
|
} |
|
|
if (a==b) |
|
|
{ |
|
|
Gui_DrawPoint(X+a,Y+b,fc); |
|
|
Gui_DrawPoint(X+a,Y+b,fc); |
|
|
Gui_DrawPoint(X+a,Y-b,fc); |
|
|
Gui_DrawPoint(X-a,Y-b,fc); |
|
|
Gui_DrawPoint(X+b,Y+a,fc); |
|
|
Gui_DrawPoint(X-b,Y+a,fc); |
|
|
Gui_DrawPoint(X+b,Y-a,fc); |
|
|
Gui_DrawPoint(X-b,Y-a,fc); |
|
|
} |
|
|
|
|
|
} |
|
|
//<EFBFBD><EFBFBD><EFBFBD>ߺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Bresenham <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㷨 |
|
|
void Gui_DrawLine(u16 x0, u16 y0,u16 x1, u16 y1,u16 Color) |
|
|
{ |
|
|
int dx, // difference in x's |
|
|
dy, // difference in y's |
|
|
dx2, // dx,dy * 2 |
|
|
dy2, |
|
|
x_inc, // amount in pixel space to move during drawing |
|
|
y_inc, // amount in pixel space to move during drawing |
|
|
error, // the discriminant i.e. error i.e. decision variable |
|
|
index; // used for looping |
|
|
|
|
|
|
|
|
Lcd_SetXY(x0,y0); |
|
|
dx = x1-x0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
dy = y1-y0;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
|
|
|
if (dx>=0) |
|
|
{ |
|
|
x_inc = 1; |
|
|
} |
|
|
else |
|
|
{ |
|
|
x_inc = -1; |
|
|
dx = -dx; |
|
|
} |
|
|
|
|
|
if (dy>=0) |
|
|
{ |
|
|
y_inc = 1; |
|
|
} |
|
|
else |
|
|
{ |
|
|
y_inc = -1; |
|
|
dy = -dy; |
|
|
} |
|
|
|
|
|
dx2 = dx << 1; |
|
|
dy2 = dy << 1; |
|
|
|
|
|
if (dx > dy)//x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD>ôÿ<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>㣬ÿ<EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><EFBFBD><EFBFBD> |
|
|
{//<EFBFBD><EFBFBD><EFBFBD>ߵĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD>룬<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
// initialize error term |
|
|
error = dy2 - dx; |
|
|
|
|
|
// draw the line |
|
|
for (index=0; index <= dx; index++)//Ҫ<EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ᳬ<EFBFBD><EFBFBD>x<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
{ |
|
|
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
Gui_DrawPoint(x0,y0,Color); |
|
|
|
|
|
// test if error has overflowed |
|
|
if (error >= 0) //<EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ |
|
|
{ |
|
|
error-=dx2; |
|
|
|
|
|
// move to next line |
|
|
y0+=y_inc;//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ |
|
|
} // end if error overflowed |
|
|
|
|
|
// adjust the error term |
|
|
error+=dy2; |
|
|
|
|
|
// move to the next pixel |
|
|
x0+=x_inc;//x<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵÿ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1 |
|
|
} // end for |
|
|
} // end if |slope| <= 1 |
|
|
else//y<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>x<EFBFBD>ᣬ<EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>y<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>㣬x<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɸ<EFBFBD><EFBFBD><EFBFBD> |
|
|
{//<EFBFBD><EFBFBD>y<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
// initialize error term |
|
|
error = dx2 - dy; |
|
|
|
|
|
// draw the line |
|
|
for (index=0; index <= dy; index++) |
|
|
{ |
|
|
// set the pixel |
|
|
Gui_DrawPoint(x0,y0,Color); |
|
|
|
|
|
// test if error overflowed |
|
|
if (error >= 0) |
|
|
{ |
|
|
error-=dy2; |
|
|
|
|
|
// move to next line |
|
|
x0+=x_inc; |
|
|
} // end if error overflowed |
|
|
|
|
|
// adjust the error term |
|
|
error+=dx2; |
|
|
|
|
|
// move to the next pixel |
|
|
y0+=y_inc; |
|
|
} // end for |
|
|
} // end else |slope| > 1 |
|
|
} |
|
|
|
|
|
|
|
|
void Gui_box(u16 x, u16 y, u16 w, u16 h,u16 bc) |
|
|
{ |
|
|
Gui_DrawLine(x,y,x+w,y,0xEF7D); |
|
|
Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0x2965); |
|
|
Gui_DrawLine(x,y+h,x+w,y+h,0x2965); |
|
|
Gui_DrawLine(x,y,x,y+h,0xEF7D); |
|
|
Gui_DrawLine(x+1,y+1,x+1+w-2,y+1+h-2,bc); |
|
|
} |
|
|
|
|
|
void Gui_box2(u16 x,u16 y,u16 w,u16 h, u8 mode) |
|
|
{ |
|
|
if (mode==0) { |
|
|
Gui_DrawLine(x,y,x+w,y,0xEF7D); |
|
|
Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0x2965); |
|
|
Gui_DrawLine(x,y+h,x+w,y+h,0x2965); |
|
|
Gui_DrawLine(x,y,x,y+h,0xEF7D); |
|
|
} |
|
|
if (mode==1) { |
|
|
Gui_DrawLine(x,y,x+w,y,0x2965); |
|
|
Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0xEF7D); |
|
|
Gui_DrawLine(x,y+h,x+w,y+h,0xEF7D); |
|
|
Gui_DrawLine(x,y,x,y+h,0x2965); |
|
|
} |
|
|
if (mode==2) { |
|
|
Gui_DrawLine(x,y,x+w,y,0xffff); |
|
|
Gui_DrawLine(x+w-1,y+1,x+w-1,y+1+h,0xffff); |
|
|
Gui_DrawLine(x,y+h,x+w,y+h,0xffff); |
|
|
Gui_DrawLine(x,y,x,y+h,0xffff); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/************************************************************************************** |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾһ<EFBFBD><EFBFBD>İ<EFBFBD>ť<EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: u16 x1,y1,x2,y2 <EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϽǺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD> |
|
|
**************************************************************************************/ |
|
|
void DisplayButtonDown(u16 x1,u16 y1,u16 x2,u16 y2) |
|
|
{ |
|
|
Gui_DrawLine(x1, y1, x2,y1, GRAY2); //H |
|
|
Gui_DrawLine(x1+1,y1+1,x2,y1+1, GRAY1); //H |
|
|
Gui_DrawLine(x1, y1, x1,y2, GRAY2); //V |
|
|
Gui_DrawLine(x1+1,y1+1,x1+1,y2, GRAY1); //V |
|
|
Gui_DrawLine(x1, y2, x2,y2, WHITE); //H |
|
|
Gui_DrawLine(x2, y1, x2,y2, WHITE); //V |
|
|
} |
|
|
|
|
|
/************************************************************************************** |
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD>ʾһ<EFBFBD><EFBFBD><EFBFBD>µİ<EFBFBD>ť<EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: u16 x1,y1,x2,y2 <EFBFBD><EFBFBD>ť<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϽǺ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>½<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> |
|
|
<EFBFBD><EFBFBD> <EFBFBD><EFBFBD>: <EFBFBD><EFBFBD> |
|
|
**************************************************************************************/ |
|
|
void DisplayButtonUp(u16 x1,u16 y1,u16 x2,u16 y2) |
|
|
{ |
|
|
Gui_DrawLine(x1, y1, x2,y1, WHITE); //H |
|
|
Gui_DrawLine(x1, y1, x1,y2, WHITE); //V |
|
|
|
|
|
Gui_DrawLine(x1+1,y2-1,x2,y2-1, GRAY1); //H |
|
|
Gui_DrawLine(x1, y2, x2,y2, GRAY2); //H |
|
|
Gui_DrawLine(x2-1,y1+1,x2-1,y2, GRAY1); //V |
|
|
Gui_DrawLine(x2 ,y1 ,x2,y2, GRAY2); //V |
|
|
} |
|
|
|
|
|
|
|
|
void Gui_DrawFont_GBK16(u16 x, u16 y, u16 fc, u16 bc, u8 *s) |
|
|
{ |
|
|
unsigned char i,j; |
|
|
unsigned short k,x0; |
|
|
x0=x; |
|
|
|
|
|
while(*s) |
|
|
{ |
|
|
if((*s) < 128) |
|
|
{ |
|
|
k=*s; |
|
|
if (k==13) |
|
|
{ |
|
|
x=x0; |
|
|
y+=16; |
|
|
} |
|
|
else |
|
|
{ |
|
|
if (k>32) k-=32; else k=0; |
|
|
|
|
|
for(i=0;i<16;i++) |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(asc16[k*16+i]&(0x80>>j)) Gui_DrawPoint(x+j,y+i,fc); |
|
|
else |
|
|
{ |
|
|
if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc); |
|
|
} |
|
|
} |
|
|
x+=8; |
|
|
} |
|
|
s++; |
|
|
} |
|
|
|
|
|
else |
|
|
{ |
|
|
|
|
|
|
|
|
for (k=0;k<hz16_num;k++) |
|
|
{ |
|
|
if ((hz16[k].Index[0]==*(s))&&(hz16[k].Index[1]==*(s+1))) |
|
|
{ |
|
|
for(i=0;i<16;i++) |
|
|
{ |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(hz16[k].Msk[i*2]&(0x80>>j)) Gui_DrawPoint(x+j,y+i,fc); |
|
|
else { |
|
|
if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc); |
|
|
} |
|
|
} |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(hz16[k].Msk[i*2+1]&(0x80>>j)) Gui_DrawPoint(x+j+8,y+i,fc); |
|
|
else |
|
|
{ |
|
|
if (fc!=bc) Gui_DrawPoint(x+j+8,y+i,bc); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
s+=2;x+=16; |
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
|
|
|
void Gui_DrawFont_GBK24(u16 x, u16 y, u16 fc, u16 bc, u8 *s) |
|
|
{ |
|
|
unsigned char i,j; |
|
|
unsigned short k; |
|
|
|
|
|
while(*s) |
|
|
{ |
|
|
if( *s < 0x80 ) |
|
|
{ |
|
|
k=*s; |
|
|
if (k>32) k-=32; else k=0; |
|
|
|
|
|
for(i=0;i<16;i++) |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(asc16[k*16+i]&(0x80>>j)) |
|
|
Gui_DrawPoint(x+j,y+i,fc); |
|
|
else |
|
|
{ |
|
|
if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc); |
|
|
} |
|
|
} |
|
|
s++;x+=8; |
|
|
} |
|
|
else |
|
|
{ |
|
|
|
|
|
for (k=0;k<hz24_num;k++) |
|
|
{ |
|
|
if ((hz24[k].Index[0]==*(s))&&(hz24[k].Index[1]==*(s+1))) |
|
|
{ |
|
|
for(i=0;i<24;i++) |
|
|
{ |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(hz24[k].Msk[i*3]&(0x80>>j)) |
|
|
Gui_DrawPoint(x+j,y+i,fc); |
|
|
else |
|
|
{ |
|
|
if (fc!=bc) Gui_DrawPoint(x+j,y+i,bc); |
|
|
} |
|
|
} |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(hz24[k].Msk[i*3+1]&(0x80>>j)) Gui_DrawPoint(x+j+8,y+i,fc); |
|
|
else { |
|
|
if (fc!=bc) Gui_DrawPoint(x+j+8,y+i,bc); |
|
|
} |
|
|
} |
|
|
for(j=0;j<8;j++) |
|
|
{ |
|
|
if(hz24[k].Msk[i*3+2]&(0x80>>j)) |
|
|
Gui_DrawPoint(x+j+16,y+i,fc); |
|
|
else |
|
|
{ |
|
|
if (fc!=bc) Gui_DrawPoint(x+j+16,y+i,bc); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
s+=2;x+=24; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
void Gui_DrawFont_Num32(u16 x, u16 y, u16 fc, u16 bc, u16 num) |
|
|
{ |
|
|
unsigned char i,j,k,c; |
|
|
//lcd_text_any(x+94+i*42,y+34,32,32,0x7E8,0x0,sz32,knum[i]); |
|
|
// w=w/8; |
|
|
|
|
|
for(i=0;i<32;i++) |
|
|
{ |
|
|
for(j=0;j<4;j++) |
|
|
{ |
|
|
c=*(sz32+num*32*4+i*4+j); |
|
|
for (k=0;k<8;k++) |
|
|
{ |
|
|
|
|
|
if(c&(0x80>>k)) Gui_DrawPoint(x+j*8+k,y+i,fc); |
|
|
else { |
|
|
if (fc!=bc) Gui_DrawPoint(x+j*8+k,y+i,bc); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|