文章目录
1.LCD与OLED的区别
-
LCD背光源与OLED自发光
-
LCD无机材料,LCD寿命较长。OLED广视角、几乎无穷高的对比度、可以弯曲、较低耗电优点。
2.LCD原理
- 屏幕上的每一个点称为像素
- 每个像素点由RGB三原色组成
2.1 颜色如何确定?
- 由RGB三组信号线组成
- 由下原理图可知:R5条、G6条,B5条,即
RGB565
(彩色模式, 一个像素占两个字节) - 因此其每个像素占用多少位(BBP:bit per piexl)为2个字节
2.2 LCD如何“行扫描”?
- 有一条CLK时钟线与LCD相连,每发出一次CLK(高低电平),就移动一个像素。
2.3 如何跳到下一行进行“行扫描”?
- 有一条HSYNC(水平同步信号)信号线与LCD相连,每发出一次脉冲(高低电平),行扫描跳到下一行的起始位置。
2.4 如何进行下一个“场扫描”?
- 有一条VSYNC(垂直同步信号)信号线与LCD相连,每发出一次脉冲(高低电平),就跳到原点。
注意:RGB数据线上的数据从何而来?
内存里面手动划分一块显存(FrameBuffer),里面存放了要显示的数据,LCD控制器从里面将数据读出来,通过RGB三组线传给LCD,再依次打到显示屏上。
3.LCD时序
- 分辨率 = Hsync的个数 * 一行中的有效CLK
完整时序图:
形象时序图:
以上两张图可以解释LCD控制时序中的
Hsync
与Vsync
的协同(可以理解 一帧是一个垂直同步信号、一行是一个水平同步信号)
- 1.首先一帧(Vsync)中有若干个行(Hsync),设为y,Vsync发出帧脉冲宽度
Tvp
- 2.经过
Tvb
时间,才可以发送一帧的数据,从第一行开始- 3.其次一行(Hsync)中有若干个时钟信号(CLK),有效的设为x,Hsync发出脉冲宽度
Thp
- 4.经过
Thb
时间,才可以发送一行的数据- 5.直到发送到一行的最后一个像素,经过
Thf
时间,才会有下一个水平同步信号(Hsync)- 6.直到发送到最后一行,经过
Tvf
时间,才会有下一个垂直同步信号(Vsync)
由上可知几个重要的信号引脚:Hsync
、Vsync
、CLK
、Dn
由上可知几个重要的时间参数:Tvp
、Tvb
、Thp
、Thb
、Thf
、Tvf
4.LCD控制器
思路:
- 1.取数据:把
FrameBuffer
的地址、bpp
、分辨率
告诉LCD控制器 - 2.发数据:把时序告诉LCD控制器、并设置引脚的极性(本款是下降沿取数据,但是有的LCD是上升沿有效,因此需要设置极性)
4.1 像素数据格式
- 使用的像素数格式如下:16BPP
565数据格式引脚连接图:
4.2 调色板
- 本应该用
FrameBuffer
中用16bit表示1像素,可以用8bit存放在FrameBuffer
来省空间 - 8bit存放的是调色板中颜色的索引(共256中16bit颜色)
那么当使用像素深度为8pp时候,像素深度和我们的带宽不一致,我们的颜色要用16位表示,如果直接用上肯定不可能,那我们就可以选择用调色板,调色板中存放了256种16bpp的颜色,这时候我们color存放的就不是真实的颜色值了,而是存放的是调色板中256种颜色的
索引
,成线性关系一一对应,这样我们大大减轻了系统的负担。用16bpp还是8bpp这得取决实际情况,16bpp肯定比8pp清晰,但同时带来的负荷也更加重。
调色板工作示意图
5.编程框架
面向对象编程
参数层:
- 1.抽象出(不同设备)共同的参数结构体
- 2.上层的设备结构体指针指向所需的参数结构体
驱动层
- 1.抽象不同平台的LCD控制器结构体
- 2.上层的LCD控制器结构体指针指向所需的结构体
6. 结构体参数
6.1 引脚极性结构体
由上3.LCD时序可知几个重要的信号引脚:Hsync
、Vsync
、CLK
、Dn
:Hsync
、Vsync
、CLK
、Dn
/* 引脚极性结构体
* NORMAL:正常极性
* INVERT:反转极性
*/
typedef struct pins_polarity{