以前都说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]!=' ')这里注释掉用上面的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]!=' ')
{
write_dat(table3[i]);
i++;
}
i=0;
lcd_pos(3,0);
while(table4[i]!=' ')
{
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]!=' ')
{
write_dat(table1[i]);
i++;
}
i=0;
lcd_pos(2,0);//设置显示在第三行
while(table2[i]!=' ')
{
write_dat(table2[i]);
i++;
}
}
else //都没有按键按下
mmi();//保持在界面初始化,这个函数在液晶上第一行显示“欢迎使用”第二行显示“环境监测系统”第三行显示“很高兴能为您服务”
}
这个服务程序是通过按下按键来切换相应的界面,液晶初始化是没有问题的,界面初始化也没问题,在条件value==2下的液晶显示汉字部分也没有问题,问题就出现在条件在value==0和条件value==1要显示的部分,只要我写入要显示的汉字超过三个就显示就会出错(出现乱码或者数据丢失),我用printf函数在串口上追踪查看,发现循环数据的次数是够的,可在液晶上显示的就是乱码或其他不是我写入的数据。我实在不解啊!!找了好久的原因都没找出来。这时也许有人会说可能你value==0和条件value==1成立的条件有问题,好,我把value==2条件下的汉字显示放到value==0和条件value==1中,按下对应的按键显示是正常的,我想更不是硬件问题,要是硬件问题就不可能界面初始化成功了。万能的论坛,各位大牛求解啊!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
看下反汇编代码,看汉字的编码对不对,如果不对那么就是keil的补丁没弄好,如果正确那么说明keil这边没有问题,再调试液晶。
我觉得还需注意一个地方,程序的中的汉字字符串很占系统的内存,编译代码后查看程序各个段的大小
一周热门 更多>