📄 键盘及显示各功能模块.c
字号:
//LCD_Offset_Form_St:
EA=0;
LCD_Wr_Cmd(0x01); /*清屏*/
LCD_Set_DispPositon(1,2);
for(i=0;i<10;i++)
{
LCD_Wr_Data(Offset_Lable[i]); /*补偿值设置*/
}
Read_Offset(&offset);
LCD_Set_DispPositon(2,3);
//LCD_Wr_Data(symble); /*+ -*/
offset_Bit[0]=offset/10000;
offset=offset%10000;
offset_Bit[1]=offset/1000;
offset=offset%1000;
offset_Bit[2]=offset/100;
offset=offset%100;
offset_Bit[3]=offset/10;
offset=offset%10;
offset_Bit[4]=offset;
for(i=0;i<5;i++)LCD_Wr_Data(0x30+offset_Bit[i]);
LCD_Set_DispPositon(3,2);
for(i=0;i<12;i++)
{
LCD_Wr_Data(Offset_CLRzero_Lable[i]); /*自动清零吗?*/
}
LCD_Offset_Formkey_scan:
while(!Key_Press_Ack()); /*扫描键盘*/
key=Key_Value();
while(Key_Press_Ack()); /*判断是否起键*/
switch(key)
{
case Key_Up:
EA=1;
return Key_Up;
case Key_Down:
EA=1;
return Key_Down;
case Key_Fuc:
EA=1;
return Key_Fuc;
case Key_Ent:
Set_Offset(); //自动清零
delay_Nms(250);
delay_Nms(250);
EA=1;
return Key_Down;
default: /*非功能、翻页、回车键*/
goto LCD_Offset_Formkey_scan;
}
}
/* 上衡阈值设置窗口 最大值为9999*/
unsigned char LCD_Upgate_Form()
{
unsigned char i,j,gate_Bit[4],key,cur_pst;
unsigned int gatevalue;
LCD_Upgate_Form_St:
EA=0;
LCD_Wr_Cmd(0x01); /*清屏*/
LCD_Set_DispPositon(1,2);
for(i=0;i<12;i++)
{
LCD_Wr_Data(Upgate_Lable[i]); /*上衡阈值设置*/
}
Read_Upgate(&gatevalue);
LCD_Set_DispPositon(3,3);
gate_Bit[0]=gatevalue/1000;
gatevalue=gatevalue%1000;
gate_Bit[1]=gatevalue/100;
gatevalue=gatevalue%100;
gate_Bit[2]=gatevalue/10;
gatevalue=gatevalue%10;
gate_Bit[3]=gatevalue;
for(i=0;i<4;i++)LCD_Wr_Data(0x30+gate_Bit[i]);
LCD_Set_DispPositon(3,5);
for(i=0;i<4;i++)
{
LCD_Wr_Data(Upgate_Unit_Lable[i]); /*公斤*/
}
j=0; /*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
i=1; /*按方向键的次数(循环)*/
LCD_Wr_Cmd(0x0F); /*游标显示*/
LCD_Upgate_Formkey_scan:
switch(i)
{
case 1:
cur_pst=3;
break;
case 2:
cur_pst=4;
break;
default:
cur_pst=3;
break;
}
if(j==0)LCD_Set_DispPositon(3,cur_pst);
while(!Key_Press_Ack()); /*扫描键盘*/
key=Key_Value();
while(Key_Press_Ack()); /*判断是否起键*/
switch(key)
{
case Key_Up:
EA=1;
return Key_Up;
case Key_Down:
EA=1;
return Key_Down;
case Key_Fuc:
EA=1;
return Key_Fuc;
case Key_Ent:
gatevalue=gate_Bit[0]*1000+gate_Bit[1]*100+gate_Bit[2]*10+gate_Bit[3];
if(gatevalue>9999)
{
LCD_Wr_Cmd(0x0C);
goto LCD_Upgate_Form_St;
}
Set_Upgate(gatevalue);
EA=1;
return Key_Down;
case Key_Left:
j=0;
i--;
if(i==0) i=2;
goto LCD_Upgate_Formkey_scan;
case Key_Right:
j=0;
i++;
if(i==3)i=1;
goto LCD_Upgate_Formkey_scan;
default: /*数字*/
LCD_Wr_Data(0x30+key);
j++;
switch(cur_pst)
{
case 3:
if(j==1)gate_Bit[0]=key;
else if(j==2)gate_Bit[1]=key;
break;
case 4:
if(j==1)gate_Bit[2]=key;
else if(j==2)gate_Bit[3]=key;
break;
}
if(j==2)
{
j=0;
i++;
if(i==3) i=1;
}
goto LCD_Upgate_Formkey_scan;
}
}
/* 下衡阈值设置窗口 最大值为9999*/
unsigned char LCD_Downgate_Form()
{
unsigned char i,j,gate_Bit[4],key,cur_pst;
unsigned int gatevalue;
LCD_Downgate_Form_St:
LCD_Wr_Cmd(0x01); /*清屏*/
EA=0;
LCD_Set_DispPositon(1,2);
for(i=0;i<12;i++)
{
LCD_Wr_Data(Downgate_Lable[i]); /*下衡阈值设置*/
}
Read_Downgate(&gatevalue);
LCD_Set_DispPositon(3,3);
gate_Bit[0]=gatevalue/1000;
gatevalue=gatevalue%1000;
gate_Bit[1]=gatevalue/100;
gatevalue=gatevalue%100;
gate_Bit[2]=gatevalue/10;
gatevalue=gatevalue%10;
gate_Bit[3]=gatevalue;
for(i=0;i<4;i++)LCD_Wr_Data(0x30+gate_Bit[i]);
LCD_Set_DispPositon(3,5);
for(i=0;i<4;i++)
{
LCD_Wr_Data(Downgate_Unit_Lable[i]); /*公斤*/
}
j=0; /*0-还未改前半字符,1-改了前半字符,2-改了后半字符*/
i=1; /*按方向键的次数(循环)*/
LCD_Wr_Cmd(0x0F); /*游标显示*/
LCD_Downgate_Formkey_scan:
switch(i)
{
case 1:
cur_pst=3;
break;
case 2:
cur_pst=4;
break;
default:
cur_pst=3;
break;
}
if(j==0)LCD_Set_DispPositon(3,cur_pst);
while(!Key_Press_Ack()); /*扫描键盘*/
key=Key_Value();
while(Key_Press_Ack()); /*判断是否起键*/
switch(key)
{
case Key_Up:
EA=1;
return Key_Up;
case Key_Down:
EA=1;
return Key_Down;
case Key_Fuc:
EA=1;
return Key_Fuc;
case Key_Ent:
gatevalue=gate_Bit[0]*1000+gate_Bit[1]*100+gate_Bit[2]*10+gate_Bit[3];
if(gatevalue>9999)
{
LCD_Wr_Cmd(0x0C);
goto LCD_Downgate_Form_St;
}
Set_Downgate(gatevalue);
EA=1;
return Key_Down;
case Key_Left:
j=0;
i--;
if(i==0) i=2;
goto LCD_Downgate_Formkey_scan;
case Key_Right:
j=0;
i++;
if(i==3)i=1;
goto LCD_Downgate_Formkey_scan;
default: /*数字*/
LCD_Wr_Data(0x30+key);
j++;
switch(cur_pst)
{
case 3:
if(j==1)gate_Bit[0]=key;
else if(j==2)gate_Bit[1]=key;
break;
case 4:
if(j==1)gate_Bit[2]=key;
else if(j==2)gate_Bit[3]=key;
break;
}
if(j==2)
{
j=0;
i++;
if(i==3) i=1;
}
goto LCD_Downgate_Formkey_scan;
}
}
/* 车辆信息显示窗口 */
void LCD_Vheil_Info_Form()
{
unsigned char i;
unsigned int temp;
LCD_Wr_Cmd(0x01); /*清屏*/
LCD_Set_DispPositon(1,1);
for(i=0;i<6;i++)
{
LCD_Wr_Data(VhNum_Lable[i]); /*车号:*/
}
temp=Vheil_num;
LCD_Set_DispPositon(1,4);
LCD_Wr_Data(0x30+temp/10000);
temp=temp%10000;
LCD_Wr_Data(0x30+temp/1000);
temp=temp%1000;
LCD_Wr_Data(0x30+temp/100);
temp=temp%100;
LCD_Wr_Data(0x30+temp/10);
temp=temp%10;
LCD_Wr_Data(0x30+temp);
LCD_Set_DispPositon(2,1);
for(i=0;i<6;i++)
{
LCD_Wr_Data(VhWght_Lable[i]); /*车重:*/
}
temp=Vheil_Info.Vheil_Weight;
LCD_Set_DispPositon(2,4);
LCD_Wr_Data(0x30+temp/10000);
temp=temp%10000;
LCD_Wr_Data(0x30+temp/1000);
temp=temp%1000;
LCD_Wr_Data(0x30+temp/100);
temp=temp%100;
LCD_Wr_Data(0x30+temp/10);
temp=temp%10;
LCD_Wr_Data(0x30+temp);
LCD_Set_DispPositon(2,7);
for(i=0;i<2;i++)
{
LCD_Wr_Data(VhWght_Unit_Lable[i]); /*Kg*/
}
LCD_Set_DispPositon(3,1);
for(i=0;i<6;i++)
{
LCD_Wr_Data(VhLmt_Lable[i]); /*车限:*/
}
temp=Vheil_Info.Weight_Limit;
LCD_Set_DispPositon(3,4);
LCD_Wr_Data(0x30+temp/10000);
temp=temp%10000;
LCD_Wr_Data(0x30+temp/1000);
temp=temp%1000;
LCD_Wr_Data(0x30+temp/100);
temp=temp%100;
LCD_Wr_Data(0x30+temp/10);
temp=temp%10;
LCD_Wr_Data(0x30+temp);
LCD_Set_DispPositon(3,7);
for(i=0;i<2;i++)
{
LCD_Wr_Data(VhLmt_Unit_Lable[i]); /*Kg*/
}
LCD_Set_DispPositon(4,1);
for(i=0;i<6;i++)
{
LCD_Wr_Data(VhSpd_Lable[i]); /*车速:*/
}
temp=Vheil_Info.Vheil_Speed;
LCD_Set_DispPositon(4,5);
LCD_Wr_Data(0x30+temp/100);
temp=temp%100;
LCD_Wr_Data(0x30+temp/10);
temp=temp%10;
LCD_Wr_Data(0x30+temp);
LCD_Set_DispPositon(4,7);
for(i=0;i<4;i++)
{
LCD_Wr_Data(VhSpd_Unit_Lable[i]); /*Km/H*/
}
LCD_Wr_Cmd(0x0C);
}
main()
{
unsigned char key,i;
for(i=0;i<5;i++) delay_Nms(250);
AD8255_Initiate();
LCD_init();
// LCD_Vheil_Info_Form();
while(1)
{
FUN_VHEIL_INFO:
LCD_Vheil_Info_Form();
while(!Key_Press_Ack());
key=Key_Value();
while(Key_Press_Ack());
if(key==Key_Fuc) /*首次按下功能键*/
{
FUN_TIME:
key=LCD_Time_Form();
switch(key)
{
case Key_Up:
goto FUN_DOWNGATE;
break;
case Key_Down:
goto FUN_DATE;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_DATE:
key=LCD_Date_Form();
switch(key)
{
case Key_Up:
goto FUN_TIME;
break;
case Key_Down:
goto FUN_DISTANCE;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_DISTANCE:
key=LCD_Distance_Form();}
switch(key)
{
case Key_Up:
goto FUN_DATE;
break;
case Key_Down:
goto FUN_SCAL;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_SCAL:
key=LCD_Scal_Form();
switch(key)
{
case Key_Up:
goto FUN_DISTANCE;
break;
case Key_Down:
goto FUN_OFFSET;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_OFFSET:
key=LCD_Offset_Form();
switch(key)
{
case Key_Up:
goto FUN_SCAL;
break;
case Key_Down:
goto FUN_UPGATE;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_UPGATE:
key=LCD_Upgate_Form();
switch(key)
{
case Key_Up:
goto FUN_OFFSET;
break;
case Key_Down:
goto FUN_DOWNGATE;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
FUN_DOWNGATE:
key=LCD_Downgate_Form();
switch(key)
{
case Key_Up:
goto FUN_UPGATE;
break;
case Key_Down:
goto FUN_TIME;
break;
case Key_Fuc:
goto FUN_VHEIL_INFO;
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -