高级会员
主题
回帖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);
}
那位同学可以解答一下,十分感谢! |
|