前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ST7789V+初始化代码调

ST7789V+初始化代码调

作者头像
全栈程序员站长
发布2022-07-31 13:59:42
1K0
发布2022-07-31 13:59:42
举报

大家好,又见面了,我是你们的朋友全栈君。

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行。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/128367.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档