前言
前段时间逛淘宝的时候看上了一块九块钱包邮的0.96'显示模块,奔着捡漏的心态就买了一片回来,到手后接到ESP32C3上跑了一下测试程序,顺利的显示东西出来了,一开始觉得一切都很正常,直到开始尝试显示彩色文字后才发现好像哪里不太对劲
这里给字体颜色设置的是青蓝色,显示出来的效果却是橙色;同理设置显示红色,出来的效果会是蓝色
库
这里使用的库如下
#include <Adafruit_GFX.h>
#include <Adafruit_ST7735.h>
问题原因
翻了一下库文件,发现可能是原开发者屏幕的颜色模式和我手中这块屏幕的颜色模式不一样,一个是RGB,一个是BGR;
解决方案
那么了解了原因之后就好解决了,只要在库文件中修改一下屏幕的颜色模式就可以了,在libraries\Adafruit_ST7735_and_ST7789_Library中找到Adafruit_ST7735.cpp并打开,修改如下内容:
修改前
_height = ST7735_TFTWIDTH_80;
_width = ST7735_TFTHEIGHT_160;
displayInit(Rcmd2green160x80);
_colstart = 24;
_rowstart = 0;
…
case 0:
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST7735_MADCTL_BGR;
}
…
case 1:
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR;
}
…
case 2:
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
madctl = ST77XX_MADCTL_RGB;
} else {
madctl = ST7735_MADCTL_BGR;
}
…
case 3:
if ((tabcolor == INITR_BLACKTAB) || (tabcolor == INITR_MINI160x80)) {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR;
}
修改后
_height = ST7735_TFTWIDTH_80;
_width = ST7735_TFTHEIGHT_160;
displayInit(Rcmd2green160x80);
_colstart = 26;
_rowstart = 1;
…
case 0:
if ((tabcolor == INITR_BLACKTAB)/* || (tabcolor == INITR_MINI160x80)*/) {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MY | ST7735_MADCTL_BGR;
}
…
case 1:
if ((tabcolor == INITR_BLACKTAB)/* || (tabcolor == INITR_MINI160x80)*/) {
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MY | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR;
}
…
case 2:
if ((tabcolor == INITR_BLACKTAB)/* || (tabcolor == INITR_MINI160x80)*/) {
madctl = ST77XX_MADCTL_RGB;
} else {
madctl = ST7735_MADCTL_BGR;
}
…
case 3:
if ((tabcolor == INITR_BLACKTAB)/* || (tabcolor == INITR_MINI160x80)*/) {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST77XX_MADCTL_RGB;
} else {
madctl = ST77XX_MADCTL_MX | ST77XX_MADCTL_MV | ST7735_MADCTL_BGR;
}
效果
修改好内容后保存并关闭,重启Arduino后重新编译并上传程序,会发现颜色问题已经被解决