高级会员 
 
主题
回帖0
积分416
阅读权限30
注册时间2010-12-17
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
用过12864液晶GDROM绘图的同学们都知道,绘图之前都必须关闭绘图显示,也就是write_12864(0x34,0); //关闭绘图显示,绘完图才能打开绘图显示功能write_12864(0x36,0); //打开绘图显示        write_12864(0x30,0);        //回到基本指令集 先看看 st9720 12864的datasheet~~~
 
 
问题: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);  
}  
 
 
那位同学可以解答一下,十分感谢! |   
 
 
 
 |