Arduin环境下ST7735显示颜色错误的问题

前言

        前段时间逛淘宝的时候看上了一块九块钱包邮的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后重新编译并上传程序,会发现颜色问题已经被解决

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值