一乐电子

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 6568|回复: 1

[其他综合] 关于ST7920控制器 12864液晶GDROM使用的几个问题

[复制链接]
发表于 2011-12-19 13:26 | 显示全部楼层 |阅读模式
用过12864液晶GDROM绘图的同学们都知道,绘图之前都必须关闭绘图显示,也就是write_12864(0x34,0); //关闭绘图显示,绘完图才能打开绘图显示功能write_12864(0x36,0); //打开绘图显示        write_12864(0x30,0);        //回到基本指令集 先看看 st9720 12864的datasheet~~~ UF)4)~(]6_}P]%3)0CLP~IB.jpg
问题:1、绘图之前都必须关闭绘图显示,绘完图才能打开绘图显示功能,如果放在while(1)中,每次循环绘图显示都会一关一开,图片会闪,怎样解决?
      2、绘图之前或者绘完图都要清除GDROM以防出现花屏,但发现一句write_12864(0x34,0); //关闭绘图显示,就可以解决花屏问题,清除GDROM还必要吗?
      3、用绘图方式给某一个汉字反白,不用write_12864(0x34,0); //关闭绘图显示  这句也正常显示,在循环中不闪
上两段代码:
void clean_GDRAM(void) //清除图形
{
    uchar i,j,k;
     
write_12864(0x34,0);        //打开扩展指令集,必须关闭绘图显示
i = 0x80;                 
          for(j = 0;j < 32;j++)     
          {
                write_12864(i++,0);     
                write_12864(0x80,0);
                for(k = 0;k < 16;k++)     
                {
       write_12864(0x00,1);            }  
}
i = 0x80;
  for(j = 0;j < 32;j++)
          {
       write_12864(i++,0);   
                write_12864(0x88,0);     
   for(k = 0;k < 16;k++)
   {
        write_12864(0x00,1);
    }  
}   
write_12864(0x30,0);        //回到基本指令集
}

void Draw_PM(uchar *ptr)    //显示图形
{
    uchar i,j,k;
     
write_12864(0x34,0);        //打开扩展指令集,必须关闭绘图显示
i = 0x80;            
for(j = 0;j < 32;j++)
{
                write_12864(i++,0);
                write_12864(0x80,0);
   for(k = 0;k < 16;k++)
   {
       write_12864(*ptr++,1);
   }
}
i = 0x80;
  for(j = 0;j < 32;j++)
{
      write_12864(i++,0);
               write_12864(0x88,0);     
   for(k = 0;k < 16;k++)
   {
        write_12864(*ptr++,1);
    }  
}   
           write_12864(0x36,0);        //打开绘图显示
write_12864(0x30,0);        //回到基本指令集
}

//**********************************************************
//函数名称:overturn_Chinese(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor)
//函数功能:使用绘图的方法让一个16*16的汉字反白
//形式参数:uunsigned char x,unsigned char y,unsigned char wide,unsigned char cor
// x取值范围:1~8
// y取值范围:1~4
//          wide取值范围:1~16   
//行参说明:坐标水平位置,坐标垂直位置,反白行数,要反白还是清除(1:反白,2:清除)
//液晶屏坐标说明:
// _______________128个象素______________________
// |(1,1)      (8,1)|
// |   |
// 6 |   |
// 4 |           |
// 个 |             |
// 象 |   |
// 素 |   |
// |(1,4)___________________________________(8,4)|
//
//返回参数:无
//使用说明:无
//**********************************************************

void overturn_Chinese(unsigned char x,unsigned char y,unsigned char wide,unsigned char cor)
{
unsigned char i,base_x,colour;

if(cor == 1)  
colour = 0xff;    //白
if(cor == 0)  
colour = 0x00;    //黑

// write_12864(0x34,0);    //关闭绘图模式    注意:不关闭绘图显示,也正常显示

switch(y)
{
case 1 : base_x = 0x80;
         break;
  
case 2 : base_x = 0x80;
         break;
  
case 3 : y=1;
         base_x = 0x88;
         break;

case 4 : y=2;
                    base_x = 0x88;
         break;
}

for(i = 0;i < wide;i ++)
{
write_12864(0x80-16+y*16+i,0);    //y=1或y=2时  切换0x80和0x90行
write_12864(base_x+x-1,0);    //0<x-1<8
write_12864(colour,1);     
write_12864(colour,1);
}
write_12864(0x36,0);
}


那位同学可以解答一下,十分感谢!
 楼主| 发表于 2011-12-19 14:26 | 显示全部楼层
解决了,原来完全按照使用手册去做也不是很明智的选择!!!!
解决方法:绘制图形前不要关闭绘图显示,直接打开绘图显示画图就是了
回复

使用道具 举报

本版积分规则

QQ|一淘宝店|手机版|商店|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2025-11-5 00:08 , Processed in 0.033354 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表