2、LCD显示原理:液晶显示基础、像素与分辨率、色彩深度、帧率与刷新率
2.1 液晶显示基础——LCD到底是怎么亮起来的?
说实话,我刚入行那会儿,一直以为LCD是自己发光的。后来拆了一块报废的屏幕才明白——液晶本身不发光,它就是个“光阀门”。
液晶分子有个特性:给它加电压,它就扭转;不加电压,它就保持原样。这个扭转动作,决定了背光能不能穿过它。你想想看,这就像一扇百叶窗,电一拉,叶片转个角度,光就透过去了。
LCD的结构其实不复杂,从上到下大概是:
- 偏光片——把自然光变成单一方向的光
- 玻璃基板——上面刻着ITO透明电极
- 液晶层——核心部件,负责“开关”光线
- 彩色滤光片——红绿蓝三色排列,混出各种颜色
- 背光模组——提供光源,通常是LED灯条
我在项目里遇到过一个问题:屏幕显示偏暗,查了半天发现是偏光片贴反了。嗯,这个方向搞错,光就全被挡死了。所以做驱动移植时,偏光片角度这个参数一定要跟屏厂确认清楚。
核心要点:液晶本身不发光,它只是控制背光能不能透过去。驱动LCD,本质上就是控制每个像素点的电压,让液晶扭转到位。
2.2 像素与分辨率——屏幕上的“小格子”
像素是什么?说白了就是屏幕上最小的发光单元。一个像素由红、绿、蓝三个子像素组成。我习惯叫它们R、G、B子像素。
分辨率就是像素的个数。比如1024×600,意思是有1024列、600行像素。这个数字越大,画面越细腻。
常见的分辨率有:
| 名称 | 分辨率 | 常见应用 |
|---|---|---|
| QVGA | 320×240 | 老式工控屏 |
| VGA | 640×480 | 早期显示器 |
| WVGA | 800×480 | 7寸平板 |
| HD | 1280×720 | 手机、车载 |
| FHD | 1920×1080 | 主流显示器 |
做驱动移植时,分辨率直接决定了帧缓冲(framebuffer)的大小。我算过一笔账:一个1024×600、24位色的屏幕,一帧数据是1024×600×3 = 1.8MB。如果你的MCU只有2MB内存,那基本就满了。所以选型时一定要算清楚。
我的经验:驱动移植第一步,先确认屏的物理分辨率。很多国产屏标称分辨率跟实际驱动IC支持的不一样,我吃过这个亏。最好直接读屏的ID寄存器确认。
2.3 色彩深度——一个像素能显示多少种颜色?
色彩深度,也叫色深,指的是每个像素用多少位来表示颜色。常见的色深有:
- 1位——黑白屏,每个像素要么黑要么白
- 8位——256色,老式手机屏常用
- 16位——RGB565,红5位、绿6位、蓝5位,共65536色
- 18位——RGB666,共262144色
- 24位——RGB888,共1677万色,真彩色
为什么16位色里绿色多1位?因为人眼对绿色最敏感。这个设计挺巧妙的,用更少的位数达到更好的视觉效果。
我在项目中遇到过一个问题:显示照片时颜色偏紫。查了半天,发现是驱动IC配置成了RGB565,但上层应用送的是RGB888数据。颜色映射错了,当然偏色。所以驱动层和上层的数据格式必须一致。
避坑指南:我曾经在移植一款ILI9341驱动时,发现颜色顺序是BGR而不是RGB。很多国产屏厂商会改颜色顺序,一定要看数据手册确认。
2.4 帧率与刷新率——别搞混了这两个概念
这两个词经常被混用,但其实是两码事。
帧率(FPS):指的是应用层每秒更新画面的次数。比如游戏60帧,就是每秒画60次新画面。
刷新率(Hz):指的是屏幕硬件每秒刷新显示的次数。比如60Hz,就是屏幕每秒重绘60次。
为什么要有刷新率?因为液晶分子会慢慢恢复原状。如果不定期刷新,画面会变淡。CRT时代刷新率很重要,因为会闪烁。LCD时代,60Hz基本够用。
我做过一个项目,帧率只有15帧,但刷新率是60Hz。结果就是:屏幕一直在刷新,但显示的内容15秒才变一次。用户觉得卡顿,其实不是刷新率的问题,是帧率太低。
注意:帧率不能超过刷新率。比如屏幕只有60Hz,你硬要跑120帧,那多余的帧就浪费了,还会造成撕裂(tearing)。解决办法是开启垂直同步(VSync)。
2.5 知识体系总览
下面这张图是我自己画的,把本章的核心逻辑串起来了。你看一遍,基本就明白LCD显示的全貌了。
这张图把本章的知识点串起来了。你看,液晶显示基础是底层原理,像素分辨率、色彩深度、帧率刷新率是三个核心参数。做驱动移植时,这三个参数必须全部确认无误,屏幕才能正常工作。
我的习惯:拿到一块新屏,先读数据手册,把分辨率、色深、刷新率三个参数记下来。然后写一个简单的测试程序,画个彩条看看颜色对不对。这一步能发现80%的问题。
公众号:蓝海资料掘金营,微信deep3321