找回密码
 立即注册
查看: 3554|回复: 7

TFT彩屏显示颜色不正常的原因和解决方法

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-7-25 15:50:32 | 显示全部楼层 |阅读模式
本帖最后由 大明狐 于 2024-9-27 17:47 编辑









经常有使用TFT显示屏的朋友问,关于相同的颜色值,在一块屏幕上显示正常,而换到另一块屏幕上就不正常的问题。

常见的原因大概有三种:
1、屏幕内的颜色数据的顺序
2、发送颜色数据的顺序
3、屏幕的种类

1721883950165.jpg
=============================================
分析原因之前,先简单说一下TFT彩屏的颜色数据格式。

在图片取模工具里,给TFT取模的【输出格式】,通常选择的是【16位彩色-565】
STC取模选项.jpg
因为TFT彩屏的每个像素点,都是由红Red、绿Green、蓝Blue三种颜色亮点组成的,
这个格式里的565,分别代表了每种颜色的数据位数。

其中,
红色R是由五位数(00000~11111)表示;
绿色G是由六位数(000000~111111)表示;
蓝色B也是由五位数(00000~11111)表示。

这三个数值,按照R-G-B的顺序排列,就构成了表示颜色的16位数据。
RRRRRGGGGGGBBBBB

接下来就可以分析,一开始提到的颜色显示不正确的问题了。

==============================================

1、屏幕内的颜色数据的顺序

比如上图里的两块屏幕,左边是1.44吋的128×128的TFT,右边是1.8吋的128×160的TFT。

这两块屏幕使用的控制芯片,都是ST7735S,转接板上的结构也都相同。
相同的程序,显示的画面却是不一样的。


这种原因比较常见,因为屏幕规格不同,RGB三个颜色的顺序会有不同。

现在从左到右分别用

1111100000000000 (0xF800)
0000011111100000 (0x07E0)
0000000000011111 (0x001F)

三个纯色来显示三个图案

颜色顺序.jpg
↑↑↑↑↑↑↑↑↑↑

可以看到如果用1.44吋屏幕的程序显示,
则左边屏幕显示出了设定的颜色,
而右边的屏幕显示的顺序,却是R和B是相反的
也就是相同的颜色值,对屏幕来说,顺序是


1111100000000000 (0xF800)
0000011111100000 (0x07E0)
0000000000011111 (0x001F)

可以换成用1.8吋屏幕的程序,则两块屏幕的显示结果正好相反。



※解决方法:
(1)如果使用的是TFT驱动库,里面包含了常见的各种屏幕的驱动,通过选择合适的型号的驱动,来显示正确的颜色;
(2)如果是写代码的驱动,可以针对不同型号的屏幕,修改颜色值里三组数据的读取顺序;
(3)在常见的彩屏控制芯片,比如ST7735里,内置的5-6-5数据格式只有 R-G-BB-G-R 两种模式,通过控制指令可以在两个模式之间进行切换。
(4)在常用的图片取模工具Image2Lcd里,有一个功能是可以自由定义RGB三种颜色的顺序,然后再进行取模。
不论RGB三种颜色谁先谁后,都是按照最终的顺序进行5-6-5格式的对每个像素点的颜色进行提取。

QQ2024725-144151-HD.gif


=================================================================

2、发送颜色数据的顺序

因为常用的TFT彩屏的驱动程序,在向屏幕发送16位的颜色数据的时候,
通常都是分成两个8位数据,先发送高8位,再发送低8位
RRRRRGGG - GGGBBBBB
    (高8位)          (低8位)

  1. TFT_Send_Data8 ( COLOR >>8 );
  2. TFT_Send_Data8 ( COLOR );
复制代码

比如要显示一个偏红一些的黄色,颜色值是

11111111 00000000 (0xFF, 0x00)

发送数据的时候,就是先发送一个0xFF,再发送一个0x00。

而在写发送程序的时候,有时候会因为疏忽,搞反了高低位的先后顺序。
如果顺序弄反了,就变成了稍微有些亮的蓝色
00000000 11111111 (0x00, 0xFF)

