📄 lcd
字号:
unsigned int xdata addr;
addr=G_BASE+(y-1)*BYTES_PER_ROW+x;
wdata(addr%256);
wdata(addr>>8);
wcode(0x24);
}
void draw_line(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1)
{
unsigned char xdata x,y,xx;
float yy;
x=x1-x0;
y=y1-y0;
if (x>y)
{
yy=y0;
for(xx=x0;xx<x1;xx++)
{
yy+=(float)y/x;
setxy((xx/8),yy);
setb((7-xx&7));
}
}
else
{
yy=x0;
for (xx=y0;xx<y1;xx++)
{
yy+=(float)x/y;
setxy(yy/8,xx);
setb((7-(char)yy&7));
}
}
}
void draw_rect(unsigned char lux0,unsigned char luy0,unsigned char rdx1,unsigned char rdy1)
{
draw_line(lux0,luy0,rdx1,luy0);
draw_line(rdx1,luy0,rdx1,rdy1);
draw_line(rdx1+1,luy0+1,rdx1+1,rdy1+1);
draw_line(lux0+1,rdy1,rdx1+1,rdy1);
draw_line(lux0,rdy1-1,rdx1,rdy1-1);
draw_line(lux0,luy0,lux0,rdy1);
}
void disp32(unsigned char x,unsigned char y,unsigned char *hz)
{
unsigned char xdata i;
unsigned int xdata addr;
for(i=0;i<32;i++)
{
addr=G_BASE+(((y-1)*16+i)*BYTES_PER_ROW)+(x-1);
wdata(addr%256);
wdata(addr>>8);
wcode(0x24);
wdata(hz[4*i]);
wcode(0xc0); //write left hz
addr++;
wdata(addr%256);
wdata(addr>>8);
wcode(0x24);
wdata(hz[4*i+1]);
wcode(0xc0); //write right hz
addr++;
wdata(addr%256);
wdata(addr>>8);
wcode(0x24);
wdata(hz[4*i+2]);
wcode(0xc0); //write left hz
addr++;
wdata(addr%256);
wdata(addr>>8);
wcode(0x24);
wdata(hz[4*i+3]);
wcode(0xc0); //write right hz
}
}
void displayhz_string(unsigned int x,unsigned char y,unsigned char col,unsigned char *s)
{
unsigned char xdata kk,j;
unsigned int hz_code,ll;
if(s==0)
return;
ll=strlen((const char*)s);
for(j = 0; j < ll/2; j++)
{
hz_code=*(s);
hz_code=hz_code<<8;
hz_code=hz_code|*(s+1);
kk=Findhz(hz_code);
disphz_char(x,y,col,hzk[kk].hz);
x=x+2;
xsize=x;
ysize=y;
s=s+2;
}
}
void disphz_char(unsigned int x,unsigned char y,unsigned char col,unsigned char *hz)
{
unsigned char xdata i;
unsigned int xdata addr;
for(i=0;i<16;i++)
{
addr=G_BASE+(((y-1)*16+i)*BYTES_PER_ROW)+x-1;
wdata(addr%256);
wdata(addr/256);
wcode(0x24);
if(col>=1)
{
wdata(hz[2*i]^0xff);
}
else
{
wdata(hz[2*i]);
}
wcode(0xc0); //write right hz
addr=G_BASE+(((y-1)*16+i)*BYTES_PER_ROW)+x;
wdata(addr%256);
wdata(addr/256);
wcode(0x24);
if(col>=1)
{
wdata(hz[2*i+1]^0xff);
}
else
{
wdata(hz[2*i+1]);
}
wcode(0xc0); //write left hz
}
}
void displayasc_str(unsigned char x,unsigned char y,unsigned char col,unsigned char *s)
{
unsigned char xdata i,j;
unsigned int xdata addr,hz_code;
if(s==0)
return;
for(j = 0;j < strlen((unsigned char*)s); j++)
{
hz_code = (unsigned char)*(s+j);
for(i=0;i<16;i++)
{
addr=G_BASE+(((y-1)*16+i)*BYTES_PER_ROW)+x-1;
wdata(addr%256);
wdata(addr/256);
wcode(0x24);
if(col>=1)
{
wdata(digital[hz_code-0x20][i]^0xff);
}
else
{
wdata(digital[hz_code-0x20][i]);
}
wcode(0xc0); //write hz
}
x=x+1;
xsize=x;
ysize=y;
}
}
void displayasc(unsigned char x,unsigned char y,unsigned char col,unsigned char s)
{
unsigned char xdata i;
unsigned int xdata addr;
for(i=0;i<16;i++)
{
addr=G_BASE+(((y-1)*16+i)*BYTES_PER_ROW)+x-1;
wdata(addr%256);
wdata(addr/256);
wcode(0x24);
if(col>=1)
{
wdata(digital[s-0x20][i]^0xff);
}
else
{
wdata(digital[s-0x20][i]);
}
wcode(0xc0); //write hz
}
x=x+1;
xsize=x;
ysize=y;
}
unsigned char Findhz(unsigned int c)
{
unsigned char zkno;
for(zkno=0;zkno<shzk;zkno++)
{
if(hzk[zkno].hzcode==c)
break;
}
return zkno;
}
void init_sys(void)
{
unsigned char j,k,l,sum,sum1,sum2,sum3;
unsigned int cc,dd,qq;
//init uart port
TMOD=0x20; //timer0 work in mode 1; timer1 work in mode 2;8 bits reload
TL1=0xFD; //work in 11.0592MHz;band rate is 19200
TH1=0xFD;
PCON=0x80; //SMOD=0
TR1=1; //t1 begin to work
SCON=0xD0; //串口工作于方式3,允许接收 ,单机对单机 DIYDIYDIYDIYDIYDIYDIYDIY //偶校验时,偶数个1时,校验位为0
EX0=0; //关INT0中断
EX1=0; //关INT1中断
ET0=0; //关T0中断
ET1=0; //关T1中断
ES=0; //关串口中断
EA=0;
for(j=0;j<200;j++) //清空接收缓冲区
{
rec_data_buf[j]=0;
}
LCD_ON=1;
BEEP=0;
COUNT=1;
CUT=1;
SHORTP=1;
colle_startup_flag=0;
if(mem_chip_num==1) //有1片存储器
{
user_num=2500; //用户数量为2500
}
if(mem_chip_num==2) //有2片存储器
{
user_num=5000; //用户数量为5000
}
if(mem_chip_num==3) //有3片存储器
{
user_num=7500; //用户数量为7500
}
if(mem_chip_num==4) //有4片存储器
{
user_num=10000; //用户数量为10000
}
collector_user_num=0; //集抄器发送的用户数量初始化为0
//read config data
slave_addr=0xa0;
k=read_e2prom(0x7f00,slave_addr,1);
l=read_e2prom(0x7f01,slave_addr,1);
sum=k+l; //校验和
sum1=read_e2prom(0x7f02,slave_addr,1); //1处校验和
sum2=read_e2prom(0x7f03,slave_addr,1); //2处校验和
sum3=read_e2prom(0x7f04,slave_addr,1); //3处校验和
if((sum==sum1)&&(sum==sum2)&&(sum==sum3))
{
sub_user_num=k*256+l; //剩余的用户存储空间
}
else //校验和出错
{
sub_user_num=user_num; //剩余的用户存储空间为默认总空间
}
comport=read_e2prom(0x7f06,slave_addr,1);
if(comport==232) //RS232通讯口
{
RS232_485=0;
}
else
{
RS232_485=1; //RS485通讯口
}
//init timer
write_e2prom(0,0xa2,0,0); //pcf8563 时钟运行
write_e2prom(0x01,0xa2,0,0); //关闭所有中断
//init 82c55
COM_8255=0x81; //8255 work mode 0,A,B pc7-pc4 port output;pc3-pc0 port input
PB=0xff;
//init lcm
wdata(T_BASE%256);
wdata(T_BASE/256);
wcode(0x40);
wdata(BYTES_PER_ROW%256);
wdata(BYTES_PER_ROW/256);
wcode(0x41); //set text area
wdata(G_BASE%256);
wdata(G_BASE/256);
wcode(0x42);
wdata(BYTES_PER_ROW%256);
wdata(BYTES_PER_ROW/256);
wcode(0x43); //set graphic area
wcode(0xa0); //cursor shape setup
wcode(0x80); //set display mode
wcode(0x98); //graphic on
clscr();
COM_8255=0x0e; //pc7=0 //按压回车键和左箭头恢复默认密码
if((PC&0x09)==0)
{
write_e2prom(0x7f0d,0xa0,1,0xaa);
}
for(j=0;j<7;j++) //密码验证默认密码668668
{
pass_word[j]=read_e2prom(0x7f07+j,0xa0,1);
}
if((pass_word[6]!=0x55)||(pass_word[0]>0x09)||(pass_word[1]>0x09)||(pass_word[2]>0x09)
||(pass_word[3]>0x09)||(pass_word[4]>0x09)||(pass_word[5]>0x09))
{
pass_word[0]=0x06;
pass_word[1]=0x06;
pass_word[2]=0x08;
pass_word[3]=0x06;
pass_word[4]=0x06;
pass_word[5]=0x08;
pass_word[6]=0x55;
for(j=0;j<7;j++)
{
write_e2prom(0x7f07+j,0xa0,1,pass_word[j]);
}
}
aa:
clscr();
if(verify_password()!=1)
{
dialog_massage(0xf0,1,"密码错!");
goto aa;
}
clscr();
dialog_massage(0,0,"数据载入中┅");
for(cc=0;cc<400;cc++) //读取集中器数据表
{
qq=(cc+1)/4;
display_slide(qq);
for(dd=0;dd<5;dd++)
{
collector_data_table[cc][dd]=read_e2prom((0x75f0+cc*5+dd),slave_addr,1);
}
}
logo_face=read_e2prom(0x7f05,slave_addr,1); //显示开机画面
if(logo_face==0x11)
{
disp_logo1();
}
else if(logo_face==0x22)
{
disp_logo2();
}
else
{
disp_logo3();
}
}
void display_slide(unsigned int percent)
{
displayasc_str(10,4,0,"%");
if((percent>0)&&(percent<10))
{
displayasc(9,4,0,(percent+0x30));
}
else if((percent>9)&&(percent<100))
{
displayasc(8,4,0,((percent/10)+0x30));
displayasc(9,4,0,((percent%10)+0x30));
}
else if(percent==100)
{
displayasc(7,4,0,((percent/100)+0x30));
displayasc(8,4,0,(((percent%100)/10)+0x30));
displayasc(9,4,0,((percent%10)+0x30));
}
}
void clscr(void)
{
unsigned int tt;
wdata(G_BASE%256); //clear ddram from address 0000h
wdata(G_BASE/256);
wcode(0x24);
wcode(0xb0); //data auto write
for(tt=0x0800;tt<0x0C00;tt++) //1k bytes ddram
{
wdata(0);
}
wcode(0xb2); //auto write data stop
}
void cls_rect(unsigned char x0,unsigned char x1,unsigned char y0,unsigned char y1)
{
unsigned char xdata i,j,k,l;
unsigned int xdata addr;
j=x1-x0;
l=y1-y0;
for(k=0;k<=l;k++)
{
addr=G_BASE+(k+y0-1)*BYTES_PER_ROW+x0-1;
wdata(addr%256);
wdata(addr/256);
wcode(0x24);
wcode(0xb0); //data auto write
for(i=0;i<j;i++)
{
wdata(0);
}
wcode(0xb2); //auto write data stop
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -