第一章 LCD驱动基础:从像素到屏幕

各位同学好,我是老张。做嵌入式这些年,我调试过的LCD屏少说也有几十种了。今天咱们就来聊聊LCD驱动最基础的那些事儿。别小看这些基础,我见过太多工程师上来就写代码,结果屏幕死活不亮,最后发现连接口类型都没搞对。

1.1 LCD到底是怎么工作的?

说白了,LCD就是一块夹心饼干。上下两层玻璃,中间夹着液晶材料。液晶这家伙有个怪脾气——给它加电压,它就扭转方向;不加电压,它就保持原样。扭转的时候,光线穿过去的角度就变了,于是我们就能看到不同的颜色。

嗯,这里要注意:LCD本身不发光。它背后需要背光模组,就像手电筒一样照亮屏幕。我刚开始做项目时,有次屏幕怎么调都不亮,折腾了半天才发现是背光电源没焊好。这种低级错误,谁还没犯过呢?

核心要点:LCD显示 = 背光 + 液晶偏转 + 彩色滤光片

1.2 像素与分辨率——屏幕的"细胞"

每个像素就是屏幕上的一个小点。一个像素由红、绿、蓝三个子像素组成。你想想看,我们看到的彩色画面,其实就是这三个子像素以不同亮度组合出来的。

分辨率呢?就是横向和纵向各有多少个像素。比如128×64,就是横向128个像素,纵向64个像素。我习惯用"点阵"来理解它——就像LED点阵屏一样,只不过LCD的每个点更小、更精细。

分辨率 像素总数 常见应用
128×64 8192 小尺寸手环、电子标签
240×240 57600 圆形智能手表
320×480 153600 入门级手机副屏

我的经验:选分辨率时别贪大。分辨率越高,刷屏越慢,功耗也越大。手环这种小设备,128×64其实够用了。我曾经有个项目非要上240×240,结果帧率惨不忍睹,最后还得降分辨率。

1.3 接口类型——SPI vs 8080

这是LCD驱动里最容易踩坑的地方。接口选错了,后面全白搭。

SPI接口

SPI接口,说白了就是串行通信。它只需要4根线:SCLK(时钟)、MOSI(数据输入)、MISO(数据输出,很多屏不用)、CS(片选)。

  • 优点:引脚少,布线简单,适合小尺寸屏
  • 缺点:速度慢,刷全屏时明显卡顿
  • 适用场景:128×64这种小分辨率,或者对刷新率要求不高的场合

我个人习惯用SPI驱动小屏。为什么?因为省引脚啊!MCU就那么几个IO口,能省则省。不过要注意,SPI的时钟频率别设太高,我遇到过几次因为时钟太快导致数据错位的情况。

8080接口

8080接口是并行的,一次传8位或16位数据。它需要的数据线多,但速度快得多。

  • 优点:速度快,刷屏流畅
  • 缺点:占用引脚多,布线复杂
  • 适用场景:大分辨率屏,或者需要动画效果的场合

避坑指南:我曾经在一个项目里用了8080接口,结果PCB布线时发现IO口不够用,最后只能改方案。所以选接口前,先数数你的MCU还剩多少引脚!

1.4 驱动时序——让屏幕"听话"的关键

不管是SPI还是8080,驱动LCD都需要遵循特定的时序。说白了,就是什么时候拉高CS,什么时候送数据,什么时候拉低WR。

我刚开始学LCD驱动时,总觉得时序图看着头疼。后来发现一个窍门:把时序图想象成交通信号灯。CS是总开关,SCLK是节奏,数据线就是路上的车。红灯停、绿灯行,节奏对了,数据就传过去了。

// SPI写命令的典型时序
void LCD_WriteCmd(uint8_t cmd) {
    LCD_DC_LOW();       // 命令模式
    LCD_CS_LOW();       // 选中芯片
    SPI_WriteByte(cmd); // 发送数据
    LCD_CS_HIGH();      // 释放芯片
}

// SPI写数据的典型时序
void LCD_WriteData(uint8_t data) {
    LCD_DC_HIGH();      // 数据模式
    LCD_CS_LOW();       // 选中芯片
    SPI_WriteByte(data);// 发送数据
    LCD_CS_HIGH();      // 释放芯片
}

小技巧:调试时序时,用逻辑分析仪抓波形。我每次调新屏都会先抓一下波形,确认时序对不对。这比盯着代码看有效多了。

1.5 初始化流程——让屏幕"醒过来"

LCD上电后不会自动显示,需要给它发一串初始化命令。这就像叫醒一个睡懒觉的人——先喊几声(复位),再告诉他该干什么(配置参数)。

典型的初始化流程是这样的:

  1. 硬件复位:拉低RST引脚,保持10ms以上,再拉高
  2. 发初始化命令序列:设置扫描方向、颜色格式、显示模式等
  3. 开显示:发命令让屏幕开始显示
  4. 清屏:把所有像素设为黑色或白色

嗯,这里有个坑要注意:不同厂家的LCD,初始化命令完全不同。我遇到过最离谱的一次,同一款屏换了批次,初始化序列就不一样了。所以拿到新屏,第一件事就是看数据手册,别偷懒。

总结一下:LCD驱动基础就三件事——理解像素原理、选对接口类型、写好初始化时序。这三步走稳了,后面刷屏、优化帧率才有基础。

好了,第一章就聊到这儿。下一章咱们会深入讲帧率优化,到时候我会分享一些实战中总结出来的"骚操作"。各位先把基础打牢,后面才能飞得起来。