最近用到了一块0.96寸彩色IPS屏幕,分辨率是160×80.
某宝上一共有两个品牌的这个显示屏。刚开始用的某彩品牌的,使用的Adafruit_ST7735库函数驱动,效果很好。
最近又买了一块某方的相同规格的屏幕,插接的。结果焊接好连接器,安装上通电,发现颜色不对。又修改了初始化参数,还是不对,经过测试发现蓝色和红色显示相反。
就是我设置红色,显示为蓝色,我设置为蓝色,结果是红色。
查询相关资料才知道该芯片的颜色模式是BGR,而不是通用的RGB,即R和B的存储位置是颠倒的。
于是查询了解决方法,网上有的方法是修改相关函数,将设置RGB和BRG的函数里的参数都颠倒一下。我看这太麻烦了。
为何不直接修改RGB和BGR的宏呢?
于是阅读驱动库头文件找到了相关设置位置。如下图所示
在头文件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色彩的颜色。
|
经过后期测试,只需要修改Adafruit_ST77xx.h中 的即可。