以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。

参考博客

1、s5pv210 LCD编程原理 - biaohc - 博客园

2、LCD常用接口原理_5组信号线是几位-CSDN博客

一、LCD简介

1、LCD是什么?

LCD(Liquid Crystal Display)俗称液晶显示。

液晶是一种材料,这种材料具有一种特点,在电信号的驱动下液晶分子进行旋转,而旋转时会影响透光性,因此我们可以在整个液晶面板后面用白光照(称为背光),可以通过不同电信号让液晶分子进行选择性的透光,此时在液晶面板前面就可以看到各种各样的颜色(白光由各种不同颜色的光组成,被选择性透光之后可以产生各种不同颜色的光),这就是LCD显示。

有些显示器本身会发光,称为主动发光,比如LED显示器;有些显示器本身不会发光而只会透光,需要背光的协助才能看起来是发光的,称为被动发光,比如LCD。

液晶多应用于电视机、电脑显示屏、手机显示屏、工业显示屏等领域。

2、有哪些显示设备?

显示设备描述
CRT阴极摄像管显示器
等离子显示未成为主流
OLED未成为主流,但是很有市场潜力
LED主要用在户外大屏幕
LCD主流显示器

3、有哪些种类的LCD?

种类描述
TN出现最早,但响应性不够好,有拖尾现象
STN是TN的升级版,有效解决拖尾现象,显示更清晰
TFT最大特点就是超薄
…………

二、LCD的接口技术

1、LCD的硬件接口采用TTL电平

SoC的LCD控制器硬件接口是TTL电平的(+5V表示逻辑1,0V表示逻辑0),LCD的硬件接口也是TTL电平的,因此它们可以直接对接(一般使用软排线进行连接),比如手机、平板、开发板内部都是这样直接对接的。

TTL电平的缺陷就是传输距离短,如果LCD屏幕和主板控制器太远(比如大于1米),就不能直接TTL连接,而要进行转换。转换方式为:主机SoC(TTL) —>VGA —> LCD屏幕(TTL)。

其他各种接口(TTL、LVDS、EDP、MIPI)在传输速率、距离、适配性方面的介绍,见参考博文2。

2、S5PV210的RGB接口简介

LCD的RGB接口时序图如下所示(在用户手册P1207):

(1)VD[23:0]:24根并行的数据线(可见LCD是并行接口),用来传输图像信息。

(2)HSYNC:水平同步信号。 

(3)VSYNC:垂直同步信号,是时序信号,为了让LCD能够正常显示给的控制信号。

(4)VCLK:像素时钟,LCD工作时需要主板控制器给LCD模组一个时钟信号,就是VCLK。

(5)VDEN:数据有效标志,时序信号,和HSYNC、VSYNC结合使用。

(6)LEND:行结束标志,时序信号,是非必须的,比如X210接口就没有。

3、与背光灯有关的引脚 

 

三、LCD如何显示图像

1、像素

像素是组成图像的最基本元素(在显示中可以被控制的最小单位),整个图像就是由一个个的像素组成的。

像素可以被单独控制,控制其亮或不亮(单色屏),或者控制其亮度强弱(比如亮50%还是35%,这样叫灰度屏,以前的黑白电视机),或者控制其显示一定的颜色(现在最常用的彩色显示屏)。

我们要在显示器上显示一个图像,就是把这个图像离散化成一个个的点,然后把各个点的颜色对应到显示器的像素上。

2、扫描

扫描就是依次将颜色数值放入显示器所有像素中的这个过程。

扫描这个词是由最早的CRT显示器遗留下来的,到LCD显示器的年代已经失去意义,但是我们还是延续着这么叫。

显示器的扫描显示原理依赖于人眼的视觉暂留。只要显示器扫描频率大于人眼的发现频率,人眼看到的图像就是恒定的。如果扫描频率偏小人眼就会看到闪动。

3、LCD驱动器与LCD控制器

LCD驱动器一般和LCD显示面板集成在一起(这两者本来是分开的,做面板的是只做面板的,比如三星、LG、台湾的友达、奇美都是做面板的;驱动器也由专门的IC厂商生产;集成厂商买来面板和驱动器后集成在一起做成LCD屏幕)。LCD显示面板只负责液晶分子的旋转透光,需要一定的模拟电信号来控制液晶分子。这模拟电信号由LCD驱动器负责提供,而 LCD 驱动器的控制信号(是数字信号)来自LCD屏幕的外部接口(第二节所讲的接口)。

