mrf245 发表于 2009-8-11 17:42:22

急求RA8803液晶屏的显示RAM内容读取方法

正在研究用RA8803的320X240液晶(就是示波仪用那种),现在已经能显示自己需要的东西,但在显示RAM内容读取时出错了。我的读取流程如下:
uchar a=0;
_CS = 0;
RS = 1;
_RD = 0;
_nop_();_nop_();_nop_();
a=lcd_bus;
_RD = 1;
RS = 0;
_CS = 1;
return a;

不过读取出来的都是错误结果。当然读取之前都对行列做了定义。
为什么要读取呢?就是把现在即将写入的值和准备写入的位置上原来的值相或,这样实现特殊功能(大家不知能否猜到我的目的)。请各位朋友帮帮忙

bure 发表于 2009-8-11 21:29:16

这类Lcd屏在读显示数据时,要多加一个读操作,第二个读操作读出的才是正确数据。
即:
_RD = 0;
_nop_();_nop_();_nop_();
_RD = 1;
_RD = 0;
_nop_();_nop_();_nop_();
a=lcd_bus;
_RD = 1;
回去再试试!

mrf245 发表于 2009-8-13 11:45:29

楼上朋友你好!读取2次和读取一次结果是完全一样的。
很奇怪网上历程都没有关于屏幕RAM内容读取的函数例子。不知是不是不能读?但看到屏幕PDF资料里有RAM读取时序说明,不过写得很不清楚。

bure 发表于 2009-8-13 23:58:21

认真查看一下驱动IC的DATASHEET,然后用单步调试你的程序,检查LCD各个引脚上的信号是否正确。
对了!忘了提醒一句:初始化参数设置的不同,会导致读出数据的RGB排列有可能与写入的不同(RGB或BGR)

kunnsd 发表于 2009-8-14 00:11:11

你想做余辉显示?

ForNever 发表于 2009-8-14 08:50:39

适当延长RD信号为低电平的时长(>400ns),并且每次读取后要有一定延时(>375ns)。印象中RA88xx系列除了06其它型号的信号速度都不能太快。

mrf245 发表于 2009-8-14 12:01:50

回复4楼魏坤:
你好!看了你的第一版示波器程序,里面的波形显示是采用数组或操作进行8列行的合成。我想利用读取屏幕内容进行数据直接或方式来做波形显示,这样就不用占用较大数组了。其实采用这种方法原因是以前我搞12864的曲线显示也是用这个方法,现在反倒看你的程序有点不太明白了,而且用读取—或—写入方式还能实现其他显示功能。呵呵。
现在数据读取已经正确了,不用读2次,是端口设置问题。但发现个小问题:
在读取后一定要对寄存器00H进行重新设置,否则屏幕会反白显示。
另外如果连续对一个位置的屏幕RAM进行5次以上读取操作之后,屏幕就无法显示任何新内容了。这个问题还没办法解决。
下面是我的点绘画程序:
void drawpoint(uint x,uint y)//画一个点(带或操作)
{
uchar i=0,updata=0,xbyte=0,xbit=0;
xbyte=x/8;xbit=x%8;
updata=(0x80>>xbit);
SdCmd(0x60);SdCmd(xbyte);
SdCmd(0x70);SdCmd(y);
i=RdData();
SdCmd(0x00);SdCmd(0xc5); //读取完一次后一定要重新设置寄存器
SdCmd(0x60);SdCmd(xbyte);
SdCmd(0x70);SdCmd(y);
SdData(i|updata);
}
如果进行下面这种画横线操作,那么只能画5个连续点,之后就再也无法画剩余线条。
for(k=0;k<300;k++)
{
drawpoint(k,0);
drawpoint(k,200);
}
页: [1]
查看完整版本: 急求RA8803液晶屏的显示RAM内容读取方法