LCD与TFT显示系统开发 - 第1节
1. LCD TFT显示技术基础
TFT-LCD(Thin Film Transistor Liquid Crystal Display,薄膜晶体管液晶显示器)是目前嵌入式设备中最主流的显示技术。其核心原理是利用薄膜晶体管控制每个子像素的电压,从而改变液晶分子的排列方向,控制背光透过率,最终实现图像显示。
核心工作流程: 背光光源 → 下偏光片 → TFT 阵列与液晶层 → 彩色滤光片 → 上偏光片 → 人眼接收。
TFT 阵列中的每个像素由三个子像素(红、绿、蓝)组成,每个子像素对应一个独立的薄膜晶体管。当栅极驱动电路选中某一行时,源极驱动电路将对应的灰度电压写入该行所有子像素的存储电容中,电压保持到下一帧刷新。液晶分子在电场作用下发生扭转,改变通过偏振光的光强,配合彩色滤光片产生丰富的色彩。
1.2 像素与分辨率
像素是显示图像的最小单位,每个像素由 R、G、B 三个子像素构成。分辨率则指屏幕上像素的总数量,通常以“水平像素数 × 垂直像素数”表示。
| 分辨率名称 | 尺寸(像素) | 总像素数 | 常见应用 |
|---|---|---|---|
| QVGA | 320 × 240 | 76,800 | 低端手持设备、工控面板 |
| HVGA | 480 × 320 | 153,600 | 早期智能手机、PDA |
| WVGA | 800 × 480 | 384,000 | 7寸车载屏、入门级HMI |
| XGA | 1024 × 768 | 786,432 | 10寸工业平板、医疗设备 |
| HD | 1280 × 720 | 921,600 | 高清便携设备、智能家居 |
| Full HD | 1920 × 1080 | 2,073,600 | 高端嵌入式、多媒体终端 |
驱动开发提示: 分辨率越高,帧缓冲区(Frame Buffer)占用的 RAM 越大。例如 RGB565 格式下,800×480 分辨率需要 800×480×2 = 768,000 字节(约 750 KB)。MCU 内部 SRAM 通常不足,需外扩 SDRAM 或使用 SPI 串行屏。
1.3 色彩深度:RGB565 与 RGB888
色彩深度决定每个像素能显示的颜色数量。嵌入式 LCD 驱动中最常用的两种格式是 RGB565 和 RGB888。
| 参数 | RGB565 | RGB888 |
|---|---|---|
| 每像素位数 | 16 bit | 24 bit |
| 红色位数 | 5 bit(32 级) | 8 bit(256 级) |
| 绿色位数 | 6 bit(64 级) | 8 bit(256 级) |
| 蓝色位数 | 5 bit(32 级) | 8 bit(256 级) |
| 总颜色数 | 65,536 色 | 16,777,216 色 |
| 帧缓冲区大小(800×480) | 768,000 字节 | 1,152,000 字节 |
| 典型接口 | 16位并行 / SPI | 24位并行 / RGB 接口 |
避坑提醒: 在 MCU 驱动中,RGB565 是主流选择。RGB888 虽然色彩更丰富,但需要更大的带宽和存储空间,且很多低端 MCU 的 LCD 控制器只支持 RGB565 格式。如果强行使用 RGB888,可能造成显示错位或颜色失真。
RGB565 数据排列示例:
// 一个像素的 16 位数据布局(大端模式)
// Bit 15-11: R[4:0] 红色 5 位
// Bit 10-5 : G[5:0] 绿色 6 位
// Bit 4-0 : B[4:0] 蓝色 5 位
uint16_t pixel = (red << 11) | (green << 5) | blue;
// 常用颜色宏定义
#define COLOR_BLACK 0x0000
#define COLOR_WHITE 0xFFFF
#define COLOR_RED 0xF800
#define COLOR_GREEN 0x07E0
#define COLOR_BLUE 0x001F
#define COLOR_YELLOW 0xFFE0
1.4 背光与偏光片
背光系统
TFT-LCD 属于被动发光器件,必须依靠背光提供光源。嵌入式设备中常用 LED 背光,通过 PWM 调节亮度。
- LED 背光类型: 侧入式(Edge-lit)和直下式(Direct-lit)。小尺寸屏几乎全部采用侧入式,通过导光板均匀分布光线。
- PWM 调光: 通过改变占空比控制背光亮度。频率通常设置在 1 kHz ~ 20 kHz,避免人眼可见闪烁。
- 背光驱动芯片: 常用 MP3302、PT4105、TPS61165 等,支持升压和恒流控制。
// 背光 PWM 初始化示例(STM32 HAL)
void Backlight_Init(void) {
TIM_HandleTypeDef htim;
htim.Instance = TIM2;
htim.Init.Prescaler = 84 - 1; // 84 MHz / 84 = 1 MHz
htim.Init.Period = 1000 - 1; // 1 MHz / 1000 = 1 kHz
htim.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&htim);
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = 500; // 50% 占空比
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
HAL_TIM_PWM_ConfigChannel(&htim, &sConfigOC, TIM_CHANNEL_1);
HAL_TIM_PWM_Start(&htim, TIM_CHANNEL_1);
}
偏光片的作用
偏光片是 TFT-LCD 中不可或缺的光学元件,分为上偏光片和下偏光片,偏振方向相互垂直(正交)。
| 偏光片位置 | 偏振方向 | 主要作用 |
|---|---|---|
| 下偏光片 | 0°(水平) | 将背光发出的非偏振光转换为线偏振光 |
| 上偏光片 | 90°(垂直) | 分析透过液晶层的偏振光,控制出射光强 |
当液晶层未加电压时,液晶分子扭转 90°,偏振光方向旋转后通过上偏光片,像素呈现亮态。施加电压后,液晶分子直立,偏振光方向不变,被上偏光片阻挡,像素呈现暗态。通过控制电压大小,可以实现 0~255 级的灰度显示。
开发要点总结:
- 理解 TFT-LCD 的层叠结构是驱动开发的基础,背光、偏光片、液晶、滤光片缺一不可。
- 分辨率决定帧缓冲区大小,选型时需评估 MCU 的 RAM 和总线带宽。
- RGB565 是嵌入式 LCD 驱动的事实标准,色彩深度与存储开销需平衡。
- 背光 PWM 调光频率要避开人眼敏感范围(100 Hz ~ 500 Hz),建议 1 kHz 以上。
- 偏光片损坏或老化会导致对比度下降、颜色发白,硬件调试时需注意检查。