gui

#include"font.h"
#include
#include
#include
#include
#include
#include"anniu.c"
#define BIT(x) (1 << (x))
#define flash const
#define yellow 0xffe0
#define qingse 0x07ff
#define qianhongse 0xf81f
#define blue 0x001f
#define green 0x07e0
#define red 0xf800
#define black 0x0000
#define white 0xffff
uchar sys_flag=0;
uint back_color=red;
uint bar_color=blue;
uint addr_x,addr_y,bj_x,bj_y;
uchar font_zf,mouse_flag;
extern const unsigned char sunflower_800x480[];
extern int key_x;
extern int key_y;
extern char live_toch;
extern void open_touch(void);
volatile static unsigned short LCD_BUFFER[SCR_YSIZE][SCR_XSIZE];
static void LCD_Init(void)
{
#define M5D(n) ((n)&0x1fffff)
#define LCD_ADDR ((U32)LCD_BUFFER)
rLCDCON1 = (LCD_PIXCLOCK << 8) | (3 << 5) | (12 << 1);
rLCDCON2 = (LCD_UPPER_MARGIN << 24) | ((LCD_HEIGHT - 1) << 14) | (LCD_LOWER_MARGIN << 6) | (LCD_VSYNC_LEN << 0);
rLCDCON3 = (LCD_RIGHT_MARGIN << 19) | ((LCD_WIDTH - 1) << 8) | (LCD_LEFT_MARGIN << 0);
rLCDCON4 = (13 << 8) | (LCD_HSYNC_LEN << 0);

#if !defined(LCD_CON5)
# define LCD_CON5 ((1<<11) | (1 << 9) | (1 << 8) | (1 << 3) | (1 << 0))
#endif
rLCDCON5 = LCD_CON5;

rLCDSADDR1 = ((LCD_ADDR >> 22) << 21) | ((M5D(LCD_ADDR >> 1)) << 0);
rLCDSADDR2 = M5D((LCD_ADDR + LCD_WIDTH * LCD_HEIGHT * 2) >> 1);
rLCDSADDR3 = LCD_WIDTH;

rLCDINTMSK |= 3;
rTCONSEL &= (~7);


rTPAL = 0x0;
rTCONSEL &= ~((1<<4) | 1);


}
uint char_x2(uchar dat)
{
uchar i,temp_l,temp_h;
uint temp;
temp_l=0x00;
temp_h=0x00;
for(i=0;i<4;i++)
{
if(dat&BIT(i))temp_l|=BIT(i*2)|BIT(i*2+1);
if(dat&BIT(i+4))temp_h|=BIT(i*2)|BIT(i*2+1);
}
temp=(uint)temp_h*256+temp_l;
return temp;
}
uint RGB(uchar r,uchar g,uchar b)
{
uint temp=0x0000;
b&=0x3f;
b/=2;
g&=0x3f;
r&=0x3f;
r/=2;
temp=r;
temp*=0x3f;
temp+=g;
temp*=0x1f;
temp+=b;
return temp;
}
uint index_int(uint words,uchar const *str,uint size)
{
uint i=0;uint temp;
for(i=0;i
{
temp=str[i]+str[i+1]*256;
if(words==temp)return i/2;
i++;
}
return 0;
}
uchar index_char(uchar words,uchar flash *str,uint size)
{
uint i,temp;
for(i=0;i
{
temp=str[i];
if(words==temp)return i;
}
return 0;
}
ulong pwg(ulong dat,uchar n)//系统提供库函数长度有限只能自己做了
{
if(!n)return 1;
n--;
if(n<10)while(n--)
{
dat*=10;
}
return dat;
}
void draw_pin(ulong x,ulong y,uint c)
{
if(x
LCD_BUFFER[(y)][(x)] = c;
}
void addr_xy(uchar hight,uchar whith)
{
if((lcd_whith-addr_x)
}
void set_addr(uint x,uint y)
{
addr_x=x;
addr_y=y;
}
void set_color(uint ba,uint bc)
{
back_color=bc;
bar_color=ba;
}
void draw_nb_uchar(uint x,uint y,uchar temp)
{
uchar i;
uint bar_temp;
if(font_zf)bar_temp=bar_color;
else bar_temp=~bar_color;
for(i=0;i<8;i++)
{
if(BIT(i)&temp)draw_pin(x+i,y,bar_temp);
}
}
void draw_yb_uchar(uint x,uint y,uchar dat)
{
uchar i;
uint bar_temp;
if(font_zf)bar_temp=bar_color;
else bar_temp=~bar_color;
for(i=0;i<8;i++)if(BIT(i)&dat)draw_pin(x+i,y,bar_temp);
else draw_pin(x+i,y,back_color);
}
void printf_bmp(uchar hight,uchar whith,const uchar *str,uint py)
{
uchar j,i,temp;
for(i=0;i
{
for(j=0;j
{
temp=str[j+py+i*hight];
if(back_color==0x0000)draw_nb_uchar(addr_x+i*8,addr_y+j,temp);
else draw_yb_uchar(addr_x+i*8,addr_y+j,temp);
}
}
}
void printf_x2(uint hight,uint whith,const uchar *str,uint py)
{
uint temp1,temp2,i,j;
uint p;
for(i=0;i
{
for(p=0;p<2;p++)
{
for(j=0;j
{
temp1=str[j+py+i*hight];
temp1=char_x2(temp1);
if(p==1)temp2=temp1/256;
if(p==0)temp2=temp1%6;
if(back_color==0x0000)
{
draw_nb_uchar(i*16+p*8+addr_x,j*2+addr_y,temp2);
draw_nb_uchar(i*16+p*8+addr_x,j*2+1+addr_y,temp2);
}
else
{
draw_yb_uchar(i*8+p*8+addr_x,j*2+addr_y,temp2);
draw_yb_uchar(i*8+p*8+addr_x,j*2+1+addr_y,temp2);
}
}
}
}
}

void printf_0816(uint py)
{
addr_xy(16,8);
printf_bmp(16,1,dat0816,py*16);
}
void printf_1632(uint py)
{
addr_xy(32,16);
printf_x2(16,1,dat0816,py*16);
}
void printf_1616(uint py)
{
addr_xy(16,16);
printf_bmp(16,2,font1616,py*32);
}
void printf_2424(uint py)
{
addr_xy(24,24);
printf_bmp(24,3,font2424,py*72);
}
void printf_3232(uint py)
{
addr_xy(32,32);
printf_x2(16,2,font1616,py*32);
}
void printf_4848(uint py)
{
addr_xy(48,48);
printf_x2(24,3,font2424,py*72);
}

void printf_all_data(uchar font,char *str)
{
uint temp;
uint index;
temp=*str;
while(temp!=0x00)
{
index=index_char(temp,index0816,sizeof(index0816));
if(font==1)printf_0816(index);
if(font==2)printf_1632(index);
addr_x+=bj_x;;
temp=*(++str);
}
addr_y+=bj_y;
}
void printf_all_str(uchar font,char *str)
{
uchar hz_zf=1;
uint i=0;
int temp,index;
temp=str[i];
if(temp&0x80){hz_zf=1;temp+=(str[++i]*256);}else hz_zf=0;
while(temp!=0x00)
{
if(hz_zf)
{
if(font==48|font==24)index=index_int(temp,index2424,sizeof(index2424));
else index=index_int(temp,index1616,sizeof(index1616));
if(font==48)printf_4848(index);
if(font==32)printf_3232(index);
if(font==24)printf_2424(index);
if(font==16)printf_1616(index);
addr_x+=bj_x;
}
if(!hz_zf)
{
index=index_char(temp,index0816,sizeof(index0816));
if(font==32)printf_1632(index);
if(font==16)printf_0816(index);
addr_x+=bj_x/2;
}
temp=str[++i];
if(temp&0x80){hz_zf=1;temp+=(str[++i]*256);}else hz_zf=0;
}
addr_y+=bj_y;
}

void printf_0816char(uchar dat)
{
uint index;
index=index_char(dat,index0816,sizeof(index0816));
printf_0816(index);
}
void printf_1632char(uchar dat)
{
uint index;
index=index_char(dat,index0816,sizeof(index0816));
printf_1632(index);
}

void printf_0816str(char *str)
{
bj_x=8;
printf_all_data(1,str);
}
void printf_1632str(char *str)
{
bj_x=16;
printf_all_data(2,str);
}
void printf_1616str(char *str)
{
bj_x=16;
printf_all_str(16,str);
}
void printf_2424str(char *str)
{
bj_x=24;
printf_all_str(24,str);
}
void printf_3232str(char *str)
{
bj_x=32;
printf_all_str(32,str);
}
void printf_3232zf(uchar zf,char *str)
{
if(mouse_flag==zf)font_zf=0;
printf_3232str(str);
font_zf=1;
}
void printf_4848str(char *str)
{
bj_x=48;
printf_all_str(48,str);
}


void printf_int_data(uchar zf,ulong dat,uchar dp)//,void(*str)(uint dat))
{
ulong temp;
uchar i,dp_h,dp_l;
dp_h=dp/16;
dp_l=dp;
if(pwg(10,dp_h)<(dat+1))
{
if(((dat)/pwg(10,dp_h-2))>9){dp_l++;dat/=10;}
if(((dat)/pwg(10,dp_h-2))>99){dp_l++;dat/=10;}
}
dat*=10;
temp=pwg(10,(dp_h));//+1;//此处pow,10,5的五次方竟然是99999,卧槽
for(i=1;i
{
if(i==zf)font_zf=0;else font_zf=1;
if(bj_x==8)printf_0816char(dat%(temp*10)/temp+'0');
if(bj_x==16)printf_1632char(dat%(temp*10)/temp+'0');
temp/=10;addr_x+=bj_x; //字符地址自动右移2byte
if(i==dp_l)if(dp_l!=dp_h)//小数点位置调整
{
font_zf=1;
if(bj_x==8)printf_0816char('.');
if(bj_x==16)printf_1632char('.');
addr_x+=bj_x;
}
}
addr_y+=bj_y;
}
void printf_0816data(uchar zf,ulong dat,uchar dp)
{
bj_x=8;
printf_int_data(zf,dat,dp);
}
void printf_1632data(uchar zf,ulong dat,uchar dp)
{
bj_x=16;
printf_int_data(zf,dat,dp);//,printf_1632);
}

void printf_1616file(uint zf,char *str)//向下顺序打印字符
{
uint i=0,lin=22;
uint addr_temp;
addr_temp=addr_x;
bj_y=20;
if(mouse_flag<(lin))if(zf<(lin))i=1;
if(mouse_flag>(lin-1)&mouse_flag<(lin*2))if(zf>(lin-1)&zf<(lin*2))i=1;
if(mouse_flag>(lin*2-1)&mouse_flag<(lin*3))if(zf>(lin*2-1)&zf<(lin*3))i=1;
if(mouse_flag>(lin*3-1)&mouse_flag<(lin*4))if(zf>(lin*3-1)&zf<(lin*4))i=1;
if(mouse_flag==zf)font_zf=0;else font_zf=1;
if(i)printf_1616str(str);
addr_x=addr_temp;
}
void printf_3232file(uint zf,char *str)//向下顺序打印字符
{
uint i=0,lin=8;
uint addr_temp;
addr_temp=addr_x;
bj_y=40;
if(mouse_flag<(lin))if(zf<(lin))i=1;
if(mouse_flag>(lin-1)&mouse_flag<(lin*2))if(zf>(lin-1)&zf<(lin*2))i=1;
if(mouse_flag>(lin*2-1)&mouse_flag<(lin*3))if(zf>(lin*2-1)&zf<(lin*3))i=1;
if(mouse_flag>(lin*3-1)&mouse_flag<(lin*4))if(zf>(lin*3-1)&zf<(lin*4))i=1;
if(mouse_flag==zf)font_zf=0;else font_zf=1;
if(i)printf_3232str(str);
addr_x=addr_temp;
}
void printf_data_unit(ulong dat,uchar dp,char *str)
{
uint temp_x,temp_y;
temp_x=addr_x;temp_y=addr_y;
addr_x+=1;
addr_y-=16;
printf_0816data(0,dat,dp);
addr_x+=0;
addr_y-=16;
if(dp<0x50)printf_0816str(str);
addr_x=temp_x;addr_y=temp_y;
}
void printf_unit(uchar zf,char *str,ulong dat,uchar dp,char *str1)//向下顺序打印字符带参数
{
uchar i=0,lin=8;
uint addr_temp;
addr_temp=addr_x;
bj_y=16;
if(mouse_flag<(lin))if(zf<(lin))i=1;
if(mouse_flag>(lin-1)&mouse_flag<(lin*2))if(zf>(lin-1)&zf<(lin*2))i=1;
if(mouse_flag>(lin*2-1)&mouse_flag<(lin*3))if(zf>(lin*2-1)&zf<(lin*3))i=1;
if(mouse_flag>(lin*3-1)&mouse_flag<(lin*4))if(zf>(lin*3-1)&zf<(lin*4))i=1;
if(mouse_flag==zf)font_zf=0;else font_zf=1;
if(i)printf_1616str(str);
if(i)printf_data_unit(dat,dp,str1);
addr_x=addr_temp;
}
void printf_string(uchar font,char *fmt,...)
{
va_list ap;
char string[256];
va_start(ap,fmt);
vsprintf(string,fmt,ap);
switch(font)
{
case 16:printf_1616str(string);break;
case 32:printf_3232str(string);break;
default:break;
}
va_end(ap);
}

static void Lcd_Port_Init( void )
{
rGPCUP=0xffffffff; // Disable Pull-up register
rGPCCON=0xaaaa02a8; //Initialize VD[7:0],VM,VFRAME,VLINE,VCLK

rGPDUP=0xffffffff; // Disable Pull-up register
rGPDCON=0xaaaaaaaa; //Initialize VD[15:8]
}





static void Lcd_EnvidOnOff(int onoff)
{
if(onoff==1)
rLCDCON1|=1; // ENVID=ON
else
rLCDCON1 =rLCDCON1 & 0x3fffe; // ENVID Off
}


static void Lcd_PowerEnable(int invpwren,int pwren)
{
//GPG4 is setted as LCD_PWREN
rGPGUP = rGPGUP|(1<<4); // Pull-up disable
rGPGCON = rGPGCON|(3<<8); //GPG4=LCD_PWREN

//Enable LCD POWER ENABLE Function
rLCDCON5 = rLCDCON5&(~(1<<3))|(pwren<<3); // PWREN
rLCDCON5 = rLCDCON5&(~(1<<5))|(invpwren<<5); // INVPWREN
}


static void PutPixel(U32 x,U32 y,U16 c)
{
if(x
LCD_BUFFER[(y)][(x)] = c;
}


static void Lcd_ClearScr( U16 c)
{
unsigned int x,y ;

for( y = 0 ; y < SCR_YSIZE ; y++ )
{
for( x = 0 ; x < SCR_XSIZE ; x++ )
{
LCD_BUFFER[y][x] = c ;
}
}
}

static void Glib_Line(int x1,int y1,int x2,int y2, U16 color)
{
int dx,dy,e;
dx=x2-x1;
dy=y2-y1;

if(dx>=0)
{
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 1/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 2/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)

if(dx>=dy) // 8/8 octant
{
e=dy-dx/2;
while(x1<=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1+=1;
e+=dy;
}
}
else // 7/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1+=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
else //dx<0
{
dx=-dx; //dx=abs(dx)
if(dy >= 0) // dy>=0
{
if(dx>=dy) // 4/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1+=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 3/8 octant
{
e=dx-dy/2;
while(y1<=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1+=1;
e+=dx;
}
}
}
else // dy<0
{
dy=-dy; // dy=abs(dy)

if(dx>=dy) // 5/8 octant
{
e=dy-dx/2;
while(x1>=x2)
{
PutPixel(x1,y1,color);
if(e>0){y1-=1;e-=dx;}
x1-=1;
e+=dy;
}
}
else // 6/8 octant
{
e=dx-dy/2;
while(y1>=y2)
{
PutPixel(x1,y1,color);
if(e>0){x1-=1;e-=dy;}
y1-=1;
e+=dx;
}
}
}
}
}



static void Glib_FilledRectangle(int x1,int y1,int x2,int y2, U16 color)
{
int i;

for(i=y1;i<=y2;i++)
Glib_Line(x1,i,x2,i,color);
}


static void Paint_Bmp(int x0,int y0,int h,int l,const unsigned char *bmp)
{
int x,y;
U32 c;
int p = 0;

for( y = 0 ; y < l ; y++ )
{
for( x = 0 ; x < h ; x++ )
{
c = bmp[p+1] | (bmp[p]<<8) ;

if ( ( (x0+x) < SCR_XSIZE) && ( (y0+y) < SCR_YSIZE) )
LCD_BUFFER[y0+y][x0+x] = c ;

p = p + 2 ;
}
}
}
void draw_nb_bmp(uint x,uint y,const unsigned char *bmp,uchar attr)
{
uint j,i,high_bmp,whith_bmp,temp;
ulong index=24;
high_bmp=bmp[10]*256+bmp[11]; 读取图片高度
whith_bmp=bmp[8]*256+bmp[9]; 读取图片宽度
for(j=0;j
{
for(i=0;i
{
temp=bmp[index+1];
temp*=256;
temp+=bmp[index];
if ( ( (i+x) < SCR_XSIZE) && ( (j+y) < SCR_YSIZE) )
{
if(attr)if(temp!=0xffff)LCD_BUFFER[j+y][i+x]=temp;
if(!attr)LCD_BUFFER[j+y][i+x]=temp;
}
index+=2;
}
}
}
void draw_bmp(uint x,uint y,const unsigned char *bmp)
{
draw_nb_bmp(x,y,bmp,0);
}
void TFT_LCD_Init(void)
{

LCD_Init();
LcdBkLtSet( 70 ) ;
Lcd_PowerEnable(0, 1);
Lcd_EnvidOnOff(1); //turn on vedio

Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) );
Paint_Bmp(0, 0, 800, 480, sunflower_800x480);
}
void printf_y_line(U16 y,uint color)
{
uint i;
for(i=0;i
}
void printf_x_line(U16 x,uint color)
{
uint i;
for(i=0;i
}
void printf_y_note(uint y,uint x,uint x2,uint bj,uint num,uint color)
{
uint i;
for(i=0;i
Glib_Line(x,y+bj*num,x2,y+bj*num,color);
Glib_Line(x2,y,x2,num*bj+y,color);
Glib_Line(x,y,x,num*bj+y,color);
}
void printf_x_note(uint x,uint y,uint y2,uint bj,uint num,uint color)
{
uint i;
for(i=0;i
}
void printf_delta(uint x,uint y,uint x2,uint y2,uint x3,uint y3,uint color)
{
Glib_Line(x,y,x2,y2,color);
Glib_Line(x,y,x3,y3,color);
Glib_Line(x2,y2,x3,y3,color);
}
void printf_dk(uint x,uint y,uint x2,uint y2,uint attr)
{
uchar i=1;
while(i--)
{
Glib_Line(x+i,y+i,x2,y+i,attr);
Glib_Line(x+i,y2-i,x2-i,y2-i,attr);
Glib_Line(x+i,y,x+i,y2-i,attr);
Glib_Line(x2-i,y+i,x2-i,y2-i,attr);
}
}

void show_pixel(unsigned int x, unsigned int y, unsigned int colorr)
{
PutPixel(x,y,colorr);
}
void printf_round(int x,int y,int r,uint colorr)
{
unsigned int dx, dy = r;

for(dx = 0; dx <= r; dx++)
{
while((r * r + 1 - dx * dx) < (dy * dy)) dy--;
show_pixel(x + dx, y - dy, colorr);
show_pixel(x - dx, y - dy, colorr);
show_pixel(x - dx, y + dy, colorr);
show_pixel(x + dx, y + dy, colorr);
show_pixel(x + dy, y - dx, colorr);
show_pixel(x - dy, y - dx, colorr);
show_pixel(x - dy, y + dx, colorr);
show_pixel(x + dy, y + dx, colorr);
}
}
void delay()
{
Delay(1000);
}
void test_round()
{
uint i=0;
while(i++<800)
{
printf_round(200,480-i/2,i/4,0x0000);
printf_round(200,480-i/2,i/4,RGB(i%0x3f,i/0x3f,i%0x3f));
printf_round(600,480-i/2,i/4,0x0000);
printf_round(600,480-i/2,i/4,RGB(i%0x3f,i/0x3f,i%0x3f));
Delay(3);
}

}
void while_hand()
{
while(1)
{
if(live_toch){live_toch=0;return;}
}
}
void test_font()
{
uchar i=0;
font_zf=1;
set_color(green,0x0000);
set_addr(200,2);
printf_4848str("智能家居管理系统");
printf_y_line(50,yellow);
set_addr(50,100);
bj_y=50;
printf_3232file(i++,"返回");
printf_3232file(i++,"(1)查询");
printf_3232file(i++,"(2)工作状态查看");
printf_3232file(i++,"(3)添加新设备");
printf_3232file(i++,"(4)设备管理");
printf_3232file(i++,"(5)故障检测");
printf_3232file(i++,"(6)其他设置");
}

uchar size_str(char *str)
{
uchar i;
for(i=0;i<250;i++)if(str[i]==0)return i;
return 0;
}
uint add_str(char *str)
{
uchar i,size;
uint temp=0;
size=size_str(str);
for(i=0;i<250;i++)
{
temp+=(uint)str[i];
if(str[i]==0)return temp;
}
}
void printf_xls(uint x,uint y,char *str_x,char *str_y,uint color)
{
uint tempx,tempy;
uchar sizex,sizey;
uchar i;
uint temp=0;
tempx=add_str(str_x);
tempy=add_str(str_y);
sizex=size_str(str_x);
sizey=size_str(str_y);
Glib_Line(x+temp,y,x+temp,y+tempy,color);
for(i=0;i
{
temp+=str_x[i];
Glib_Line(x+temp,y,x+temp,y+tempy,color);
if(str_x[i]==0)break;
}
temp=0;
Glib_Line(x,y+temp,x+tempx,y+temp,color);
for(i=0;i
{
temp+=str_y[i];
Glib_Line(x,y+temp,x+tempx,y+temp,color);
if(str_y[i]==0)break;
}
}
//*************************************************************
uchar printf_rond_key(uint x,uint y,char *str)
{
draw_nb_bmp(x,y,anniu,1);
set_addr(x+7,y+7);
set_color(yellow,0x0000);
printf_3232str(str);
if(key_x>x&&key_x<(x+46)&&key_y>y&&key_y<(y+46))return 1;
else return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值