怎么使用89c51单片机读取12864B的GDRAM的某地址的数据?
我的12864是没有左右屏片选的,照着网上的驱动和数据手册上读数据指令时序的说明,写了一个读数据的驱动,如下:uintlcd_rdat(uintx,uinty)//要读取...
我的12864是没有左右屏片选的,照着网上的驱动和数据手册上读数据指令时序的说明,写了一个读数据的驱动,如下:
uint lcd_rdat(uint x,uint y) //要读取的地址的坐标 x 0-127 y 0-63
{ uint x_byte;
uint dat;
uint temh;teml, temp;
x_byte = x / 16;
if(y>31)
{
lcd_wcmd(0x80+y-32); //写Y地址
lcd_wcmd(0x88+x_byte); //写X地址
}
else
{ lcd_wcmd(0x80+y);
lcd_wcmd(0x80+x_byte);
}
while(lcd_busy());
_nop_();
P0 = 0xff; // 空读一次
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 0;
delayNOP();
LCD_EN = 1;
temp=P0;
delayNOP();
LCD_EN = 0;
//读高8位
P0 = 0xff;
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 0;
delayNOP();
LCD_EN = 1;
temh=P0;
delayNOP();
LCD_EN = 0;
//读低8位
P0 = 0xff;
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
teml=P0;
delayNOP();
LCD_EN = 0;*/
dat=(0x0f&temh<<8)|temh;//合成16位数
return(dat);
}
这样读出某地址的数据后再写入CGRAM应该可以在指定的坐标复制出一个图像,但是得到的结果根本不对,就一个点,不知为何,求大神指点。
问题解决了!
给不懂的说下:不分屏的12864读数据也需要和绘图一样的步骤:
(1)写 绘图显示关 指令 ,
(2)写 要读取的区域Y地址 指令
(3)写 要读取的区域X地址 指令
(4)空读--读取高8位--读取低8位
(5)写 绘图显示开 指令
我上面的程序就是因为没写 绘图显示开关 指令才不行,加上就好了。 展开
uint lcd_rdat(uint x,uint y) //要读取的地址的坐标 x 0-127 y 0-63
{ uint x_byte;
uint dat;
uint temh;teml, temp;
x_byte = x / 16;
if(y>31)
{
lcd_wcmd(0x80+y-32); //写Y地址
lcd_wcmd(0x88+x_byte); //写X地址
}
else
{ lcd_wcmd(0x80+y);
lcd_wcmd(0x80+x_byte);
}
while(lcd_busy());
_nop_();
P0 = 0xff; // 空读一次
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 0;
delayNOP();
LCD_EN = 1;
temp=P0;
delayNOP();
LCD_EN = 0;
//读高8位
P0 = 0xff;
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 0;
delayNOP();
LCD_EN = 1;
temh=P0;
delayNOP();
LCD_EN = 0;
//读低8位
P0 = 0xff;
LCD_RS = 1;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
teml=P0;
delayNOP();
LCD_EN = 0;*/
dat=(0x0f&temh<<8)|temh;//合成16位数
return(dat);
}
这样读出某地址的数据后再写入CGRAM应该可以在指定的坐标复制出一个图像,但是得到的结果根本不对,就一个点,不知为何,求大神指点。
问题解决了!
给不懂的说下:不分屏的12864读数据也需要和绘图一样的步骤:
(1)写 绘图显示关 指令 ,
(2)写 要读取的区域Y地址 指令
(3)写 要读取的区域X地址 指令
(4)空读--读取高8位--读取低8位
(5)写 绘图显示开 指令
我上面的程序就是因为没写 绘图显示开关 指令才不行,加上就好了。 展开
3个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询