关于LCD显示屏颜色的适配方法

 一、基础知识

        如果说给一个关键词“颜色”,大家能联想起什么呢?是色彩斑斓的彩虹,还是红彤彤的太阳,亦或者是黄灿灿的麦地?小时候我们都学过光具有波粒二象性,从波的角度来看,光(电磁波)的不同频率对应着不同的颜色。其实颜色并不是光的属性,有关波的频率、振幅、相位、偏振方向等参数才是。人眼中的很多视锥细胞能够感受到某些特定频率的光,为了不混淆这些不同频率的光,我们才将其区分成不同颜色。

        光的频率是连续的,可见光的频率介于380nm ~ 750nm之间,所以从理论上来讲光的颜色是无穷无尽的。从硬件实现上显示所有的可见光是不可能的,那么显示器是遵循什么策略来实现色彩显示的呢?小时候学过三原色R、G、B可以叠加出各种不同的颜色,这种叠加原理同样应用在显示器上。如果使用放大镜仔细观察手机、电脑等屏幕,或许就能看出屏幕是由红色、绿色、蓝色三种不同的发光二极管(LED)组成的。或许这些LED排布方式不同,但都有这3种颜色的LED。

        这下我们清楚显示屏颜色由RGB组成的了,那么一个像素点由几个R、G、B构成呢?这里涉及到一个叫色彩深度的专业名词,在计算机图形学领域中色彩深度表示在位图或者视频帧缓冲区中储存1个像素点的颜色所用的位数,它也称为位/像素(bpp,bits per pixel)。我淘宝购买的1.8英寸LCD显示屏有128*160=20480个像素点,每一个像素点由5个R灯、6个G灯、5个B灯构成,显示的色彩深度只有5+6+5=16位,所以只能显示:R:2^{5}+G:2^{6}+B:2^{5}=2^{16}=65536种颜色。 

        现在大部分显示设备都是真彩色,色彩深度至少有24位,其中R、G、B各占8位,这样能够显示出全部色彩。当然有的屏幕色彩深度达到了32位,这是因为它增加8位可用来控制透明度的alpha通道。色彩深度越高,可用的颜色就越多。

