1. LCD TFT 屏基础概念
TFT(Thin-Film Transistor,薄膜晶体管)液晶显示屏是当前嵌入式设备中最常用的彩色显示方案。理解其基本工作原理、分辨率、色彩深度与像素格式,是后续驱动配置与调试的基础。
1.1 TFT 液晶显示原理
TFT-LCD 的每个像素点由一个薄膜晶体管独立控制,通过调节施加在液晶分子上的电压改变其偏转角度,从而控制背光透过率,实现灰度与色彩显示。
核心工作流程: 背光源 → 偏光片 → TFT 阵列(每个像素含 R/G/B 子像素)→ 液晶层 → 彩色滤光片 → 偏光片 → 人眼
1.2 分辨率
分辨率指显示屏在横向和纵向上包含的像素数量,格式为 宽度 × 高度(单位:像素)。分辨率越高,画面越细腻,但需要更大的显存和更高的 SPI 传输速率。
| 常见分辨率 | 宽 × 高 (像素) | 典型尺寸 (英寸) | 应用场景 |
|---|---|---|---|
| QQVGA | 128 × 160 | 1.44" | 手环、小屏交互 |
| QCIF | 176 × 220 | 1.8" | 功能手机副屏 |
| QVGA | 240 × 320 | 2.0" ~ 2.8" | 入门级开发板、MP4 |
| WQVGA | 240 × 400 | 2.8" ~ 3.2" | 宽屏入门设备 |
| HVGA | 320 × 480 | 3.2" ~ 3.5" | 中端嵌入式 HMI |
| VGA | 640 × 480 | 4.3" ~ 5.0" | 工业控制面板 |
| WVGA | 800 × 480 | 4.3" ~ 7.0" | 智能家居、车载 |
选型提示: 对于 SPI 接口的 TFT 屏,建议优先选择 QVGA(240×320)或 WQVGA(240×400)分辨率。更高分辨率(如 WVGA)在 SPI 模式下刷新率会明显下降,通常需要切换到并行接口或 RGB 接口。
1.3 色彩深度
色彩深度(Color Depth)表示每个像素用多少位二进制数来表示颜色。位数越多,可显示的颜色数量越多,色彩过渡越平滑。
| 色彩深度 | 位数/像素 | 可显示颜色数 | 常见格式 |
|---|---|---|---|
| 8 位色 | 8 bpp | 256 色 | 索引色 (调色板) |
| 16 位色 | 16 bpp | 65,536 色 | RGB565 |
| 18 位色 | 18 bpp | 262,144 色 | RGB666 (较少用) |
| 24 位色 | 24 bpp | 16,777,216 色 | RGB888 |
嵌入式选型要点: SPI 接口 TFT 屏最常用的是 RGB565(16 位色),因为每个像素只需 2 字节,显存占用小、传输速度快。RGB888(24 位色)虽然色彩更丰富,但每个像素需要 3 字节,在 SPI 模式下传输压力较大,通常用于更高端的屏或并行接口。
1.4 像素格式:RGB565 与 RGB888
像素格式定义了颜色数据在内存中的排列方式。对于 TFT 屏,最常见的两种格式是 RGB565 和 RGB888。
RGB565 格式
每个像素占用 16 位(2 字节),按以下方式分配:
- 红色(R): 高 5 位(bit 15 ~ bit 11)
- 绿色(G): 中间 6 位(bit 10 ~ bit 5)
- 蓝色(B): 低 5 位(bit 4 ~ bit 0)
// RGB565 像素格式示例
// 颜色:红色 (R=0x1F, G=0x00, B=0x00)
uint16_t red_pixel = (0x1F << 11) | (0x00 << 5) | 0x00; // = 0xF800
// 颜色:绿色 (R=0x00, G=0x3F, B=0x00)
uint16_t green_pixel = (0x00 << 11) | (0x3F << 5) | 0x00; // = 0x07E0
// 颜色:蓝色 (R=0x00, G=0x00, B=0x1F)
uint16_t blue_pixel = (0x00 << 11) | (0x00 << 5) | 0x1F; // = 0x001F
RGB888 格式
每个像素占用 24 位(3 字节),按以下方式分配:
- 红色(R): 高 8 位(bit 23 ~ bit 16)
- 绿色(G): 中间 8 位(bit 15 ~ bit 8)
- 蓝色(B): 低 8 位(bit 7 ~ bit 0)
// RGB888 像素格式示例
// 颜色:红色 (R=0xFF, G=0x00, B=0x00)
uint32_t red_pixel = (0xFF << 16) | (0x00 << 8) | 0x00; // = 0x00FF0000
// 颜色:绿色 (R=0x00, G=0xFF, B=0x00)
uint32_t green_pixel = (0x00 << 16) | (0xFF << 8) | 0x00; // = 0x0000FF00
// 颜色:蓝色 (R=0x00, G=0x00, B=0xFF)
uint32_t blue_pixel = (0x00 << 16) | (0x00 << 8) | 0xFF; // = 0x000000FF
1.5 像素格式对比总结
| 对比项 | RGB565 | RGB888 |
|---|---|---|
| 每像素位数 | 16 位 | 24 位 |
| 每像素字节数 | 2 字节 | 3 字节 |
| 可显示颜色数 | 65,536 色 | 16,777,216 色 |
| 显存占用 (QVGA) | 240×320×2 = 153.6 KB | 240×320×3 = 230.4 KB |
| SPI 传输数据量 | 较低 | 较高(多 50%) |
| 色彩过渡 | 可接受,轻微色阶 | 平滑,无可见色阶 |
| 嵌入式适用性 | 推荐首选 | 高性能场景 |
常见误区: 有些初学者误以为 RGB888 一定比 RGB565 好。但在 SPI 接口的 TFT 屏上,RGB565 是更务实的选择——它节省了 33% 的传输时间,降低了 MCU 的 SPI 时钟频率要求,同时 65K 色对于大多数嵌入式 UI 已经足够。除非你的项目需要显示照片级图片或渐变色带非常敏感,否则优先使用 RGB565。
1.6 本节要点回顾
- TFT 原理: 每个像素由 TFT 独立控制液晶偏转,配合背光和彩色滤光片实现彩色显示。
- 分辨率: 常见 SPI TFT 屏分辨率为 QVGA(240×320)和 WQVGA(240×400),选型时需考虑显存和 SPI 速率。
- 色彩深度: 16 位色(RGB565)是嵌入式 SPI 屏的主流选择,24 位色(RGB888)用于更高色彩要求。
- 像素格式: RGB565 用 5+6+5 位分配 R/G/B,RGB888 用 8+8+8 位分配。理解位分配是编写驱动颜色转换函数的基础。