[学习资料]

ST7735显示颜色错误的问题解决方法

[复制链接]
22999|11
手机看帖
扫描二维码
随时随地手机跟帖
gaoyang9992006|  楼主 | 2024-5-12 22:55 | 显示全部楼层 |阅读模式
最近用到了一块0.96寸彩色IPS屏幕,分辨率是160×80.
某宝上一共有两个品牌的这个显示屏。刚开始用的某彩品牌的,使用的Adafruit_ST7735库函数驱动,效果很好。
最近又买了一块某方的相同规格的屏幕,插接的。结果焊接好连接器,安装上通电,发现颜色不对。又修改了初始化参数,还是不对,经过测试发现蓝色和红色显示相反。
就是我设置红色,显示为蓝色,我设置为蓝色,结果是红色。
查询相关资料才知道该芯片的颜色模式是BGR,而不是通用的RGB,即R和B的存储位置是颠倒的。
于是查询了解决方法,网上有的方法是修改相关函数,将设置RGB和BRG的函数里的参数都颠倒一下。我看这太麻烦了。
为何不直接修改RGB和BGR的宏呢?
于是阅读驱动库头文件找到了相关设置位置。如下图所示
638556640d75fc85c6.png

866156640d770816a7.png

在头文件Adafruit_ST7735.h中找到
#define ST7735_MADCTL_BGR 0x08
注释掉,并增加
#define ST7735_MADCTL_BGR 0x00
在头文件Adafruit_ST77xx.h中找到

#define ST77XX_MADCTL_RGB 0x00
注释掉,并增加
#define ST77XX_MADCTL_RGB 0x08
保存两个文件,重新编译。
初始化调用函数
tft.initR(INITR_MINI160x80);
即可。运行程序,显示正常了。
目的就是找到上述两个定义RGB和BRG的宏,交换两个宏对应的数字,即可实现RGB和BRG的反向映射。
让BGR色彩空间的显示芯片使用上RGB色彩的颜色。

使用特权

评论回复
评论
gaoyang9992006 2024-7-18 20:03 回复TA
经过后期测试,只需要修改Adafruit_ST77xx.h中 的即可。 
gaoyang9992006|  楼主 | 2024-5-12 22:59 | 显示全部楼层
最后绿色是了绿色,蓝色是蓝色了。
469246640d9435ebd4.png

使用特权

评论回复
gaoyang9992006|  楼主 | 2024-5-12 23:00 | 显示全部楼层
在没修改的时候,绿色是绿色,蓝色是红色,红色是蓝色。。。

使用特权

评论回复
trucyw| | 2024-5-17 08:24 | 显示全部楼层
是的,就是RB替换了呢

使用特权

评论回复
sujingliang| | 2024-5-20 08:41 | 显示全部楼层
28666664a9bdb22b97.png

使用特权

评论回复
gaoyang9992006|  楼主 | 2024-5-20 09:11 | 显示全部楼层

是的,感谢分享。我那个方法是使用库函数的修改方式。

使用特权

评论回复
gaoyang9992006|  楼主 | 2024-5-20 09:40 | 显示全部楼层

另外你笔下误了,不是0x80,是0x08
#define ST77XX_MADCTL_RGB 0x08

使用特权

评论回复
天灵灵地灵灵| | 2024-5-21 23:18 | 显示全部楼层
原来如此,那选型时候选择RGB的就行了。

使用特权

评论回复
21mengnan| | 2024-7-19 15:31 | 显示全部楼层
有没有C语言能用的库,就是这个显示器的。

使用特权

评论回复
9dome猫| | 2024-9-28 12:42 | 显示全部楼层
OCI芯片的推出预示着光学I/O技术与现有计算技术的融合。

使用特权

评论回复
小灵通2018| | 2024-9-29 19:32 | 显示全部楼层
原来是由两种颜色模式啊。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1971

主题

15978

帖子

210

粉丝