一往无前 发表于 2014-9-4 20:32:50

AVRmega64 19264液晶调试乱码问题

最近在做一个液晶显示的项目,液晶是19264
单片机mega64
软件:IVA forAVR
今天编译除了个问题,研究了一天没有解决
问题现象:我现在控制在液晶上显示四行,当程序添加到第四行显示代码就开始出现乱码了,不加第四行的程序,没有问题显示良好
附上显示部分代码,请大神们指教,看看究竟是哪里的问题


void heaterpage1()
{
    uchar PRE_Uint = 0;
    uchar PRE_decate = 0;
    uchar PRT_Uint = 0;
    uchar PRT_decate = 0;
    uchar AFT_Uint = 0;
    uchar AFT_decate = 0;
   // uchar __flash*a,*b,*c, *d,*e,*f;
   // PRE_Uint      = heaterUint_buf;
   // PRE_decate    = heaterdecate_buf;
   //
   // PRT_Uint      = heaterUint_buf;
   // PRT_decate    = heaterdecate_buf;
   
   // AFT_Uint      = heaterUint_buf;
//AFT_decate    = heaterdecate_buf;
    //前中后加热“PFE   PRT    AFT”
///*
   
   
    switch(HeaterControl)
    {
            case 0x00 :
         {
                DisplayEnglishCharacter1( 0,4,Off_code,24);
                DisplayEnglishCharacter1(24,4,zero_buf,40);
                DisplayEnglishCharacter1(64,4,Off_code,24);
                DisplayEnglishCharacter1(88,4,zero_buf,40);
                DisplayEnglishCharacter1(128,4,Off_code,24);
                DisplayEnglishCharacter1(152,4,zero_buf,40);
                break;
         }
         case 0x01:
         {
                DisplayEnglishCharacter( 0,4,CapitalLetter_O);
                DisplayEnglishCharacter( 8,4,CapitalLetter_N);
                DisplayEnglishCharacter(16,4,Space);
                DisplayEnglishCharacter1(64,4,Off_code,24);
                DisplayEnglishCharacter1(128,4,Off_code,24);
                break;
         }
         case 0x03:
         {
                DisplayEnglishCharacter( 0,4,CapitalLetter_O);
                DisplayEnglishCharacter( 8,4,CapitalLetter_N);
                DisplayEnglishCharacter(16,4,Space);
                DisplayEnglishCharacter(64,4,CapitalLetter_O);
                DisplayEnglishCharacter(72,4,CapitalLetter_N);
                DisplayEnglishCharacter(80,4,Space);
               // DisplayEnglishCharacter1(64,4,Off_code,24);
                DisplayEnglishCharacter1(128,4,Off_code,24);
                break;
         }
         case 0x07 :
         {
                DisplayEnglishCharacter( 0,4,CapitalLetter_O);
                DisplayEnglishCharacter( 8,4,CapitalLetter_N);
                DisplayEnglishCharacter(16,4,Space);
                DisplayEnglishCharacter(64,4,CapitalLetter_O);
                DisplayEnglishCharacter(72,4,CapitalLetter_N);
                DisplayEnglishCharacter(80,4,Space);
                DisplayEnglishCharacter(128,4,CapitalLetter_O);
                DisplayEnglishCharacter(136,4,CapitalLetter_N);
                DisplayEnglishCharacter(144,4,Space);
                break;
         }
    }
    //"25℃25℃25℃ "
   
    DisplayEnglishCharacter( 0,2,displayshuzi_2);
    DisplayEnglishCharacter( 8,2,displayshuzi_5);
    DisplayChineseCharacter(16,2,degreecentigrade_code);
    //
    DisplayEnglishCharacter( 64,2,displayshuzi_2);
    DisplayEnglishCharacter( 72,2,displayshuzi_5);
    DisplayChineseCharacter( 80,2,degreecentigrade_code);
    //
    DisplayEnglishCharacter( 128,2,displayshuzi_2);
    DisplayEnglishCharacter( 136,2,displayshuzi_5);
    DisplayChineseCharacter( 144,2,degreecentigrade_code);
   // */
   
   
    //"PRE    PRT   AFT"
    DisplayEnglishCharacter1(0,0,Pre_code,24);
    DisplayEnglishCharacter1(24,0,zero_buf,64);
   
    DisplayEnglishCharacter1( 64,0,Prt_code,24);
    DisplayEnglishCharacter1( 88,0,zero_buf,128);
   
    DisplayEnglishCharacter1(128,0,Aft_code,24);
    DisplayEnglishCharacter1(152,0,zero_buf,40);
    __delay_cycles(4000);
   // a = shuzi_code1;
    //b =
    //"25℃25℃25℃ "displayshuzi_9 shuzi_code1
   //DisplayEnglishCharacter( 0,6,a);
   __delay_cycles(4000);
/*DisplayEnglishCharacter( 8,6, shuzi_code1);
    DisplayChineseCharacter(16,6,degreecentigrade_code);
    //
    DisplayEnglishCharacter( 64,6,shuzi_code1);
    DisplayEnglishCharacter( 72,6,shuzi_code1);
    DisplayChineseCharacter( 80,6,degreecentigrade_code);
    //
    DisplayEnglishCharacter( 128,6,shuzi_code1);
    DisplayEnglishCharacter( 136,6,shuzi_code1);
    DisplayChineseCharacter( 144,6,degreecentigrade_code);

    //"前开关中开关后开关"
      */
}
现在能正常显示,当把屏蔽的程序用上,就开始出现了乱码。横条,现在没在单位无法附图

一往无前 发表于 2014-9-5 07:22:25

今天仔细分析发现:
//显示单个英文字符
void DisplayEnglishCharacter(unsigned int row,
                           unsigned int page,
                            unsigned char__flash*CharacterEnglish );
//显示多英文字符
void DisplayEnglishCharacter1(unsigned int row,
                           unsigned int page,
                           unsigned char __flash*CharacterEnglish,
                           unsigned int LengthCharacterEnglish);//显示英文字符函数声明
我编写的写英文字符的函数,都是传递的英文字模数字的地址,但是这个
unsigned char __flash* shuzi_code1[]=
{
    displayshuzi_0,
    displayshuzi_1,
    displayshuzi_2,
    displayshuzi_3,
    displayshuzi_4,
    displayshuzi_5,
    displayshuzi_6,
    displayshuzi_7,
    displayshuzi_8,
    displayshuzi_9,
};
里面放的是0~9数字字模的数组名称,也就是首地址,现在屏蔽之后的程序能正常显示0~5page,屏蔽部分程序是写6,7page的,加上之后屏幕就乱码,横线,所以我怀疑是指针变量的问题,可是看不出来问题在哪!!,求大神指引我

hbzxx 发表于 2014-12-16 16:25:10

发一个运行良好的ATMEGA8驱动YXD-19264AG的程序,仅供参考。

一往无前 发表于 2015-1-6 09:32:01

hbzxx 发表于 2014-12-16 16:25
发一个运行良好的ATMEGA8驱动YXD-19264AG的程序,仅供参考。

谢谢{:lol:}
页: [1]
查看完整版本: AVRmega64 19264液晶调试乱码问题