LCD控制器一般集成在SoC内部,负责向LCD驱动器提供控制像素显示的数字信号。LCD控制器的关键在于时序,它必须按照一定的时序和LCD驱动器通信。LCD控制器受到SoC控制,SoC会从内存中拿像素数据给LCD控制器并最终传给LCD驱动器。

4、显示内存(显存)

SoC在内存中挑选一段内存(程序员随便挑的,但是必须符合一定规矩),然后通过配置将LCD控制器和这一段内存形成一个映射关系。我们把这一段内存称为“显示内存”,简称“显存”。

这个映射关系建立之后,CPU不用再理会LCD控制器、LCD驱动器和LCD显示面板,只要关心显存即可。因为只要把待显示的图像的像素数据丢到显存中,LCD控制器就会自动从显存中读取像素数据并传输给LCD驱动器,这个过程不需要CPU的参与。

也就是说,LCD显示分为2个阶段:第一个阶段就是CPU初始化LCD控制器,使LCD控制器和某一段显存构成映射关系;第二个阶段就是将待显示的图像的像素数据丢到显存中。

四、LCD的六个主要时序参数

LCD的显示单位是帧(整个画面的内容为一帧),显示器工作时其实是一帧一帧地在显示,比如电影以每秒24帧的速度播放图片。

1、LCD显示一帧图像的过程

如下所示,一帧分为多行,一行分为多像素,因此一帧图像其实就是多个像素组成的矩阵。

LCD显示一帧图像时,先把一帧拆分为行,然后再把这些行拆分为像素点。然后LCD控制器每次将一个像素点的数据传送给LCD驱动器,LCD驱动器根据这个像素点的数据,驱动这个像素点的液晶分子旋转,从而让这个像素点显示出对应的颜色。

注意,由于 LCD控制器 和 LCD驱动器 之间一次只能传送一个像素点的数据,所以一帧图像在屏幕上其实是逐行逐像素点地显示的,不是同一时间显示出来的。

2、六个主要时序参数

LCD的六个主要时序参数如下表所示。

时序参数含义
HSPW水平同步信号脉宽
HBPD水平同步信号前肩
HFPD水平同步信号后肩
VSPW垂直同步信号脉宽
VBPD垂直同步信号前肩
VFPD垂直同步信号后肩

这些信号其实是老式的CRT显示器才会用到,LCD本身不需要,但是出于兼容性的要求,LCD选择兼容CRT显示器的这些时序要求,所以理解LCD显示器时序和编程时,可以用CRT的方式来理解。

一帧图像由多个行组成,每行都是这个时序:LCD控制器先发送一个HSYNC高电平脉冲(脉冲宽度是HSPW),脉冲告诉驱动器下面的信息是一行信息。然后开始这一行信息,这一行信息包括3部分:HBPD+有效行信息+HFPD。其中前肩和后肩都属于时序信息(和LCD屏幕具体有关),有效行信息就是横向分辨率。所以你可以认为一行总共包含4部分:HSPW+HBPD+有效行信息+HFPD。

一帧图像的通信过程是这样的:整个帧图像信号分为4部分:VSPW+VBPD+帧有效信号+VFPD。VSPW是帧同步信号宽度,用来告诉驱动器一帧图像要开始了;VBPD和VFPD分别是垂直同步信号前后肩。 

这六个时序参数本身是LCD屏幕本身的参数,与LCD控制器无关。同一个主板如果接的屏幕不一样,则时序参数设置也会不同。这些参数来源一般是:

(1)厂家一般以示例代码的形式给出。比如九鼎的210裸机教程中s5pv210-fb.c文件的第774行:

​        .h_fp            = 210,        // 160-210-354
        .h_bp            = 38,        // 46
        .h_sw            = 10,        // 1-40
        .v_fp            = 22,        // 7-22-147
        .v_fpe            = 1,
        .v_bp            = 18,        // 23
        .v_bpe            = 1,        
        .v_sw            = 7,        // 1-20​

注意这些数字的单位。H开头的三个单位都是DCLK(像素时钟),V开头的三个单位是TH。这样设置的好处是当我们改变像素时钟的设置时,不用改变这里的时序参数。 

如果没有设置好这些时序参数,屏幕会跑偏。

(2)来自LCD的数据手册。比如X210光盘资料\A盘\DataSheet\AT070TN92.pdf。

五、与LCD的相关概念

1、像素(pixel)

见第三节提到的“像素”。 像素的中文全称为图像元素,它是分辨率的尺寸单位,而不是画质。

2、像素间距(pitch)

像素间距,指的是相邻2个像素的像素中心的距离。

像素物理上一般是方形的,所以横向pitch和纵向的pitch一样的(当不是方形时则不一样)。

像素间距会影响屏幕的最佳观看距离,比如像素间距大的适合远距离看,像素间距小的适合近距离看。

3、分辨率(resolution)

分辨率,是指整个屏幕横向和纵向的像素个数,比如X210V3S开发板的屏幕分辨率是1024*600。

屏幕尺寸(纯屏幕对角线尺寸)和分辨率无关,比如X210V3S开发板的屏幕尺寸是7寸的。

屏幕尺寸、分辨率和像素间距三者之间有关联。屏幕尺寸固定时,分辨率越高(越低),则像素间距越小(越大);分辨率固定时,屏幕尺寸越大(越小),则像素间距越大(越小)。

分辨率,分为物理分辨率、实际显示分辨率。物理分辨率,是指物理屏幕像素点的真实个数。实际显示分辨率,是将物理分辨率抽样之后的分辨率,它小于等于物理分辨率。如何抽样呢?比如物理分辨率是1600*900,实际显示分辨率为1280*720(比如电脑上有调节电脑屏幕的选项),如何从1600变为1280呢?我们可以将1600去掉一些(即某些像素列不显示),或者让相邻列的像素数据一样(变为一个更粗的像素)。

4、清晰度

清晰度是一个主观概念,是人眼对显示效果(是否清晰)的一个主观判断。

清晰度由分辨率和像素间距共同决定。屏幕尺寸固定时,分辨率越高则像素间距越小,显示就越清晰;分辨率越低则像素间距越大,显示就越模糊。分辨率固定时,屏幕尺寸越小则像素间距越小,显示就越清晰;屏幕尺寸越大则像素间距越大,显示就越模糊。

5、像素深度

像素深度,指的是每个像素用多少 bit 来表示,单位是bpp,bits per pixel。

用来表示一个像素的数据位越多,则这个像素的颜色值更加丰富、分的更细,颜色深度就更深。

常见的像素深度有这么几种:1bit、8bit、16bit、24bit、32bit 。

1bit:用1个二进制位来表示颜色,这种就叫单色显示。示例就是理发店门口的LED屏。

8bit:用8个二进制位来表示颜色,此时能表示256种颜色。这种叫灰度显示(纯白到纯黑分别对应255到0,中间的数值对应不同的灰),不是彩色显示,典型应用就是以前的黑白电视机。

16bit:用16个二进制位表示颜色,此时能表示65536种颜色。这种方式可以彩色显示,一般采用RGB565的颜色分布(用5bit表示红色、用6bit表示绿色、用5bit表示蓝色)。因为用来表示RGB颜色的bit数目不够多,导致红绿蓝三种颜色本身分得不够细致,因此彩色失真比较严重。

24bit:用24个二进制位来表示颜色,此时能表示16777216种颜色。这种表示方式和16位色原理是一样的,只是RGB三种颜色各自的精度都更高了,RGB各8位,叫RGB888。此时颜色比RGB565更加真实细腻,虽然说比自然界无数种颜色还是少了很多,但人眼几乎不能区分1677万种颜色和无数种颜色的差别,因此把这种RGB888的表示方法叫做真彩色(RGB565叫做假彩色)。

32bit:总共用32位二进制来表示颜色,其中24位表示红绿蓝三元色(还是RGB888分布),剩下8位表示透明度。这种显色方式就叫ARGB(A是阿尔法,表示透明度),现在PC机中一般都用ARGB表示颜色。

一般用32bit,也就是4个字节,来存储一个像素点信息。至于其中用多少bit来表示颜色,要看具体的设置,平常所见一般都是24位色(真彩色),此时高8位一般没用或者表示其他含义,用00或者ff来填充以便内存对齐。

6、颜色序

将24bit的二进制数分为3组,高8位、中间8位、低8位,这三组二进制数,哪个表示R,哪个表示G,哪个表示B呢?

颜色序表述的就是这个问题。

注意,颜色序一般已经在LCD驱动中设置好了,我们写代码时要遵循这个设置。

7、点阵

点阵是指由像素点构成的阵列,一个屏幕就是一个点阵。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