以前都说KEIL环境下对一些汉字的显示有BUG,需要打补丁。补丁早已打过我遇到的不是这个问题,为了好说明问题我还是上传液晶部分的代码,结合代码讲述吧。
void KeyProcess(byte value)
{
lcd_init();//初始化LCD
P0=0xff;//先将液晶数据口拉高
if(value==0)//不论长按键或短按键按下都执行
{
int i=0;
byte code table[] = {"正在采集数据"};
lcd_pos(1,0);//显示在第二行第一个字符开始
for(i;i<12;i++)
//while(table[i]!='\0')这里注释掉用上面的for循环确保循环次数
{
printf("i=%d",i);//串口查看循环次数
write_dat(table[i]);//写要显示的数据
//i++;
}
}
else if(value==1)
{
int i=0;
byte code table3[] = {"温度为:"};
byte code table4[] = {"湿度为:"};
lcd_pos(2,0);//设置显示在第三行
while(table3[i]!='\0')
{
write_dat(table3[i]);
i++;
}
i=0;
lcd_pos(3,0);
while(table4[i]!='\0')
{
write_dat(table4[i]);
i++;
}
}
else if(value==2)
{
int i=0;
byte code table1[] = {" 系统关闭 "};//前后有两个空格,主要是为了使汉字显示在液晶中间,美观
byte code table2[] = {" 欢迎再次使用 "};//前后一个空格
lcd_pos(1,0);//设置显示在第二行
while(table1[i]!='\0')
{
write_dat(table1[i]);
i++;
}
i=0;
lcd_pos(2,0);//设置显示在第三行
while(table2[i]!='\0')
{
write_dat(table2[i]);
i++;
}
}
else //都没有按键按下
mmi();//保持在界面初始化,这个函数在液晶上第一行显示“欢迎使用”第二行显示“环境监测系统”第三行显示“很高兴能为您服务”
}
这个服务程序是通过按下按键来切换相应的界面,液晶初始化是没有问题的,界面初始化也没问题,在条件value==2下的液晶显示汉字部分也没有问题,问题就出现在条件在value==0和条件value==1要显示的部分,只要我写入要显示的汉字超过三个就显示就会出错(出现乱码或者数据丢失),我用printf函数在串口上追踪查看,发现循环数据的次数是够的,可在液晶上显示的就是乱码或其他不是我写入的数据。我实在不解啊!!找了好久的原因都没找出来。这时也许有人会说可能你value==0和条件value==1成立的条件有问题,好,我把value==2条件下的汉字显示放到value==0和条件value==1中,按下对应的按键显示是正常的,我想更不是硬件问题,要是硬件问题就不可能界面初始化成功了。万能的论坛,各位大牛求解啊!!! |