📄 lcd.c
字号:
}
else lcd_busy=1;
LCDR=1;LCDCD=1; //LCDCE=0;
xspdelay(1);
P5=i;
xspdelay(3);
LCDW=0;
LCDW=1;
P5=0xaa;
xspdelay(1);
EA=1;
}
void lcdint(void)
{
uchar i;
LCD_PORT_Init();
wlcdi(0x40);
wlcdd(0x30);
wlcdd(0x87);
wlcdd(0x07);
wlcdd(40);
wlcdd(0x4c);
wlcdd(240);
wlcdd(40);
wlcdd(0x00);
wlcdi(0x44);
wlcdd(0x0);
wlcdd(0x0);
wlcdd(240);
wlcdd(0x80);wlcdd(0x25);wlcdd(240);
wlcdd(0);wlcdd(0);wlcdd(0);wlcdd(0);
wlcdi(0x59);
wlcdd(0x14);//04
wlcdi(0x5b);
wlcdd(0x0d);//d
wlcdi(0x46);
wlcdd(0);
wlcdd(0);
wlcdi(0x5a);
wlcdd(0);
wlcdi(0x4c);
wlcdi(0x42);
while(0){
wlcdi(0x46);
wlcdd(0);
wlcdd(0);
wlcdi(0x42);
wlcdd(0xaa);
wlcdi(0x5a);
wlcdd(0x4);
wlcdi(0x46);
wlcdd(0);
wlcdd(0);
wlcdi(0x43);
i=rlcdd();
}
//STB=0;
//wlcdi(0x59);
//wlcdd(0x54);
// wlcdi(0x42);
// wlcdd(65);
// wlcdd(66);
// wlcdd(67);
}
//0 关显示
//1 1,2屏显示
//2 1屏显示
void lcdzt(uchar i)
{
if (i==0) {wlcdi(0x59);wlcdd(0x00);}
if (i==1) {wlcdi(0x59);wlcdd(0x14);}
if (i==2) {wlcdi(0x59);wlcdd(0x04);}
}
void lcdclr(void)
{
int i;
uchar ii,bz;
lcdzt(0);
//写入标志点
wlcdi(0x46);
wlcdd(0xff);
wlcdd(0x4a);
wlcdi(0x42);
wlcdd(2);
for(ii=0;ii<3;ii++)
{
wlcdi(0x46);
wlcdd(0x80);
wlcdd(0x25);
wlcdi(0x4c);
wlcdi(0x42);
for (i=1; i<= 9600;i++)
{
if(ii==0) wlcdd(0);
if(ii==1) bwlcdd(0);
if(ii==2) {bwlcdi(0x42);bwlcdd(0);}
}
wlcdi(0x46);
wlcdd(0xff);
wlcdd(0x4a);
wlcdi(0x43);
bz=rlcdd(); //读标志点
if ((bz&0x02)!=0x02)
{
wlcdi(0x46);
wlcdd(0xff);
wlcdd(0x4a);
wlcdi(0x42);
wlcdd(0); //消除标志点,退出循环
ii=6;
}
}
//写入标志点
wlcdi(0x46);
wlcdd(0x7f);
wlcdd(0x25);
wlcdi(0x42);
wlcdd(1);
for(ii=0;ii<3;ii++)
{
wlcdi(0x46);
wlcdd(0x00);
wlcdd(0x00);
wlcdi(0x4c);
wlcdi(0x42);
for (i=1; i<= 9600;i++)//1920 3840
{
if(ii==0) wlcdd(0);
if(ii==1) bwlcdd(0);
if(ii==2) {bwlcdi(0x42);bwlcdd(0);}
}
wlcdi(0x46);
wlcdd(0x7f);
wlcdd(0x25);
wlcdi(0x43);
bz=rlcdd(); //读标志点
if ((bz&0x01)!=0x01)
{
wlcdi(0x46);
wlcdd(0x7f);
wlcdd(0x25);
wlcdi(0x42);
wlcdd(0); //消除标志点,退出循环
ii=6;
}
}
lcdzt(1);
}
void xspdelay(unsigned int x)
{
while(x--){}
}
void lcddw(uchar h,l)
{
lcdadd=h*800+l*2+40;//640
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
//input汉字
void lcdhz(uchar i)
{
int ii;
//if(i==0) lcdadd=lcdadd-40;
for (ii=0;ii<=(15+(i==0)*4);ii++){
wlcdi(0x42);
if (i!=0){wlcdd(hzpm[i][ii*2]);wlcdd(hzpm[i][ii*2+1]);}
else {wlcdd(0);wlcdd(0);}
lcdadd=lcdadd+40;//30
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
lcdadd=lcdadd-638-(i==0)*160;//478
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
//数字输入键
void lcdsz(uchar h,l,k) //h>hang shu l >lie shu k>kuan du
{
uchar i,j,ii;
lcdadd=h*800+l;
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
for (i=0;i<k;i++)
{
if ((dispbuf[i]<24)||(dispbuf[i]>127)) dispbuf[i]=' ';//44
j=dispbuf[i];
for (ii=0;ii<16;ii++)
{
wlcdi(0x42);
wlcdd(ascpm[j][ii]);
lcdadd=lcdadd+40; //30
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
lcdadd=lcdadd-639;
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
}
void lcdxsz(uchar h,l,k) //h>hang shu l >lie shu k>kuan du
{
uchar i,j,ii;
lcdadd=h*320+l;//-((h%2)==1)*80+l;//320 400
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
for (i=0;i<k;i++)
{
j=dispbuf[i]*(dispbuf[i]>39);
for (ii=0;ii<8;ii++)
{
wlcdi(0x42);
wlcdd(xascpm[j-39][ii]);//30
lcdadd=lcdadd+40; //30
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
lcdadd=lcdadd-319;
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
}
}
/*
void draw_line(uint x,y,x1,y1)
{
uint i;
float a,b,delta_x,delta_y,delta;
a=x;b=y;
delta_x=x1-a;delta_y=y1-b;
delta=fabs((fabs(delta_x)>fabs(delta_y))?delta_x:delta_y);
for (i=0;i<delta;i++)
{line(x,y,x,y,1); a+=delta_x/delta;b+=delta_y/delta;x=a;y=b;}
}
*/
void HW_line(int x,y,x1,y1,bit WR)
{
float XL,fx,fy,bz1,bz2;
int i,ii;
bz1=1;bz2=1;
fy=y1-y+.0001;fx=x1-x+.0001;
XL=fy/fx;
if(x>x1){i=x1;x1=x;x=i;i=y1;y1=y;y=i;}
for (i=x;i<=x1;i++){ii=XL*(i-x)+y+.5;line (i,ii,i,ii,WR); }
XL=fx/fy;
if(y>y1){i=y1;y1=y;y=i;i=x1;x1=x;x=i;}
for (i=y;i<=y1;i++){ii=XL*(i-y)+x+.5;line (ii,i,ii,i,WR); }
}
void line(uint x,y,x1,y1,bit WR)
{
uint i,ii;
unsigned int lcdadd,lcddata,lcdd;
if(x>320) x=319;
if(x1>320) x1=319;
if(y>240) y=239;
if(y1>240) y1=239;
if(x<0) x=0;
if(x1<0) x1=0;
if(y<0) y=0;
if(y1<0) y1=0;
for (i=y;i<=y1;i++)
{
for (ii=x;ii<=x1;ii++)
{
// if (x1==x)
{
if((x1>ii+7)&&(ii%8==0))
{
lcdadd=ii/8+i*40+9600;
lcdd=0xff;
ii=ii+7;
goto s1;
}
lcdadd=ii/8+i*40+9600;
lcddata=ii%8;
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
wlcdi(0x43);
lcdd=rlcdd();
s1:
wlcdi(0x46);
wlcdd(lcdadd%256);
wlcdd(lcdadd/256);
wlcdi(0x42);
lcddata=1<<(7-lcddata);
if (WR==1) lcddata=lcddata|lcdd;
else lcddata=(~lcddata)&lcdd;
wlcdd(lcddata);
}
}
}
lcddw(7,14);
//lcdhz(0);
lcddw(7,14);
//lcdhz(0);
}
/*
void print (void)
{
int i,ii;
P4&=0x7f;
if(dyf==1) prtbusy();
else goto end;
for (i=0;i<160;i++)
{
if (dyf==0) break;
STB=0;
P5=d[i]
xspdelay(200);
STB=1;
xspdelay(200);
STB=0;
//xspdelay(200);
if(P5==0x0a) break;
}
end:
i=i;
P4|=0x80;
}
*/
//k>9时快速显示 行、列、快、
void lcdk( uchar h,l,k,i)
{
uchar oldkey;
uint sx,sy,ex,ey,ii,iii;
oldkey=key;
sx=l*16-16;
sy=h*20;
ex=sx+k*16+30;
ey=sy+17;
if (i==1)
{
line(sx,sy,sx,ey,1);
line(ex,sy,ex,ey,1);
line(ex+1,sy+1,ex+1,ey+1,1);
line(sx,sy,ex,sy,1);
line(sx,ey,ex,ey,1);
line(sx+1,ey+1,ex+1,ey+1,1);
}
if (i==0)
{
lcdzt(2);
//bwlcdi(0x59);
//bwlcdd(0x04);
//k=k%10;
for (iii=0;iii<19;iii++)
{
bwlcdi(0x46);
bwlcdd((9600+h*800+l*2-2+iii*40)%256);
bwlcdd((9600+h*800+l*2-2+iii*40)/256);
bwlcdi(0x42);
for (ii=0;ii<=(k%10*2+3);ii++) bwlcdd(0xff);
}
// else
// for (iii=0;iii<19;iii++)
// {
// bwlcdi(0x46);
// bwlcdd((9600+h*800+l*2+iii*40)%256);
// bwlcdd((9600+h*800+l*2+iii*40)/256);
// bwlcdi(0x42);
// bwlcdd(0xff);
// bwlcdd(0xff);
// }
lcdzt(1);
//bwlcdi(0x59);
//bwlcdd(0x14);
if (k<10) for (iii=0;iii<=120;iii++) xspdelay(5000);
}
if (i==2)
{
lcdzt(2);
// bwlcdi(0x59);
// bwlcdd(0x04);
for (iii=0;iii<19;iii++)
{
bwlcdi(0x46);
bwlcdd((9600+h*800+l*2-2+iii*40)%256);
bwlcdd((9600+h*800+l*2-2+iii*40)/256);
bwlcdi(0x42);
for (ii=0;ii<=(k*2+3);ii++) bwlcdd(0x00);
}
line(sx,sy,sx,ey,1);
line(ex,sy,ex,ey,1);
line(ex+1,sy+1,ex+1,ey+1,1);
line(sx,sy,ex,sy,1);
line(sx,ey,ex,ey,1);
line(sx+1,ey+1,ex+1,ey+1,1);
lcdzt(1);
//bwlcdi(0x59);
//bwlcdd(0x14);
//for (iii=0;iii<=150;iii++) xspdelay(5000);
}
key=oldkey;
}
void lcd_exit(uchar h,l)
{
//lcddw(h,l);lcdhz(65);lcdhz(12);
strcpy(dispbuf,"Exit");
lcdsz(h,l*2,4);
lcdk(h,l,2,1);
}
void lcd_enter(uchar h,l)
{
//lcddw(h,l);lcdhz(55);lcdhz(57);
strcpy(dispbuf," OK ");
lcdsz(h,l*2,4);
lcdk(h,l,2,1);
}
void lcd_next(uchar h,l)
{
//lcddw(h,l);lcdhz(105);lcdhz(106);
strcpy(dispbuf,"Next");
lcdsz(h,l*2,4);
lcdk(h,l,2,1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -