|
用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,换其它的地址也是这样,我想了很久也不明白为什么,麻烦指教一下,先在这里谢过! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|