老生常谈一个令我不解的12864液晶显示汉字!!!

2020-01-23 14:45发布

以前都说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中,按下对应的按键显示是正常的,我想更不是硬件问题,要是硬件问题就不可能界面初始化成功了。万能的论坛,各位大牛求解啊!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。