※解决方法:
(1)将发送颜色数据的程序代码改回正确的顺序
(2)在STC的图片取模工具里,有一个【存储顺序】选项,默认是【高位在前】,
选择【低位在前】也可以解决数据顺序错位的问题(总感觉这样心里不太踏实)

STC取模选项2.jpg

=================================================================

3、屏幕的种类不同

TFT是常用的一种RGB彩屏,但是在市面上,还有另外一种屏幕IPS屏,控制芯片是ST7789,属于一种TFT的增强版。
因为色彩、分辨率等等好多种优势,用IPS屏幕的也非常多,而且似乎越来越多。
IPS和TFT的驱动方式基本是一样,最大区别是颜色数值的每一位都是相反的。
比如屏幕接收到一个颜色数据0xFFFF,TFT屏会显示出白色,而IPS屏则正好相反,会显示出黑色。
要让IPS屏显示白色,就需要给0xFFFF按位取反,变成0x0000才能正确显示。

比如在TFT上,分别用红绿黄蓝四种颜色,显示“红绿黄蓝”四个字,
相同的色值,用在IPS屏上,就变成了十分阴间的颜色
1721892920822.jpg

  1. COLOR = ~COLOR;
复制代码

在显示函数前面,添加一行给颜色值的变量按位取反的语句之后,显示的颜色就正常了

1721892920846.jpg

假如程序代码允许修改,考虑到通用性,这种是比较好的解决方法。

但是如果显示程序不方便修改,可以考虑另一种解决方法,
就是在取模工具里,选择【反色】,也可以得到“正确”的显示颜色值
STC取模选项3.jpg

====================================================




2 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:393
  • 最近打卡:2025-05-02 13:12:00

24

主题

305

回帖

2560

积分

荣誉版主

积分
2560
发表于 2024-7-25 16:03:54 | 显示全部楼层

所以为了更好的兼容多种类型的屏幕,

楼上提到的图片取模工具Image2Lcd里的调整RGB颜色顺序的功能

建议STC-ISP的图片取模工具的【输出格式】里也可以加上一个 颜色选择 的项目。

不过个人感觉,因为在这些LCD彩屏里,需要改变位置的只有红色R和蓝色B,而绿色G的位置都是不变的,
所以至少有个“565RGB”和“565BGR”的区分就够用了。




至于三个颜色都可以调整的功能
感觉应用场景更多的是在2812、6812之类24位彩屏上
常用的灯带和彩屏的驱动库、以及一些控制器、上位机里,也都带有调整RGB顺序的功能
QQ截图20240725160133.jpg
QQ截图20240725155925.jpg

能体会到发现一个不理解的现象然后找原因然后要么解决掉问题要么被问题解决掉的那种快乐是我的幸运
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2024-7-25 16:12:07 | 显示全部楼层
玩屏,您确实是专业的
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3191

回帖

4872

积分

论坛元老

积分
4872
发表于 2024-7-25 16:49:13 | 显示全部楼层
都是用单色屏,彩色屏竟然有这么多门道啊。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:362
  • 最近打卡:2025-05-02 00:24:28

0

主题

43

回帖

700

积分

高级会员

积分
700
发表于 2024-8-14 21:58:02 | 显示全部楼层
多谢分享,最近正好会用到彩色LCD
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:494
  • 最近打卡:2025-05-02 09:16:59

30

主题

347

回帖

3480

积分

荣誉版主

积分
3480
发表于 2024-8-15 14:47:54 | 显示全部楼层
讲得非常好! 原理、方法。很清晰。 点赞、学习。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2025-04-23 17:01:13

2

主题

5

回帖

38

积分

新手上路

积分
38
发表于 2024-11-2 20:13:45 | 显示全部楼层
分析得相当透彻,专业,专家!
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:199
  • 最近打卡:2025-05-02 00:28:39
已绑定手机

24

主题

345

回帖

1633

积分

金牌会员

积分
1633
发表于 2024-11-2 22:09:07 | 显示全部楼层
虽然彩屏也用几块了,还是能学到知识
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 20:44 , Processed in 0.490079 second(s), 104 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表