📄 lcd.c
字号:
{
line(257,207,280,196,BLACK);
line(257,207,280,219,BLACK);
line(268,207,280,196,BLACK);
line(268,207,280,219,BLACK);
return;
}
void arrow7(void)
{
line(257,196,280,207,BLACK);
line(257,196,268,219,BLACK);
line(268,207,280,207,BLACK);
line(268,207,268,219,BLACK);
return;
}
void disp_state_column(void)
{
disp_bmp(10,10,24,24,gps_state_dot);
disp_bmp(252,10,24,24,shipping_dot);
disp_bmp(286,10,24,24,head_dot);
return;
}
void disp_time(void)
{
get_hzdot(0xa3,timecb.hour/10+0xb0,125,16);
get_hzdot(0xa3,timecb.hour%10+0xb0,135,16);
get_hzdot(0xa1,0xc3,145,16);
get_hzdot(0xa3,timecb.minute/10+0xb0,155,16);
get_hzdot(0xa3,timecb.minute%10+0xb0,165,16);
get_hzdot(0xa1,0xc3,175,16);
get_hzdot(0xa3,timecb.second/10+0xb0,185,16);
get_hzdot(0xa3,timecb.second%10+0xb0,195,16);
return;
}
void disp_init_window(void)
{
watchdog_reset();
clear(WHITE);
disp_state_column();
disp_main_menu();
gps_disc();
return;
}
void clear(unsigned char colorb)
{
unsigned char i,j,c;
c=(colorb<<4)|colorb;
wr_cmd=0; //"写低8位地址
wr_dat=0x00;
wr_cmd=1; //"写高8位地址
wr_dat=0x00;
wr_cmd=2; //"显示数据读写通道
for(i=0;i<40;i++)
{
for(j=0;j<234;j++)
{
wr_dat=c;wr_dat=c;wr_dat=c;wr_dat=c;
wr_dat=c;wr_dat=c;wr_dat=c;wr_dat=c;
}
}
wr_cmd=3; //"关数据读写通道
return;
}
void disp_bmp(unsigned int x,unsigned int y,unsigned int row_num,unsigned int col_num,unsigned char *charp)
{
unsigned int addr;
unsigned int i,j;
unsigned char *p;
//command=wr1_disp1_cmd;
p=charp;
for(i=y;i<(y+col_num);i++)
{
addr=i*320+x;
if((i>204)||((i==204)&&(x>255)))
{
wr_cmd=0x04;
wr_dat=addr%256;
wr_cmd=0x05;
wr_dat=addr/256;
wr_cmd=0x06;
}
else
{
wr_cmd=0x00;
wr_dat=addr%256;
wr_cmd=0x01;
wr_dat=addr/256;
wr_cmd=0x02;
}
for(j=0;j<row_num;j++)
wr_dat=(*(p++));
}
return;
}
void wr_chinese(unsigned int x,unsigned char y,unsigned char type)
{
union
{
unsigned long alldata;
unsigned char clondata[4];
}aa;
unsigned int addr;
unsigned char i,j,l,pot;
l=2;
for(i=0;i<16;i++)
{
addr=(y+i)*320+x;
if(((y+i)>204)||(((y+i)==204)&&(x>255)))
{
wr_cmd=0x04;
wr_dat=addr%256;
wr_cmd=0x05;
wr_dat=addr/256;
wr_cmd=0x06;
}
else
{
wr_cmd=0x00;
wr_dat=addr%256;
wr_cmd=0x01;
wr_dat=addr/256;
wr_cmd=0x02;
}
for(j=0;j<l;j++)
{
for(pot=0;pot<8;pot++)
{
aa.alldata=aa.alldata<<4;
if(type==0)
{
if(((*(hanzi_dot+i*l+j))&(0x80>>pot))>0)
{
aa.alldata=aa.alldata|(unsigned long)BLACK;
else
aa.alldata=aa.alldata|(unsigned long)WHITE;
}
}
else if(type==1)
{
if(((*(hanzi_dot+i*l+j))&(0x80>>pot))>0)
{
aa.alldata=aa.alldata|(unsigned long)WHITE;
else
aa.alldata=aa.alldata|(unsigned long)BLACK;
}
}
}
wr_dat=aa.clondata[0];
wr_dat=aa.clondata[1];
wr_dat=aa.clondata[2];
wr_dat=aa.clondata[3];
}
wr_cmd=0x03;
}
return;
}
void get_hzdot(unsigned char hh,unsigned char ll,unsigned int x,unsigned char y,unsigned char type)
{
unsigned char rdchar;
unsigned char i;
unsigned char page;
unsigned char xdata * idata offset_inpage;
WDKEY=0x55;
if(((hh>=0xa1)&&(hh<=0xaa))||((hh==0xab)&&(ll<=0xf4)))
{
page=0;
offset_inpage=0x8000+(94*(hh-0xa1)+(ll-0xa1))*32;
goto GET;
}
if(((hh==0xab)&&(ll>=0xf5))||((hh>=0xac)&&(hh<=0xb5))||((hh==0xb6)&&(ll<=0xea)))
{
page=1;
if((hh==0xab)&&(ll>=0xf5))
offset_inpage=0x8000+(94*(hh-0xab)+(ll-0xf5))*32;
else
offset_inpage=0x8000+(94*(hh-0xac)+(ll-0xa1)+10)*32;
goto GET;
}
if(((hh==0xb6)&&(ll>=0xeb))||((hh>=0xb7)&&(hh<=0xc0))||((hh==0xc1)&&(ll<=0xe0)))
{
page=2;
if((hh==0xb6)&&(ll>=0xeb))
offset_inpage=0x8000+(94*(hh-0xb6)+(ll-0xeb))*32;
else
offset_inpage=0x8000+(94*(hh-0xb7)+(ll-0xa1)+20)*32;
goto GET;
}
if(((hh==0xc1)&&(ll>=0xe1))||((hh>=0xc2)&&(hh<=0xcb))||((hh==0xcc)&&(ll<=0xd6)))
{
page=3;
if((hh==0xc1)&&(ll>=0xe1))
offset_inpage=0x8000+(94*(hh-0xc1)+(ll-0xe1))*32;
else
offset_inpage=0x8000+(94*(hh-0xc2)+(ll-0xa1)+30)*32;
goto GET;
}
if(((hh==0xcc)&&(ll>=0xd7))||((hh>=0xcd)&&(hh<=0xd6))||((hh==0xd7)&&(ll<=0xcc)))
{
page=4;
if((hh==0xcc)&&(ll>=0xd7))
offset_inpage=0x8000+(94*(hh-0xcc)+(ll-0xd7))*32;
else
offset_inpage=0x8000+(94*(hh-0xcd)+(ll-0xa1)+40)*32;
goto GET;
}
if(((hh==0xd7)&&(ll>=0xcd))||((hh>=0xd8)&&(hh<=0xe1))||((hh==0xe2)&&(ll<=0xc2)))
{
page=5;
if((hh==0xd7)&&(ll>=0xcd))
offset_inpage=0x8000+(94*(hh-0xd7)+(ll-0xcd))*32;
else
offset_inpage=0x8000+(94*(hh-0xd8)+(ll-0xa1)+50)*32;
goto GET;
}
if(((hh==0xe2)&&(ll>=0xc3))||((hh>=0xe3)&&(hh<=0xec))||((hh==0xed)&&(ll<=0xb8)))
{
page=6;
if((hh==0xe2)&&(ll>=0xc3))
offset_inpage=0x8000+(94*(hh-0xe2)+(ll-0xc3))*32;
else
offset_inpage=0x8000+(94*(hh-0xe3)+(ll-0xa1)+60)*32;
goto GET;
}
if(((hh==0xed)&&(ll>=0xb9))||((hh>=0xee)&&(hh<=0xf7)))
{
page=7;
if((hh==0xed)&&(ll>=0xb9))
offset_inpage=0x8000+(94*(hh-0xed)+(ll-0xb9))*32;
else
offset_inpage=0x8000+(94*(hh-0xee)+(ll-0xa1)+70)*32;
goto GET;
}
// Because of the restriction of the processor,use the following method(consume too many timer cycles) can not get the HZdot!
// offset_inpage=0x8000+((94*(hh-0xa1)+(ll-0xa1))*32)%(32*1024);
// page=((94*(hh-0xa1)+(ll-0xa1))*32)/(32*1024);
GET:
for(i=0;i<32;i++)
{
PSD8xx_reg.PAGE=page|0x80;
rdchar=*(offset_inpage++);
PSD8xx_reg.PAGE=0x00;
hanzi_dot[i]=rdchar;
}
//type=0,正常显示;type=1,反显
wr_chinese(x,y,type);
return;
}
//对称法画圆的8个镜像点
void plot_circle_points(unsigned int x,unsigned int y,unsigned int xx,unsigned int yy,unsigned char c)
{ //对称法画圆的8个镜像点
set_pixel((x+yy),(y+xx),c); //第 1 个 8 分圆
set_pixel((x+xx),(y+yy),c); //第 2 个 8 分圆
set_pixel((x-xx),(y+yy),c); //第 3 个 8 分圆
set_pixel((x-yy),(y+xx),c); //第 4 个 8 分圆
set_pixel((x-yy),(y-xx),c); //第 5 个 8 分圆
set_pixel((x-xx),(y-yy),c); //第 6 个 8 分圆
set_pixel((x+xx),(y-yy),c); //第 7 个 8 分圆
set_pixel((x+yy),(y-xx),c); //第 8 个 8 分圆
return;
}
void circle (int xc,int yc,int radius,int c)
{
int x, y, p;
x=0;
y=radius;
p=3-2*radius;
while (x<y)
{
plot_circle_points(xc, yc, x, y, c);
if (p<0)
p=p+4*x+6;
else
{
p=p+4*(x-y)+10;
y-=1;
}
x+=1;
}
if (x==y)
plot_circle_points(xc, yc, x, y, c);
return;
}
void set_pixel(unsigned int x,unsigned char y,unsigned char colorb)
{
unsigned int addr;
unsigned char c,j;
addr=y*320+x;
if((y>204)||((y==204)&&(x>255)))
{
wr_cmd=0x04;
wr_dat=addr%256;
wr_cmd=0x05;
wr_dat=addr/256;
wr_cmd=0x06;
}
else
{
wr_cmd=0x00;
wr_dat=addr%256;
wr_cmd=0x01;
wr_dat=addr/256;
wr_cmd=0x02;
}
c=rd_dat;
j=((unsigned char)x)&0x01;
if(j==0x00) //even pot
{c=(c&0x0f)|(colorb<<4);}
else if(j==0x01) //odd pot
{c=(c&0xf0)|colorb;}
else c=(RED<<4)|RED;
wr_dat=c;
wr_cmd=0x03;
return;
}
int abs (int val)
{
if(val>=0)
return val;
return(-val);
}
void line(unsigned int x0,unsigned int y0,unsigned int x1,unsigned int y1,unsigned char colorb)
{
float l;
unsigned int i;
l=abs(x1-x0)>abs(y1-y0)?abs(x1-x0):abs(y1-y0);
if(x1>=x0&&y1>=y0)
{
for(i=0;i<l;i++)
set_pixel(x0+(x1-x0)/l*i,y0+(y1-y0)/l*i,colorb);
}
else if(x1<x0&&y1>=y0)
{
for(i=0;i<l;i++)
set_pixel(x0-(x0-x1)/l*i,y0+(y1-y0)/l*i,colorb);
}
else if(x1>=x0&&y1<y0)
{
for(i=0;i<l;i++)
set_pixel(x0+(x1-x0)/l*i,y0-(y0-y1)/l*i,colorb);
}
else
{
for(i=0;i<l;i++)
set_pixel(x0-(x0-x1)/l*i,y0-(y0-y1)/l*i,colorb);
}
return;
}
//poll the lcd event
void lcd_poll(void)
{
watchdog_reset();
if(lcdcb.delay_disp_on==1)
{
if(check_timer(lcdcb.delay_disp_timerh)==0)
{
lcdcb.delay_disp_on=0;
//clear state msg
if(keycb.exit_curr_level==1)
{
keycb.exit_curr_level=0;
keycb.menu_level=1;
}
lcdcb.event_notice=SCR_EVENT_MAIN_MENU;
}
}
switch(lcdcb.event_notice)
{
case SCR_EVENT_DISPLAY_FINISHED :
break;
case SCR_EVENT_INIT_INFO:
disp_init_info();
if(ppcb.msg_ack_flag&(BROADCAST_MSG_ON|DISPATCH_MSG_ON|WATERLEVEL_AJUST_MSG_ON))
{
ppcb.msg_ack_flag&=~BROADCAST_MSG_ON;
ppcb.msg_ack_flag&=~DISPATCH_MSG_ON;
ppcb.msg_ack_flag&=~WATERLEVEL_AJUST_MSG_ON;
clear_state_msg();
}
if(keycb.exit_curr_level==1)
{
keycb.exit_curr_level=0;
keycb.menu_level=0;
}
if(keycb.enter_next_level==1)
{
keycb.enter_next_level=0;
keycb.menu_level++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -