piaopiao2009 发表于 2010-8-31 10:47:49

求助:ST7920控制器的12864液晶 清空GDRAM出错

用ATmega128调试12864液晶,程序如下
/*******************************************
函数名称:Clear_GDRAM
功    能:清除液晶GDRAM中的随机数据
参    数:无
返回值:无
********************************************/
void Clear_GDRAM(void)
{
        uchar i,j;
        uint x=0;
        while(LCD12864_readBF());          //读忙标志
        LCD12864_sendbyte(iCmd,LCDb_EXTCMD1);                //扩充指令集,并关闭绘图显示       
        //写入并显示上半屏幕
        for(i=0;i<32;i++)                                            //行地址计数
   {                               
         for(j=0;j<8;j++)                                      //列地址计数
         {                                              
                                  LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
                               Delayus(10);
                                  LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
                               Delayus(10);
               LCD12864_sendbyte(iDat,0x00); //输入高位字节数据
                               Delayus(10);               
                               LCD12864_sendbyte(iDat,0x00); //输入低位字节数据
                               Delayus(10);
         }
   }
       //写入并显示下半屏幕
       for(i=0;i<32;i++)            
   {                               
         for(j=8;j<16;j++)      
         {            
                                  LCD12864_sendbyte(iCmd,0x80|i);//输入行地址
                               Delayus(10);
                                  LCD12864_sendbyte(iCmd,0x80|j);//输入列地址
                               Delayus(10);
               LCD12864_sendbyte(iDat,0x00); //输入高位字节数据      
                               Delayus(10);
                               LCD12864_sendbyte(iDat,0x00); //输入低位字节数据
                               Delayus(10);
         }
   }
       Delayus(10);
       LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);                           //打开绘图显示
       LCD12864_sendbyte(iCmd,LCDb_BASCMD);                           //还原回基本指令集模式
}

void main(void)
{
    uchar tmph=0,tmpl=0;
    LCD12864_initial();   //初始化12864液晶,包括:初始化控制端口,清除DDRAM   
    Clear_GDRAM();         //将GDRAM全部用0覆盖
       
    LCD12864_sendbyte(iCmd,LCDb_EXTCMD1); //进入扩展指令集,关闭绘图显示
       
    LCD12864_sendbyte(iCmd,0x89);//写入垂直方向的地址
    LCD12864_sendbyte(iCmd,0x87);//写入水平方向的地址
    LCD12864_readbyte(iDat);       //先空读一次
    tmph=LCD12864_readbyte(iDat);//将高位值赋给tmph
    tmpl=LCD12864_readbyte(iDat);//将低位值赋给tmpl
   
    LCD12864_sendbyte(iCmd,LCDb_EXTCMD2);        //打开绘图显示
    LCD12864_sendbyte(iCmd,LCDb_BASCMD);//进入基本指令集
   
}
出现的问题:程序一开始就用0将GDRAM完全覆盖,但tmph,tmpl的返回值均不为0,换其它的地址也是这样,我想了很久也不明白为什么,麻烦指教一下,先在这里谢过!

piaopiao2009 发表于 2010-8-31 12:42:38

回复【楼主位】piaopiao2009
-----------------------------------------------------------------------

千万别沉啊 这个问题困扰我好久了 大家随便说说自己的看法也行啊

piaopiao2009 发表于 2010-8-31 17:34:30

回复【1楼】piaopiao2009
-----------------------------------------------------------------------

千万别沉 自己再顶一下!

piaopiao2009 发表于 2010-8-31 22:23:43

回复【2楼】piaopiao2009
-----------------------------------------------------------------------

希望大家多发表一下意见

insect2006 发表于 2010-9-1 16:28:53

我也有差不多的问题,唉。。。

piaopiao2009 发表于 2010-9-1 17:54:54

回复【4楼】insect2006
-----------------------------------------------------------------------

大家过来发表一下意见啊 太愁人了!

piaopiao2009 发表于 2010-9-1 20:41:01

回复【5楼】piaopiao2009
-----------------------------------------------------------------------

大家过来发表一下意见啊 太愁人了!

piaopiao2009 发表于 2010-9-2 18:17:00

回复【6楼】piaopiao2009
-----------------------------------------------------------------------

每天一顶!

neptuntiansea 发表于 2012-8-3 21:44:37

GDRAM老读不到

w71057178 发表于 2013-6-4 21:11:15

跟ST7920的GDRAM分布空间有关系,不是16*32个双字节, 而是 32*16个双字节。X列地址是32个,行地址只有16.
我手头上的是这样的。
也许LCD厂家设计有差异的。
页: [1]
查看完整版本: 求助:ST7920控制器的12864液晶 清空GDRAM出错