二、颜色适配

        一般需要使用颜色适配的时候我们已经知道这个颜色是什么样子的,或者已经调试出这种颜色了。比如在做毕业设计的时候,想通过显示屏全屏显示出学校的校旗和校训,如果简单地把整个图片转换成由RGB565组成的图像文件当然没问题,但是这样太占内存空间了。RGB565占2个字节的内存空间,128*160*2=40KByte。如果简单地存储2张图片的话需要耗费80KB的存储空间,这对只有64K Flash的STM32F103C8T6来说好似是行不通的。

        但方法总比困难多,如果将两张图片缩小显为原来的1/4,每张图片直接由40Kb缩减为10Kb,这样我还是可以接受的。此外,在LCD显示屏后面预留了SPI接口的SD卡读写接口,不过设计时没有使用,而是采用IIC型的AT24C256(EEPROM)作为图片的存储介质。图片缩小后不能占满全屏,便想到填充图片边缘,这就是写这篇颜色适配的原因。效果如下图所示:

        对图片边沿颜色进行采样需要用到颜色识别工具,Photoshop以及一些在线网站都能完成这项工作,给大家找了一个网页版tool在线工具,本文以Photoshop的拾色器举例,步骤如下:

  1. 打开图片,使用拾色器拾取图片边沿颜色为:0x0067aa,图片识别的色彩深度为24-bit的RGB888,可以推出R=0、G=103、B=170
  2. 将RGB换算成二进制,即R=0B00000000,G=0B01100111,B=0B10101010
  3. 由于使用的RGB565 LCD不是真彩屏,只能舍掉颜色低位的精度(不能还原真实色彩,不过没办法),我们取RGB的高5、6、5位,低位补0
  4. 得出RGB=0B0000001100110101=0x0335  //学校校旗的蓝底

        如果自己一开始并不知道颜色,想要在特定图片的特定位置替换成自己调制的喜欢的颜色时,给大家推荐一个叫ColorSpace的在线调色板。 

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要使用STM32F103RCT6驱动1.44寸TFT LCD显示屏,首先需要了解TFT LCD显示屏的基本工作原理和通信接口。 TFT LCD显示屏由控制器和显示面板组成,控制器负责将图像数据发送到显示面板,并控制显示面板的驱动方式。STM32F103RCT6是一款32位ARM Cortex-M3核心的微控制器,具有丰富的外设和较高的处理能力,适合用于驱动TFT LCD显示屏。 接下来需要确定TFT LCD显示屏的通信接口是什么,常见的通信接口有SPI、I2C和8080并行接口等。对于1.44寸TFT LCD显示屏,通常采用SPI接口进行通信。 在进行硬件连接之前,需要查看TFT LCD显示屏的规格书和STM32F103RC6的数据手册来了解各个引脚的功能和连接方式。通常,SPI接口需要如下连接:使用STM32F103RCT6的SPI主机模式,分别连接STM32F103RCT6的SPI主机的SCK、MISO、MOSI管脚(对应SPI1或SPI2)与TFT LCD显示屏的SCK、SDO、SDI管脚,还需要连接片选管脚,以及连接显示屏的复位管脚和片选管脚以及电源供应和地。 在软件方面,需要先配置STM32F103RCT6的SPI外设,并设置通信速率、数据位长度等参数。然后,编写驱动程序,通过SPI与TFT LCD显示屏进行数据通信,将显示数据发送到TFT LCD显示屏,以实现图像显示的功能。 总的来说,驱动1.44寸TFT LCD显示屏需要进行硬件设置和软件编程。通过了解TFT LCD显示屏的通信接口和STM32F103RCT6的外设特性,并编写相应的驱动程序,就可以实现TFT LCD显示屏的驱动及图像显示功能。 ### 回答2: 要驱动1.44寸TFTLCD显示屏,首先要使用STM32F103RCT6开发板与显示屏进行连接。我们可以通过GPIO口实现数据线与显示屏相连,而控制线则通过专门的引脚连接。 接下来需要编写相关的驱动代码来控制显示屏。我们可以使用HAL库提供的函数,来设置GPIO口的输出模式,以及数据传输相关的操作。利用SPI或者I2C通信协议,我们可以通过发送命令和数据来控制显示屏的显示内容。 在驱动代码,我们需要先初始化SPI或者I2C通信,并配置相应的参数,比如时钟频率、传输模式等。 接着,我们需要编写命令和数据的发送函数,通过SPI或I2C发送相关指令给显示屏。比如,我们可以通过发送命令来设置显示区域、背光亮度等参数。 最后,我们可以编写显示函数来实现在显示屏上显示图像或者文字。通过发送数据来更新显示内容,并且可以设置不同的显示模式,如图形显示、字符显示等。 需要注意的是,针对不同的显示屏型号,具体的驱动代码可能会有所不同。因此,在编写驱动代码时,需要结合显示屏的数据手册来编写相应的控制指令和函数。 以上是关于如何驱动1.44寸TFTLCD显示屏的大致步骤。在实际应用,还需要对具体的硬件结构和功能要求进行详细调试和开发。 ### 回答3: STM32F103RCT6是一款ARM Cortex-M3内核的微控制器,可以用于控制各种外设和驱动显示屏。在驱动1.44寸TFT LCD显示屏时,我们需要按照以下步骤进行设置和编程: 1. 连接硬件:首先,将STM32F103RCT6与1.44寸TFT LCD显示屏连接起来。根据显示屏和微控制器的规格书或引脚配置表,将引脚正确连接。 2. 配置GPIO引脚:在STM32F103RCT6的寄存器,通过设置GPIO引脚的模式和速度,将其配置为输出模式。将对应的引脚配置为控制显示屏的D/C引脚(用于选择数据/指令)、CS引脚(用于片选)、以及时钟引脚和数据引脚等。 3. 编写驱动程序:使用C语言或其他适合的编程语言,编写代码来控制和驱动1.44寸TFT LCD显示屏。根据显示屏的数据手册和命令集,实现显示屏的初始化、清屏、写入像素数据等功能。 4. 设置显示屏参数:根据需要,设置显示屏的相关参数,例如屏幕分辨率、颜色模式、显示方向等。这些参数需要根据具体的显示屏型号来设置。 5. 显示数据:通过驱动程序发送像素数据,将需要显示的图像或文本等内容写入显示屏。 6. 刷新显示:根据需要,定时刷新显示屏内容,以保持实时更新的效果。 通过以上步骤,我们可以实现STM32F103RCT6对1.44寸TFT LCD显示屏的驱动。需要根据具体的硬件和显示屏型号进行适配和调试,确保驱动程序的正确性和稳定性。同时,根据项目的需求和复杂度,可能需要更详细的代码和配置设置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值