📄 410.c
字号:
如果没有写完一个半屏的数据就要充分结合此函数来达到要显示的效果
---------------------------------------------------------------------------*/
void LCD_Initial(void)
{
LCD_RST = 0; /* 置复位信号为低电平 */
// Delay_us(2);
LCD_RST = 1; /* 置复位信号为高电平 */
LCD_WriteCommand(0x3F,Left); /*显示开*/
LCD_WriteCommand(0x3F,Right);
LCD_WriteCommand(0xC0,Left); /*起始行*/
LCD_WriteCommand(0xC0,Right);
LCD_WriteCommand(0xB8,Left); /*起始页*/
LCD_WriteCommand(0xB8,Right);
LCD_WriteCommand(0x40,Left); /*起始列*/
LCD_WriteCommand(0x40,Right);
}
/*---------------------------------------------------------------------------
下面这个函数显示开机画面,按回车进入主控界面
---------------------------------------------------------------------------*/
firstpagelcd()
{
page=0xb8;
for(j=0;j<8;j++)
{
LCD_WriteCommand((page+j),Right);
LCD_WriteCommand(0x40,Right);
for(i=0;i<64;i++)
{
LCD_WriteData(fr[64*j+i],Right);
}};
page=0xb8;
for(j=0;j<8;j++)
{
LCD_WriteCommand((page+j),Left);
LCD_WriteCommand(0x40,Left);
for(i=0;i<64;i++)
{
LCD_WriteData(fl[64*j+i],Left);
}};
}
/*---------------------------------------------------------------------------
下面这个函数显示第二页画面的固定值
---------------------------------------------------------------------------*/
secondpage()
{
page=0xbc; //r0
pageend=2;clmsum=21;
clmstart=0x40;pagestart=0;
leftout(); //ri
pagestart=2;pageend=4;clmstart=0x40;
rightout();
page=0xba; //con:
pageend=8;clmsum=28;clmstart=0x40;
pagestart=6;
leftout(); //a+b:
pagestart=4;pageend=6;clmstart=0x40;
rightout();
}
/*---------------------------------------------------------------------------
下面这个函数显示左半屏数据
---------------------------------------------------------------------------*/
leftout(){
for((j=pagestart,k=0);j<pageend;(j++,k++))
{
LCD_WriteCommand((page+k),Left);
LCD_WriteCommand(clmstart,Left);
for(i=0;i<clmsum;i++)
{
digitalin=ro[j][i];
if(keysetin==1){digitalin=~ro[j][i];};
LCD_WriteData(digitalin,Left);
}}
keysetin=0;
}
/*---------------------------------------------------------------------------
下面这个函数显示右半屏数据
---------------------------------------------------------------------------*/
rightout(){
for((j=pagestart,k=0);j<pageend;(j++,k++))
{
LCD_WriteCommand((page+k),Right);
LCD_WriteCommand(clmstart,Right);
for(i=0;i<clmsum;i++)
{
digitalin=ro[j][i];
if(keysetin==1){digitalin=~ro[j][i];};
LCD_WriteData(digitalin,Right);
}}
keysetin=0;
}
/*---------------------------------------------------------------------------
下面这个函数用于数字数组例坐标选择,对应相应数值的点阵
---------------------------------------------------------------------------*/
swi()
{
switch (swd)
{
case 0: k=0; break;
case 1: k=1; break;
case 2: k=2; break;
case 3: k=3; break;
case 4: k=4; break;
case 5: k=5; break;
case 6: k=6; break;
case 7: k=7; break;
case 8: k=8; break;
case 9: k=9; break;
}
}
/*---------------------------------------------------------------------------
下面这个函数用于左半屏数字位的显示示,只需给定页地址,起始例
---------------------------------------------------------------------------*/
digitaloutleft()
{
for(j=0;j<2;j++)
{
LCD_WriteCommand((page+j),Left);
LCD_WriteCommand(clmstart,Left);
for(i=0;i<7;i++)
{
digitalin=digital[k][7*j+i];
if(keysetin==1){digitalin=~digital[k][7*j+i];};
LCD_WriteData(digitalin,Left);
}}
keysetin=0;
}
/*---------------------------------------------------------------------------
下面这个函数用于右半屏数字位的显示,只需给定页地址,起始例
---------------------------------------------------------------------------*/
digitaloutright()
{
for(j=0;j<2;j++)
{
LCD_WriteCommand((page+j),Right);
LCD_WriteCommand(clmstart,Right);
for(i=0;i<7;i++)
{
digitalin=digital[k][7*j+i];
if(keysetin==1){digitalin=~digital[k][7*j+i];};
LCD_WriteData(digitalin,Right);
}}
keysetin=0;
}
/*---------------------------------------------------------------------------
下面这个timespeedout函数用于第二页的时间及速度值显示,
---------------------------------------------------------------------------*/
timespeedout()
{
ymdhmsrout();
page=0xb8;clmstart=0x40;swd=2;swi();ifkeyl();digitaloutleft(); //yer1---
page=0xb8;clmstart=0x47;swd=0;swi();ifkeyl();digitaloutleft(); //yer-1--
page=0xb8;clmstart=0x4e;digih=year/10;swd=digih;swi();ifkeyl();digitaloutleft(); //yer--1-
page=0xb8;clmstart=0x55;digil=year%10;swd=digil;swi();ifkeyl();digitaloutleft(); //yer---1
page=0xb8;clmstart=0x63;digih=month/10;swd=digih;swi();ifkeyl();digitaloutleft(); //monthh
page=0xb8;clmstart=0x6a;digil=month%10;swd=digil;swi();ifkeyl();digitaloutleft(); //monthl
page=0xb8;clmstart=0x71;digih=day/10;swd=digih;swi();ifkeyl();digitaloutleft(); //dayh
page=0xb8;clmstart=0x78;digil=day%10;swd=digil;swi();ifkeyl();digitaloutleft(); //dayl
page=0xb8;clmstart=0x47;digih=hour/10;swd=digih;swi();ifkeyr();digitaloutright(); //hourh
page=0xb8;clmstart=0x4e;digil=hour%10;swd=digil;swi();ifkeyr();digitaloutright(); //hourl
page=0xb8;clmstart=0x55;k=12;digitaloutright(); //:
page=0xb8;clmstart=0x5c;digih=minute/10;swd=digih;swi();ifkeyr();digitaloutright(); //minuteh
page=0xb8;clmstart=0x63;digil=minute%10;swd=digil;swi();ifkeyr();digitaloutright(); //minutel
page=0xb8;clmstart=0x6a;k=12;digitaloutright(); //:
page=0xb8;clmstart=0x71;digih=second/10;swd=digih;swi();ifkeyr();digitaloutright(); //secondh
page=0xb8;clmstart=0x78;digil=second%10;swd=digil;swi();ifkeyr();digitaloutright(); //secondl
switch (symbolout){case 0: k=13;break;case 1: k=14;break;case 2: k=15;break;case 3: k=16;break;}
page=0xbc;clmstart=0x55; ifkeyl();digitaloutleft(); //switch symbol and out
page=0xbc;clmstart=0x5c;digih2=rout/1000; swd=digih2;swi();ifkeyl();digitaloutleft(); //rin1---
page=0xbc;clmstart=0x63;digih=(rout%1000)/100; swd=digih;swi(); ifkeyl();digitaloutleft(); //rin-1--
page=0xbc;clmstart=0x6a;digil2=((rout%1000)%100)/10; swd=digil2;swi();ifkeyl();digitaloutleft(); //rin--1-
page=0xbc;clmstart=0x71;digil=((rout%1000)%100)%10; swd=digil;swi(); ifkeyl();digitaloutleft(); //rin---1
switch (symbolin){case 0: k=13;break;case 1: k=14;break;case 2: k=15;break;case 3: k=16;break;}
page=0xbc;clmstart=0x55;ifkeyr(); digitaloutright(); //switch symbol and out
page=0xbc;clmstart=0x5c;digih2=rin/1000; swd=digih2;swi();ifkeyr();digitaloutright(); //rout1---
page=0xbc;clmstart=0x63;digih=(rin%1000)/100; swd=digih; swi();ifkeyr();digitaloutright(); //rout-1--
page=0xbc;clmstart=0x6a;digil2=((rin%1000)%100)/10;swd=digil2;swi();ifkeyr();digitaloutright(); //rout--1-
page=0xbc;clmstart=0x71;digil=((rin%1000)%100)%10; swd=digil; swi();ifkeyr();digitaloutright(); //rout---1
if(con==1){pagestart=8;pageend=10;clmstart=0x5c;clmsum=21;page=0xba;leftout();}//con:run
else if(con==0){pagestart=10;pageend=12;clmstart=0x5c;clmsum=21;page=0xba;keysetin=1;leftout();}//con:off
if(ab==1){pagestart=8;pageend=10;clmstart=0x5c;clmsum=21;page=0xba;rightout();}//a+b:run
else if(ab==0){pagestart=10;pageend=12;clmstart=0x5c;clmsum=21;page=0xba;keysetin=1;rightout();}//A+B:off
}
ifkeyl(){
if((page==keyud)&(clmstart==keylr)&(dir==Left)&(keyclr==1)){keysetin=keyset;} //judge the left twinkle function enable and adress
}
ifkeyr(){
if((page==keyud)&(clmstart==keylr)&(dir==Right)&(keyclr==1)){keysetin=keyset;} //judge the right twinkle function enable and adress
}
//////////////////the accident recode display
accidentdisplay()
{
ymdhmsrout();
page=0xbe;clmstart=0x40;swd=serial;swi();ifkeyl();digitaloutleft(); //yer1---
page=0xbe;clmstart=0x71;digih=day/10;swd=digih;swi();ifkeyl();digitaloutleft(); //dayh
page=0xbe;clmstart=0x78;digil=day%10;swd=digil;swi();ifkeyl();digitaloutleft(); //dayl
page=0xbe;clmstart=0x47;digih=hour/10;swd=digih;swi();ifkeyr();digitaloutright(); //hourh
page=0xbe;clmstart=0x4e;digil=hour%10;swd=digil;swi();ifkeyr();digitaloutright(); //hourl
page=0xbe;clmstart=0x55;k=12;digitaloutright(); //:
page=0xbe;clmstart=0x5c;digih=minute/10;swd=digih;swi();ifkeyr();digitaloutright(); //minuteh
page=0xbe;clmstart=0x63;digil=minute%10;swd=digil;swi();ifkeyr();digitaloutright(); //minutel
page=0xbe;clmstart=0x6a;k=12;digitaloutright(); //:
page=0xbe;clmstart=0x71;digih=second/10;swd=digih;swi();ifkeyr();digitaloutright(); //secondh
page=0xbe;clmstart=0x78;digil=second%10;swd=digil;swi();ifkeyr();digitaloutright(); //secondl
}
/*---------------------------------------------------------------------------
/*---------------------------------------------------------------------------
下面这个ymdnsrout函数用于将数组中的data取出用;
---------------------------------------------------------------------------*/
ymdhmsrout()
{
year =datacenter[0][2]*10+datacenter[0][3];
month =datacenter[0][5]*10+datacenter[0][6];
day =datacenter[0][7]*10+datacenter[0][8];
hour =datacenter[1][1]*10+datacenter[1][2];
minute=datacenter[1][4]*10+datacenter[1][5];
second=datacenter[1][7]*10+datacenter[1][8];
rout =datacenter[2][4]*1000+datacenter[2][5]*100+datacenter[2][6]*10+datacenter[2][7];
}
/*---------------------------------------------------------------------------
下面这个ymdnsrin函数用于将data装入数组;
---------------------------------------------------------------------------*/
ymdhmsrin()
{
datacenter[0][2]=year/10; datacenter[0][3]=year%10;
datacenter[0][5]=month/10; datacenter[0][6]=month%10;
datacenter[0][7]=day/10; datacenter[0][8]=day%10;
datacenter[1][1]=hour/10; datacenter[1][2]=hour%10;
datacenter[1][4]=minute/10; datacenter[1][5]=minute%10;
datacenter[1][7]=second/10; datacenter[1][8]=second%10;
datacenter[2][4]=rout/1000; datacenter[2][5]=(rout%1000)/100; datacenter[2][6]=((rout%1000)%100)/10; datacenter[2][7]=(((rout%1000)%100)%10)%10;
}
/*---------------------------------------------------------------------------
下面这个函数为主函数,根据程序要实现的功能写相应的应用程序
---------------------------------------------------------------------------*/
void main(void)
{
// XBR2=0x40;//ENABLE 交叉开关
// XBR1=0x08;//count
// XBR0=0x08;//pca
LCD_Initial();
LCD_keyclr(Left);
LCD_keyclr(Right);
firstpagelcd();
enterkeynumber=1;
LCD_keyclr(Left);
LCD_keyclr(Right);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -