本帖最后由 常见泽1 于 2015-5-20 23:56 编辑
1.前言
前面几篇简单的实现了IIC数据的读写,LCD的按键和循环显示,现在将两者整合在一起。
实现如下大致功能:
(1)开发板下载程序后上电,
(2)如果不进行按键操作,则LCD进行循环显示,循环屏数为6屏,分别显示为:
“Current :”屏,
“software:”屏,
电压采样值屏,“Thetemperature:”屏,
“Baud Rate:”屏,
“ALLDisplay Screen:”屏。
(屏里面显示的参数的值尚未全部添加,后期会慢慢加进来,敬请期待)
(3)如果在循环显示过程中,按键按下,则进入键显状态,按键按下一翻一屏,不按则保持上次按键按下的屏显,如果十几秒内检测不到按键按下了,则回到上次循环显示的屏数进行显示。
键盘显示屏分别为:
"Correspondence Address : 24500168"屏,(主要完成从IIC读取通信地址,在LCD上显示)
"Meter No: FFFFFFFFFFFF"屏,
电压采样值屏,"Thetemperature:6 "屏,
"BaudRate:115200"屏,
"ALL Display Screen:6 "屏。
2.部分源代码先将地址数据写入EEPROM里
voidfnDl645File_Init(void)
{// fnDl645File_Write(Dl645FileId_HighPara ,0 , (u8 *)&HighParaDefault , Dl645FileLen_HighPara);
AtmelWrite((u8 *)&HighParaDefault,1, 12);
}
数据为地址的通信地址
const sDl645HighParaFile_TypeDefHighParaDefault ={ {0x24 , 0x51 , 0x00 , 0x00 , 0x05 ,0x08} , {0x11 , 0x11 , 0x11 , 0x22 , 0x22 ,0x22} ,}
再从EEPROM里读地址数据到recData数组里fnDl645File_Read(Dl645FileAddr_HighPara,Dl645FileItemInfoNum_HighPara_ComAddr,&recData[0],6);
下面的问题是怎么将地址数据显示到LCD上
开始我是直接赋值s[10]=recData[5];
但是LCD显示出来数字都不对应该是ASCII码的问题,
下面这样可以s[6]=recData[3]/10+'0';
- case 1:
- LCD_Clear();
- GrContextFontSet(&sContext, &g_sFontCm20);
- GrStringDraw(&sContext, "Key Display No: 1", -1, 0, 0, 0);
- GrStringDraw(&sContext, "Correspondence Address: ", -1, 0, 60, 0);
- s[10]=recData[5]/10+'0';//取下一个数字
- s[11]=recData[5]%10+'0';//取下一个数字
- s[8]=recData[4]/10+'0';//取下一个数字
- s[9]=recData[4]%10+'0';
- s[6]=recData[3]/10+'0';
- s[7]=recData[3]%10+'0';
- s[4]=recData[2]/10+'0';
- s[5]=recData[2]%10+'0';
- Add1=fnHexToBcd_u8(recData[1]);
- s[2]=Add1/10+'0';
- s[3]=Add1%10+'0';
- Add2=fnHexToBcd_u8(recData[0]);
- s[0]=Add2/10+'0';
- s[1]=Add2%10+'0';
- //s[0]=fnHexToBcd_u8(recData[0]/10)+'0';
- //s[1]=fnHexToBcd_u8(recData[0]%10)+'0';
- GrStringDraw(&sContext, s, -1, 210, 60, 1);
复制代码
3.显示的图片显示第一屏:
按键显示第三屏:
自动循环显示第5屏