1. LCD显示原理与并行接口基础

各位同学,咱们今天聊聊LCD显示最核心的东西。说实话,我刚开始接触LCD驱动时,也被那些时序图搞得一头雾水。但后来发现,只要把原理搞清楚了,写驱动其实就是按部就班的事。

1.1 LCD液晶显示原理

LCD,说白了就是液晶显示器。液晶本身不发光,它像个百叶窗——通过电压控制液晶分子的扭转角度,让背光透过或者挡住,从而显示出不同的亮度。

我习惯把LCD想象成一个巨大的像素矩阵。每个像素由三个子像素组成:红、绿、蓝。通过控制这三个子像素的亮度比例,就能混合出我们想要的颜色。

关键概念:液晶本身不发光,需要背光源。我们驱动的其实是每个像素的透光率。

举个例子,一个像素显示白色,就是红绿蓝三个子像素全开;显示黑色,就是全关。中间的颜色,靠的是不同灰阶组合。ILI9341支持262K色,也就是每个颜色通道有64级灰度(6位),组合起来就是64×64×64=262,144种颜色。

1.2 像素与分辨率

分辨率这个概念,大家应该不陌生。320×240,意思是横向320个像素,纵向240个像素。我最早用的LCD就是320×240的,那时候觉得挺清晰。现在手机动不动就2K屏,但嵌入式系统里,320×240、480×320这些分辨率还是很常见的。

分辨率 常见尺寸 典型应用
320×240 (QVGA) 2.4寸 - 3.2寸 MP3播放器、小家电
480×320 (HVGA) 3.5寸 - 4.0寸 工控手持设备
800×480 (WVGA) 4.3寸 - 7.0寸 车载仪表、智能家居面板

这里有个坑,我提醒一下:分辨率越高,需要的显存就越大。320×240的屏幕,如果每个像素用16位色(RGB565),需要的显存是320×240×2 = 153,600字节。如果你的单片机RAM只有64KB,那就得考虑用SPI接口或者分块刷新的方式了。

1.3 并行接口(8080/6800)时序

好,重点来了。并行接口是LCD驱动里最经典的方式。主要有两种:8080模式和6800模式。

8080模式是Intel搞的,6800模式是Motorola搞的。现在市面上绝大多数LCD驱动芯片都支持8080模式,我个人也推荐大家用8080,因为时序更直观,写代码也顺手。

我的经验:ILI9341默认就是8080模式。如果你看到数据手册里提到IM[3:0]引脚配置,IM0=1、IM1=0、IM2=0、IM3=0就是8080 16位并行模式。我每次画板子都这么配,从来没出过问题。

8080并行接口的信号线,我列一下:

  • CSX:片选,低电平有效。选中了才能通信。
  • D/CX:数据/命令选择。低电平写命令,高电平写数据。
  • WRX:写使能,上升沿锁存数据。
  • RDX:读使能,上升沿读取数据。
  • DB[15:0]:16位数据总线。8位接口只用DB[7:0]。
  • RESX:复位,低电平复位芯片。

写一个命令的时序是这样的:

  1. 拉低CSX,选中芯片。
  2. 拉低D/CX,表示要写命令。
  3. 在数据总线上放命令字节。
  4. 拉低WRX,再拉高WRX,产生一个上升沿。
  5. 芯片在WRX上升沿锁存数据。
  6. 拉高CSX,结束通信。

写数据时,D/CX拉高就行,其他步骤一样。

注意:时序参数有严格限制。比如WRX低电平脉冲宽度,ILI9341要求至少15ns。我刚开始用STM32F103时,GPIO翻转速度不够快,导致WRX脉冲太宽,屏幕刷新率上不去。后来改用FSMC硬件接口,问题就解决了。

6800模式跟8080的区别在于:6800用E(使能)信号代替WRX和RDX,用R/W信号区分读写。说实话,现在用6800的场合很少了,大家了解就行。

1.4 驱动芯片简介:ILI9341与ST7789

市面上最常见的两款驱动芯片,就是ILI9341和ST7789。我两个都用过,说说区别。

特性 ILI9341 ST7789
最大分辨率 320×240 240×240 / 320×320
接口 8080 8/9/16/18位 + SPI 8080 8/9/16/18位 + SPI
颜色深度 262K (6-6-6) 262K (6-6-6)
内部RAM 172,800字节 172,800字节
典型应用 2.4寸 - 3.2寸 1.3寸 - 1.8寸小屏

ILI9341是经典款,资料多,用的人多。ST7789是后起之秀,在小尺寸圆形屏上很流行。我去年做一个智能手表项目,用的就是ST7789驱动的1.3寸圆形LCD,效果不错。

两个芯片的指令集基本兼容,但有些细节不同。比如初始化序列,ILI9341需要发一堆寄存器配置,ST7789相对简单一些。我建议你拿到屏幕后,先看驱动芯片型号,再找对应的数据手册,别拿ILI9341的代码直接烧到ST7789上——我吃过这个亏,屏幕花了一片。

LCD驱动知识体系结构图 LCD驱动核心 液晶显示原理 像素与分辨率 并行接口时序 背光与透光 RGB子像素 显存计算 颜色深度 8080/6800 ILI9341 ST7789 核心要点 理解液晶原理 → 掌握分辨率与显存关系 → 熟悉8080时序 → 选对驱动芯片