大家好,又见面了,我是你们的朋友全栈君。
My first blog on CSDN
本文简单写一下本次调屏经过遇到的问题和解决方法,主要是怕以后遇到同样问题的时候又忘记了~
1、屏分辨率是240×320,接口是16bit paralle data bus for 8080 seriescpu,就是16位并口再加WR,RD,CS,RS接口,屏的复位可以采用RC上电复位电路。
2、cpu这边输出的信号是320×240的,这里没写错,输出的数据是横屏显示的,可屏幕看起来是竖屏的,不过不用担心,屏控制器这边是可设置方向的爱怎么显示就怎么显示这就是“cpu屏”的好处。
点这种类型的屏主要的工作就是初始化代码了,一般屏供应商都会提供一份参考的稍微修改一下就可以正常显示了。这次拿到的初始化代码据说是可以正常显示的,实际显示效果如何不得而知,需要怎样格式的数据不得而知,一般情况下是先使用参考的初始化点一下看看效果再做打算。
点出来的效果发现是竖着显示的,并且画面也不对。于是想到先把X,Y交换过来,看了下ST7789V的datasheet有个寄存器需要设置一下,看8.12 Address Control
章节内容需要设置一下36h寄存器的MV=1 MX=0 MY=1这几位
9.1.28 MADCTL (36h): Memory Data Access Control
lcd_send_cmd(0,0×36);
lcd_send_cmd(1,0xa0);
MV=1;//交换XY
MY=1;//Y镜像
最终出来的效果是画面横着出来了但还是显示不正确,整个显示画面分成了3个区域,这下想到应该是行、列地址范围没设对,默认行是Y=320列是X=240,现在行列已经反过来了X=320,Y=240所以需要设置一下行列的地址范围,查看datasheet得知有几个相关寄存器需要设置分别是
9.1.20 CASET (2Ah): Column Address Set
lcd_send_cmd(0,0x2a);
lcd_send_cmd(1,0×00); //列起始地址
lcd_send_cmd(1,0×00);
lcd_send_cmd(1,0×01); //列结束地址
lcd_send_cmd(1,0x3f); //0x13f=319
9.1.21 RASET (2Bh): Row Address Set
lcd_send_cmd(0,0x2b);
lcd_send_cmd(1,0×00); //行起始地址
lcd_send_cmd(1,0×00);
lcd_send_cmd(1,0×00); //行结束地址
lcd_send_cmd(1,0xef); //239
设置完以后就可以正常显示了~
20180111:最近又在另一个平台上调这个屏有了新的发现,所谓的行列起始结束地址应该是拿来存放数据到ram的时候用的。驱动IC会把接收到的数据按照行列来存储最终显示出来。
以这里设置为横屏(320×240)为例,cpu的FrameBuffer(FB)给出来的数据就应该以320×240组织的,这样给到屏这边的时候屏才能满屏显示。假如FB给出来的数据是240×320这种组织结构的,屏这边只会收到240×240的数据而且会把240×240的数据按照320×240的方式写到ram中,实际ram中只能收到320×180(240×240)个像素的数据,从而显示上表示出来就是一部分图片。因为fb的x只输出了240列240行。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128367.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...