关于TFT-LCD液晶显示屏芯片ST7735S的一些事项
该TFT-LCD图形显示芯片最大支持132*162分辨率,26万色(262K-color,RGB666,18bits),所以片载显示数据存储空间132*162*18bits。
多种接口:
- 并行8080系列单片机接口(8位、9位、16位和18位)
- 并行6800系列单片机接口(8位、9位、16位和18位)
- 3线串行接口
- 4线串行接口
引脚定义:
- 接口设置引脚
引脚名 | I/O | 描述 |
---|---|---|
P68 | I | 8080/6800并行接口选择,即选择8080还是6800 |
IM2 | I | 并行接口/串行接口选择,即选择并行还是串行 |
IM1,IM0 | I | 并行接口类型选择,即通过IM1和IM0的组合,选择8位、16位、9位还是18位并行 |
SPI4W | I | 3线/4线SPI选择,即选择3线SPI还是4线SPI |
RESX | I | 复位芯片 |
CSX | I | 片选,低电平有效 |
D/CX(SCL) | I | 在并行接口中,用作数据/命令选择引脚,即在发送数据前,告诉芯片后面发的内容是数据还是命令; 在串行接口中,用作时钟引脚SCL。 |
RDX | I | 用于8080并行接口的读使能 |
WRX(D/CX) | I | 在并行接口中,用于写使能 在4线串行接口中,用作数据/命令选择引脚。 |
D[17:0] | I/O | 在并行接口中,D[17:0]为数据总线 在串行接口中,D0为数据引脚,D[17:1]不使用。 |
TE | O | 撕裂效应输出引脚,用于同步单片机帧率 |
OSC | O | 内部时钟输出,用于监控内部时钟 |
通常现成的液晶屏模块,已经对接口引脚作了定义。如果购买的液晶屏模块是4线SPI接口,那么留给用户使用的是上述表中红色加粗的引脚。
- 模式选择引脚
引脚名 | I/O | 描述 |
---|---|---|
EXTC | I | 液晶面板功能命令使能,正常使用接高电平 |
GM1,GM0 | I | 液晶面板分辨率选择: GM=00,132*162 GM=01,132*132 GM=11,128*160 |
SRGB | I | 颜色过滤设置引脚: 低电平颜色过滤顺序R、G、B 高电平颜色过滤顺序B、G、R |
SMX | I | 源极驱动输出方向设置引脚: 低电平:顺序输出,即S1~S396 高电平:逆序输出:即S396~S1 水平方向(X方向),每行最多132个像素点,每个像素点都是由RGB三原色组成,每个色都有一个场效应管,一共需要132*3=396个源极驱动线路。详见下图 |
SMY | I | 门极驱动输出方向设置引脚: 低电平:顺序输出,即G1->G162 高电平:逆序输出,即G162->G1 竖直方向(Y方向)最多162个像素点,需要最多162条门极驱动线路。详见下图 |
LCM | I | 液晶类型选择引脚: 低电平:常态下白屏(Normally White),即对液晶面板不施加电压时,屏幕是透光的,由于LED背光的存在,白屏 高电平:常态下黑屏(Normally Black),即对液晶面板不施加电压时,屏幕是不透光的,黑屏 |
GS | I | 伽马曲线选择引脚: 低电平:GC0=1.0,GC1=2.5,GC2=2.2,GC3=1.8 高电平:GC0=2.2,GC1=1.8,GC2=2.5,GC3=1.0 |
液晶显示芯片中源极驱动和门极驱动的含义:
屏幕面板上每个像素点都有RGB三原色,图中每一组RGB都代表一个像素点。每个颜色都有一个FET场效应管给等效电容充电。场效应管的源极连接着芯片的源极驱动引脚,给不给电容充电则靠芯片的门极驱动引脚来控制。如果一个屏幕的分辨率为1*3,那么就需要1*3=3个源极驱动引脚和3*1=3个门极驱动引脚。
如果不是液晶屏生产厂商,该款芯片的模式选择引脚功能用户并不需要了解。通常现成的液晶屏模块,厂商已经根据液晶面板的参数做了模式选择。
该芯片数据手册内容较多,阅读时,可根据液晶屏模块分辨率,通讯接口等选择性查看。
串行接口
ST7735S芯片的串行接口支持3线和4线两种,区别在于3线串行接口比4线串行接口少了“数据/命令”选择(D/CX)引脚。因此在通信上,3线串行接口主机(如:MCU)向从机(本芯片)发送的每个字节前需增加一个“数据/命令”控制位。
读操作
3线和4线串行接口读数据协议分三种情况:读1个字节数据、读3个字节数据和读4个字节数据。其中读取1个字节数据的操作,主机(如:MCU)在发送读操作命令后,从机(本芯片)直接返回1个字节的数据;而读3个字节或4个字节的数据时,主机发送读操作命令后,需要额外提供一个时钟(即Dummy Clock Cycle),随后从机才会返回3个字节或4个字节的数据。以4线串行接口读操作为例:
- 下图是读1个字节数据的操作:
- 下图是读3个字节的操作:
- 下图是读4个字节的操作:
写操作
数据手册对写操作介绍了两种突发情况:
-
一种是写操作过程中,一个字节没写完,复位引脚对设备复位导致的写终止及恢复
-
一种是写操作过程中,一个字节没写完,片选引脚对设备取消选中导致的写终止。
且对突发情况发生的时间点分了三个阶段:
1、命令阶段:主机正在向从机写命令时,不管是带参数的命令还是不带参数的命令;
2、参数阶段:主机向从机发送完带参数的命令之后,正在发送参数;
3、帧数据阶段:主机正在向从机发送显示帧数据。
第一种:一个字节没写完,复位导致的写终止及恢复
上述三个阶段中不管哪个阶段发生了复位,导致写操作终止,复位结束后,都要重新进行完整的写操作,从发送命令开始。
第二种:一个字节没写完,取消片选导致的写终止
上述三个阶段中不管哪个阶段发生了片选取消,导致写操作终止,片选恢复后,只需从终止的字节处开始继续发送数据。
特别的,在参数阶段发生终止之后,没有继续发送参数,而是准备写新的命令会怎么样?
如果参数命令的某个参数没写完终止了,前面写完的参数会被保存,没写完的参数会被取消,然后开始写新的命令。等新的命令写完,须把发生终止的参数命令重新写一下,否则一部分参数是新的,一部分参数是旧的。
如果参数命令的某个参数刚写完终止了,写完的参数会被保存,还没写到的参数不会再写了,随后开始写新的命令。等新的命令写完,须把发生终止的参数命令重新写一下,否则一部分参数是新的,一部分参数是旧的。
写操作暂停
写操作的暂停是通过片选引脚实现的,需要暂停时只要取消片选即可。正常的写操作应该是顺序执行的,即执行一个完整的写操作后再执行另一个完整的写操作。该芯片支持在整个顺序执行的过程中可以插入“暂停”,只要写完整个字节,就可以通过取消片选暂停对芯片的操作,继续操作芯片时,打开片选即可。此时,接着刚才的字节完后继续写操作,直至写完成。可以在下述4种情况插入暂停:
- 命令——暂停——命令/参数命令
- 参数命令——暂停——参数
- 参数——暂停——命令/参数命令
- 参数——暂停——参数
帧数据传输模式
显示帧数据就是像素点的RBG值,RGB有12位、16位和18位的,即RGB444、RGB565和RGB666。有两种方法来发送这些数据:
- 方法1:“整盘”写入,每次显示帧数据都填满帧存储内存。
- 方法2:分帧写入,每次只发送一帧数据。
注,每帧数据需要是完整的RGB三原色。
数据的色彩编码
以4线串行接口为例,支持RGB444(4K色)、RGB565(65K色)和RGB666(262K色),由于RGB444只需要12bits来存储,1个字节空间不够,2个字节空间太多;而RGB666需要18bits来存储,2个字节空间太小了,需要3个字节空间。只有RGB565是16bits,刚好使用2个字节的空间。为了节约单片机资源,直接使用RGB565来设置像素点色彩,色彩深度也够用。
显示方向
帧存储的顺序与液晶面板的像素点是一一对应关系,数据按照什么样的顺序向帧存储器中存储,就会按照什么样的顺序在液晶面板上显示。
默认地,将左上角视为原点,存储像素点RGB数据时,总是先由X轴正方向从像素点0存到像素点131。然后沿Y轴正方向前进一行,继续由X轴正方向从像素点0存到像素点131。
在液晶面板上显示时,与存储像素点RGB数据时顺序一致。将左上角视为原点,总是先由X轴正方向从像素点0显示到像素点131。然后沿Y轴正方向前进一行,继续由X轴正方向从像素点0显示到像素点131。
存储和显示像素点时,总是沿着X轴和Y轴的正方向前进,如何实现显示内容水平、竖直镜像翻转、上下旋转、逆时针/顺时针旋转、竖屏变横屏、横屏变竖屏?可以重新定义X轴和Y轴的正方向,以及重新定义谁是X轴,谁是Y轴来实现,即对调X轴和Y轴。通过MADCTL参数命令来改变显示方向。设置MX、MY、MV可以实现8种不同的存储和显示方向。
当设置了X轴、Y轴改变正方向,又设置了X轴和Y轴对调的情况时,先执行X轴、Y轴改变正方向,正方向变化之后再对调X轴和Y轴。
显示块坐标设定
在屏幕上显示之前需要先设定好显示的区域:显示块(Block)。显示块是由起始像素点坐标和末尾像素点坐标定义的一个矩形。在设定坐标时,根据屏幕分辨率不同,分两种情况:
-
第一种情况:屏幕分辨率刚好与芯片支持的最大分辨率一致,即132*162,那么想要定义一个全屏的显示块,可以这样:假设X轴正方向像素点个数132,Y轴正方向像素点个数162,那么该显示块的起始坐标为(0,0),终点坐标为(131,161)。
-
第二种情况:屏幕分辨率小于芯片支持的最大分辨率,那么在定义显示块的坐标时,需要考虑坐标的偏移量。该偏移量会因为屏幕的厂商不同,而可能存在不同值。具体要看屏幕厂商将屏幕第一个像素点的源极驱动和门极驱动连接在了芯片的哪个源极驱动引脚和门极驱动引脚上。
对于分辨率132*162的屏幕,厂商对第一个像素点的源极驱动和门极驱动只有一种接法,就是从S1和G1开始:
对于分辨率低于132*162的屏幕,假设有一个分辨率为130*160的屏幕,此时厂商对第一个像素点的源极驱动和门极驱动从哪个引脚开始接,可选范围可以有多种,举几个例子:
对于第二种情况,分辨率W*H的屏幕,设定显示块时,起始坐标(0+Xoffset,0+Yoffset),终点坐标(W+Xoffset,H+Yoffset)。
特别地,当对调X轴和Y轴后,设定显示块时,起始坐标为(0+Xoffset,0+Yoffset),终点坐标为(H+Xoffset,W+Yoffset)。对调之后,X轴的偏移量是原来的Y轴偏移量,Y轴的偏移量是原来的X轴偏移量。Xoffset=Yoffset,Yoffset=Xoffset。