1. LCD TFT 屏基础概念

TFT(Thin-Film Transistor,薄膜晶体管)液晶显示屏是当前嵌入式设备中最常用的彩色显示方案。理解其基本工作原理、分辨率、色彩深度与像素格式,是后续驱动配置与调试的基础。

1.1 TFT 液晶显示原理

TFT-LCD 的每个像素点由一个薄膜晶体管独立控制,通过调节施加在液晶分子上的电压改变其偏转角度,从而控制背光透过率,实现灰度与色彩显示。

核心工作流程: 背光源 → 偏光片 → TFT 阵列(每个像素含 R/G/B 子像素)→ 液晶层 → 彩色滤光片 → 偏光片 → 人眼
TFT 像素结构示意图 TFT 像素结构示意图 背光源 (Backlight) 下偏光片 TFT 阵列 (薄膜晶体管) 每个像素含 R / G / B 三个子像素开关 液晶层 (Liquid Crystal) 彩色滤光片 (R/G/B 滤色膜) 上偏光片 每个像素由 R/G/B 三个子像素组成,TFT 独立控制每个子像素的亮度

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
RGB565 与 RGB888 位分配对比 RGB565 与 RGB888 位分配对比 RGB565 (16 位 / 2 字节) R[4:0] G[5:0] B[4:0] 5 + 6 + 5 = 16 位 bit 15-11 bit 10-5 bit 4-0 RGB888 (24 位 / 3 字节) R[7:0] G[7:0] B[7:0] 8 + 8 + 8 = 24 位 bit 23-16 bit 15-8 bit 7-0 RGB565 每个像素 2 字节,显存占用小,SPI 传输快,是嵌入式 TFT 屏最常用格式 RGB888 每个像素 3 字节,色彩更丰富,但 SPI 传输数据量增加 50%

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 位分配。理解位分配是编写驱动颜色转换函数的基础。