📄 lcd.c
字号:
wlcd16x16(2,5,0,ch16x16_16);wlcd16x16(2,21,0,ch16x16_17);
wlcd16x16(2,45,0,ch16x16_18);wlcd16x16(2,61,0,ch16x16_19);
wlcd16x16(2,85,0,ch16x16_20);wlcd16x16(2,101,0,ch16x16_21);
switch(d) /*判断汉字显示在哪个区间*/
{
case 0:
wlcd16x16(0,5,1,ch16x16_10);
wlcd16x16(0,21,1,ch16x16_11);
break;
case 1:
wlcd16x16(0,45,1,ch16x16_12);
wlcd16x16(0,61,1,ch16x16_13);
break;
case 2:
wlcd16x16(0,85,1,ch16x16_14);
wlcd16x16(0,101,1,ch16x16_15);
break;
case 3:
wlcd16x16(2,5,1,ch16x16_16);
wlcd16x16(2,21,1,ch16x16_17);
break;
case 4:
wlcd16x16(2,45,1,ch16x16_18);
wlcd16x16(2,61,1,ch16x16_19);
break;
case 5:
wlcd16x16(2,85,1,ch16x16_20);
wlcd16x16(2,101,1,ch16x16_21);
break;
default:break;
}
return;
}
/*身份显示程序,读取原来存储的驾驶员代码*/
void DISPLAYID() /*需要修改,需要设定P11,P10,选择页,读完数据后,返回原来的初值*/
{
unsigned char xdata i;
clrlcd();
wlcd16x16(0,0,0,ch16x16_30); //驾驶员代码
wlcd16x16(0,16,0,ch16x16_4);
wlcd16x16(0,32,0,ch16x16_50);
wlcd16x16(0,48,0,ch16x16_35);
wlcd16x16(0,64,0,ch16x16_36);
wlcd16x8(0,80,0,ch16x8_14);
P11=1;
P10=1;
for(i=0;i<7;i++)
wlcd16x8(2,66+8*i,0,ch16x8(cur_id[i]));//显示cur_id[]
}
/*修改驾驶员代码,位置参数j=0-5,显示的数字i=0-9,k=1反显*/
void CHANGEID(int i,int j,int k)
{
wlcd16x8(2,66+8*j,k,ch16x8(i));
}
/*默认的显示屏*/
void idle()
{
unsigned char xdata a[3],b[3],c[7],a1,b1;int xdata i;unsigned char xdata t;int xdata o,p,q;
P11=1;
P10=1;
if(FL_RDSEC)
{
ctr_beiguang++;
if(ctr_beiguang>=10)
{
P14=1;//背光灯灭
ctr_beiguang=9;
}
Get_1s_speed();
clrlcd();
wlcd8x8(0,0,0,ch8x8_2); //在第零页显示20以及斜线
wlcd8x8(0,8,0,ch8x8_0);
wlcd8x8(0,32,0,ch8x8_21);
wlcd8x8(0,56,0,ch8x8_21);
wlcd8x8(1,24,0,ch8x8_10); //在第一页显示时间中间的冒号
wlcd8x8(1,48,0,ch8x8_10);
wlcd8x8(2,0,0,ch8x8_13); //在第二页显示V: 以及km/h
wlcd8x8(2,8,0,ch8x8_10);
wlcd8x8(2,90,0,ch8x8_15);
wlcd8x8(2,98,0,ch8x8_16);
wlcd8x8(2,106,0,ch8x8_21);
wlcd8x8(2,114,0,ch8x8_14);
wlcd8x8(3,0,0,ch8x8_11); //在第三页显示“No. :”
wlcd8x8(3,8,0,ch8x8_17);
wlcd8x8(3,16,0,ch8x8_20);
wlcd8x8(3,24,0,ch8x8_10);
a[0]=OLD_YEAR;
a[1]=OLD_MONTH;
a[2]=OLD_DAY;
b[0]=OLD_HOUR;
b[1]=OLD_MIN;
b[2]=OLD_SEC;
for(i=0;i<7;i++)
{
Clr_WDog(); //清w-dog
c[i]=cur_id[i];
}
t=speed_1sec;
//把读到的BCD码的时间转换成一个一个字符
for(i=0;i<3;i++)
{
a1=a[i]&0x0f; //写年、月、日
a[i]=a[i]>>4;
b1=a[i]&0x0f;
wlcd8x8(0,16+24*i,0,ch8x8(b1));
wlcd8x8(0,24*(i+1),0,ch8x8(a1));
}
for(i=0;i<3;i++)
{
a1=b[i]&0x0f; //写时
b[i]=b[i]>>4;
b1=b[i]&0x0f;
wlcd8x8(1,8+24*i,0,ch8x8(b1));
wlcd8x8(1,16+24*i,0,ch8x8(a1));
}
o=t/100; //把读到的速度转化为可显示三位数
t=t%100;
p=t/10;
q=t%10;
wlcd8x8(2,58,0,ch8x8(o)); //显示三位的速度
wlcd8x8(2,66,0,ch8x8(p));
wlcd8x8(2,74,0,ch8x8(q));
for(i=0;i<7;i++) //显示当前的驾驶员代码
wlcd8x8(3,66+8*i,0,ch8x8(c[i]));
if (FL_RUN==0) //如果停止,则显示停止
{
wlcd16x16(0,90,0,ch16x16_5);
wlcd16x16(0,106,0,ch16x16_6);
}
else if (FLAG_LEGAL==0) //如果行驶中,判断是否非法驾驶,如果非法则只显示非法
{
wlcd16x16(0,90,0,ch16x16_1);
wlcd16x16(0,106,0,ch16x16_2);
}
else if (FL1_OVERSPEED) //如果合法驾驶,则判断是否超速,如果超速,则显示超速
{
//P15=1; //超速蜂鸣器鸣叫
wlcd16x16(0,90,0,ch16x16_7);
wlcd16x16(0,106,0,ch16x16_9);
}
else if (FL_OVERTIME) //如果合法驾驶,且不超速,则判断是否超时,如果超时,则显示超时
{
//P16=1; //超时蜂鸣器鸣叫
wlcd16x16(0,90,0,ch16x16_7);
wlcd16x16(0,106,0,ch16x16_8);
}
else //如果合法驾驶,且既不超速也不超时,则显示行驶
{
wlcd16x16(0,90,0,ch16x16_3);
wlcd16x16(0,106,0,ch16x16_4);
}
FL_RDSEC=0;
}
}
void DISPLAY_OVERTIME(unsigned char num,unsigned char t[])
{
unsigned char xdata a1;
unsigned char xdata b1;
unsigned char xdata j;
unsigned char xdata k;
unsigned char xdata d[10];
P11=1;
P10=1;
clrlcd();
if(num<10) //在第0 行最左端显示num
{
wlcd8x8(0,0,0,ch8x8(num)); //第num条记录
wlcd8x8(0,8,0,ch8x8_20);
}
else
{
wlcd8x8(0,0,0,ch8x8(num/10));
wlcd8x8(0,8,0,ch8x8(num%10));
wlcd8x8(0,16,0,ch8x8_20);
}
//上两行显示驾驶证号码
wlcd8x8(0,24,0,ch8x8_11); //在第0 行显示“No:”
wlcd8x8(0,32,0,ch8x8_17);
wlcd8x8(0,40,0,ch8x8_10);
for(j=0;j<2;j++)
for(k=0;k<9;k++) //在0行和1行右端分两行显示18位驾驶证号码
{
a1=t[j*9+k]-0x30;
wlcd8x8(j,50+8*k,0,ch8x8(a1));
}
for(k=0;k<10;k++)
{
Clr_WDog(); //清w-dog
d[k]=t[18+k];
}
wlcd8x8(2,16,0,ch8x8_21); //在第二三页固定位置写上“/”和“:”
wlcd8x8(2,40,0,ch8x8_21);
wlcd8x8(2,98,0,ch8x8_10);
wlcd8x8(3,16,0,ch8x8_21);
wlcd8x8(3,40,0,ch8x8_21);
wlcd8x8(3,98,0,ch8x8_10);
//把年月日等BCD码从一个字节拆成可显示的两个自节
for(j=2;j<4;j++)
{
for(k=0;k<3;k++)
{
Clr_WDog(); //清w-dog
a1=(d[5*(j-2)+k])&0x0f;
d[5*(j-2)+k]=(d[5*(j-2)+k])>>4;
b1=(d[5*(j-2)+k])&0x0f;
wlcd8x8(j,24*k,0,ch8x8(b1));
wlcd8x8(j,24*k+8,0,ch8x8(a1));
}
for(k=3;k<5;k++)
{
a1=(d[5*(j-2)+k])&0x0f;
d[5*(j-2)+k]=(d[5*(j-2)+k])>>4;
b1=(d[5*(j-2)+k])&0x0f;
wlcd8x8(j,10+24*k,0,ch8x8(b1));
wlcd8x8(j,18+24*k,0,ch8x8(a1));
}
}
}
/*显示部分函数*/
void DISPLAY()
{
unsigned char xdata NUM_OVERTIME=0;
unsigned char xdata i,j,k,l,m;
unsigned int xdata temp;
//unsigned int xdata temp;
unsigned char xdata e[21],a[3],b[3],c[5],d[5],a1,b1,c1,key;
P11=1;
P10=1;
//----------------------------------------------------------显示累计里程
clrlcd();
wlcd16x16(0,0,0,ch16x16_75); /*--累--*/
wlcd16x16(0,16,0,ch16x16_76); /*--计--*/
wlcd16x16(0,32,0,ch16x16_77); /*--里--*/
wlcd16x16(0,48,0,ch16x16_78); /*--程--*/
wlcd16x8(0,64,0,ch16x8_14); /*--:--*/
for(i=0;i<10;i++) //得到e[]的0至9
{
Clr_WDog(); //清w-dog
temp_long=1;
for(j=0;j<(9-i);j++)
{
Clr_WDog(); //清w-dog
temp_long*=10; //得到10的(9-i)次方
}
temp_long=LICHEN_ALL/temp_long; //LICHEN_ALL=LICHEN_ALL/10的(9-i)次方
e[i]=temp_long%10; //LICHEN_ALL对10取模
}
i=0;
do
{
Clr_WDog(); //清w-dog
k=e[i];
i++;
}while(k==0&&i<10);
switch (i)
{
case 10:
if(k)
{
wlcd8x8(3,76,0,ch8x8_0); /*--0--*/
wlcd8x8(3,84,0,ch8x8_20); /*--.--*/
k=e[9];
wlcd8x8(3,92,0,ch8x8(k));
}
else
wlcd8x8(3,92,0,ch8x8_0); /*--0--*/
break;
default:
for(j=(i-1);j<9;j++)
{
k=e[j];
wlcd8x8(3,12+8*j,0,ch8x8(k));
}
wlcd8x8(3,84,0,ch8x8_20); /*--.--*/
k=e[9];
wlcd8x8(3,92,0,ch8x8(k));
break;
}
wlcd8x8(3,104,0,ch8x8_15); /*--k--*/
wlcd8x8(3,112,0,ch8x8_16); /*--m--*/
key=WaitKey(300);
if(FL_RUN) return;
if(key==KEY1|key==LKEY1)return;
//----------------------------------------------------------显示超时纪录
//stop_3day[11]数组中前9个字节存放停车当天以及之前2天的日期,先从中取出各自的日期
for(i=0;i<3;i++) //读取停车前2天的年月日
{
Clr_WDog(); //清w-dog
a[i]=stop_3day[i];
}
for(i=0;i<3;i++) //读取停车前1天的年月日
{
Clr_WDog(); //清w-dog
b[i]=stop_3day[3+i];
}
for(i=0;i<5;i++) //读取停车当天的年月日时分
{
Clr_WDog(); //清w-dog
d[i]=stop_3day[6+i];
}
k=0;
l=0;
i=num_ovrec;
do
{
Clr_WDog(); //清w-dog
for(j=0;j<5;j++)
{
Clr_WDog(); //清w-dog
c[j]=overtime_rec[i][23+j]; //取出 overtime_rec[]数组中的一个停止年月日时分
}
if((a[0]==c[0]) && (a[1]==c[1]) && (a[2]==c[2])) //如果停车前2天的年月日与之相同
{
if(c[3]>d[3])
{
//判断驾驶员是否为当前驾驶员
m=0;
for(j=0;j<18;j++)
{
Clr_WDog(); //清w-dog
if(cur_id[7+j]==overtime_rec[i][j])
m++;
}
if(m==18) //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
{
NUM_OVERTIME++;
e[k]=i; //将对应的数组下标保存在e[]
k++;
}
}
else if(c[3]==d[3])
{
if(c[4]>=d[4])
{
//判断驾驶员是否为当前驾驶员
m=0;
for(j=0;j<18;j++)
{
Clr_WDog(); //清w-dog
if(cur_id[7+j]==overtime_rec[i][j])
m++;
}
if(m==18) //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
{
NUM_OVERTIME++;
e[k]=i; //将对应的数组下标保存在e[]
k++;
}
}
}
}
else if((b[0]==c[0]) && (b[1]==c[1]) && (b[2]==c[2])) //如果停车前1天的年月日与之相同
{
//判断驾驶员是否为当前驾驶员
m=0;
for(j=0;j<18;j++)
{
Clr_WDog(); //清w-dog
if(cur_id[7+j]==overtime_rec[i][j])
m++;
}
if(m==18) //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
{
NUM_OVERTIME++;
e[k]=i; //将对应的数组下标保存在e[]
k++;
}
}
else if((d[0]==c[0]) && (d[1]==c[1]) && (d[2]==c[2])) //如果停车当天的年月日与之相同
{
//判断驾驶员是否为当前驾驶员
m=0;
for(j=0;j<18;j++)
{
Clr_WDog(); //清w-dog
if(cur_id[7+j]==overtime_rec[i][j])
m++;
}
if(m==18) //如果overtime_rec[i][]的前18位完全等于cur_id[]的后18位
{
NUM_OVERTIME++;
e[k]=i; //将对应的数组下标保存在e[]
k++;
}
}
i=(i+1)%21;
l++;
}while(l<21);
clrlcd();
if(NUM_OVERTIME==0)
{
wlcd16x16(1,13,0,ch16x16_53); //显示没有超时记录
wlcd16x16(1,29,0,ch16x16_54);
wlcd16x16(1,45,0,ch16x16_7);
wlcd16x16(1,61,0,ch16x16_8);
wlcd16x16(1,77,0,ch16x16_28);
wlcd16x16(1,93,0,ch16x16_29);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -