LCD显示屏 --- 8080接口 和 RGB接口 的区别
主要介绍LCD显示的基本原理,涉及像素、分辨率、颜色模型、RGB888等格式、Framebuffer、8080接口、RGB接口。
1.LCD显示出图片的基本原理
LCD作为显示器,它的显示原理和图片是一样的。
图片可以看作由一个一个点(即像素pixel)组成。每行有xres个像素,有yres行,则这个图片的分辨率(resolution)是:xres * yres。
同理,LCD屏幕也是由一个个像素点组成,若要显示一张相同分辨率的图片即把LCD上和图片对应位置的像素修改成同样的颜色。
我们现在的目标变成了修改LCD上一个点的颜色。怎么表示颜色?肯定是发数据给LCD,所以问题变成数据和颜色之间是什么关系?
2.颜色基本知识
颜色有很多颜色模型,这方面我不是专业的,但是只需要知道,颜色模型相当于用不同的格式来描述一个颜色。常见的有RGB、YUV、HSV、HSI等。最常用的为RGB,我们从RGB入手。
RGB模型用红绿蓝三原色来描述一个颜色,所有颜色都是红绿蓝混合而成。
所以你可以认为一个像素点上包含了RGB三种数据。三个数据合一即一个像素点上的数据。这个数据是多少位的?这就出现了一个概念:bpp(bits per pixel),每个像素用多少位来表示。
可以用24位数据来表示红绿蓝,也可以用16位(还有其他),比如:
24bpp:RGB888实际上会用到32位,其中8位未使用,其余24位中分别用8位表示红(R)、绿(G)、蓝(B)
16bpp:有RGB565,RGB555
- RGB565:用5位表示红、6位表示绿、5位表示蓝
- RGB555:16位数据中用5位表示红、5位表示绿、5位表示蓝,浪费一位
现在知道了数据和颜色之间的关系,数据如何到像素上?
3.Framebuffer和LCD控制器
前面已知,让LCD显示图片,就是修改LCD上的每一个像素。全部LCD像素数据合起来存储的地方(也不一定是全部,总之就是存储了数据)叫做Framebuffer,frame为帧,一幅图片可叫做一帧,buffer为缓存。
LCD控制器(LCD Controller)从Framebuffer中取出数据,修改LCD。
所以要驱动LCD有一个工作就是设置LCD控制器。先不讲怎么设置,假设我们会设置了。
4.两大类LCD
Framebuffer可以在LCD内,也可以在外部,这就使得LCD分成了两大类。
一类适用于性能弱的单片机如stm32f1、51,称为LCD模组(LCM):
它集成了Framebuffer,LCD控制器,LCD屏幕
一类适用于性能强的MPU\SOC如S3C2440、IMX6ULL,它只有LCD屏幕,LCD控制器在SOC内,Framebuffer可能是外接的内存。
显然,构造不一样,LCD和芯片之间接口肯定不一样,LCM和单片机通信的接口一般为8080接口。LCD屏幕和SOC通信的接口一般为RGB接口
5.LCD接口
介绍两种常用的接口
5.18080接口
对于LCM的接口8080非常简单,就和内存差不多。
需要读数据,所以有一个读信号RD;
需要写数据,所以有一个写信号WR;
需要分辨这个模组和其他东西,所以有一个片选信号CS;
需要传输数据,需要数据线DB0-DB15,
需要分辨传输的地址,所以需要地址线,但是地址线和数据线共用,通过RS信号来分辨DB0-DB15上传输的是地址还是数据。
5.2RGB接口
数据信号(RGB 数据)
控制信号
- HSYNC:水平同步,指示一行的起始 / 结束
- VSYNC:垂直同步,指示一帧的起始 / 结束
- DE(Data Enable):数据有效,高电平时 RGB 数据有效
- PCLK:像素时钟,作为采样与传输的基准时钟
RGB 接口屏通常需要搭配 SPI 或 I2C 等串行总线来传输控制命令(读写寄存器)
看似比较复杂,其实也就是设置LCD控制器。
到这我们就明白了,无论是哪一类的LCD,我们需要做的工作是,设置LCD控制器,准备数据。根据不同LCD有不同的驱动方式和数据格式,得根据LCD的手册来确定,在今后的文章中将给出具体例子。
最后附上所有知识点思维导图