One 单片机如何通过LCD屏幕显示数据?从零开始的完整认知
以下内容面向初学者,从历史背景出发,逐步带你理解你手中那块 2.0寸 240×320 SPI TFT LCD(ST7789V2驱动) 是如何工作的。
一、屏幕显示技术的发展历史(背景引入)
1. 最早的显示方式:段码显示
最早的电子设备用的是"七段数码管",只能显示数字,原理极简单:点亮哪个段,就显示哪个数字。数码管(单纯发光的灯)用来显示数
数码管正视图
数码管侧视图
数码管引脚图
2. CRT 显像管时代
电视机、早期电脑显示器用的是阴极射线管(CRT),通过电子束扫描荧光屏来显示图像。体积大、功耗高。
3. LCD 液晶显示时代(我们今天用的)
LCD(液晶显示器)利用液晶分子在电场下改变光的偏振方向来控制每个像素的亮暗,配合彩色滤光片实现彩色显示。它具有能耗低、寿命长、体积小、色彩还原度高等优点,广泛用于手机、平板、智能家电等。[LCD概述]
你手中的屏幕就是 TFT-LCD(薄膜晶体管液晶显示器),是目前物联网设备中最常见的显示技术。
二、LCD 屏幕的硬件结构
一块完整的 LCD 模块通常由四部分组成:[LCD概述]
| 组成部分 | 作用 |
|---|---|
| 面板 | 决定色彩、可视角度、分辨率(你的屏是 IPS 面板) |
| 背光源 | 液晶本身不发光,需要背光提供光源,可用 PWM 控制亮度 |
| 驱动 IC | 接收单片机的指令,控制液晶像素的电压,让画面显示出来 |
| FPC | 柔性排线,连接驱动 IC 与单片机 |
你的屏幕驱动 IC 是 ST7789V2,它负责"翻译"单片机发来的数据,并驱动 240×320 个像素点显示对应颜色。
三、通信协议的发展历史(单片机如何"说话"给屏幕听)
单片机要控制屏幕,必须通过某种通信协议传输指令和图像数据。
通信协议演进简史
| 时代 | 协议 | 特点 |
|---|---|---|
| 早期 | 并行总线(I80/MCU接口) | 8~16根数据线同时传输,速度快但占用引脚多 |
| 中期 | SPI 串行接口 | 只需少量引脚,速度适中,成本低,适合小屏幕 |
| 现代 | QSPI / RGB / MIPI-DSI | 更高带宽,支持高分辨率、高刷新率大屏 |
[LCD接口对比]
你的屏幕使用的是 SPI 接口,这是目前小尺寸低分辨率屏幕中最主流的选择:占用引脚少、驱动简单、成本低。
四、SPI 通信协议详解
SPI(Serial Peripheral Interface,串行外设接口)是一种主从式同步串行通信协议,由单片机(主机)主动发起通信,屏幕(从机)被动接收。
你的屏幕的 8 个引脚说明
| 引脚名 | 功能 |
|---|---|
| VCC | 电源正极(3.3V) |
| GND | 电源负极 |
| CS | 片选信号,低电平时选中屏幕 |
| SCK(SCL) | 时钟信号,同步数据传输节拍 |
| SDA(MOSI) | 数据线,单片机发数据给屏幕 |
| DC(RS) | 数据/命令选择线,低电平=命令,高电平=数据 |
| RST | 复位引脚,初始化时使用 |
| BL | 背光控制 |
典型的 SPI LCD 接线示意如下:

关键理解:DC 引脚是 SPI LCD 的核心设计——单片机通过它告诉屏幕"我现在发的是控制命令,还是要显示的像素数据"。
五、单片机显示数据的完整流程
以 ESP32 + ST7789V2 为例,显示一张图片的过程分三步:
第一步:初始化 SPI 总线
spi_bus_config_t buscfg = {
.sclk_io_num = PIN_NUM_CLK, // 时钟引脚
.mosi_io_num = PIN_NUM_MOSI, // 数据输出引脚
.miso_io_num = -1, // 小屏幕通常不需要读取数据
.quadwp_io_num = -1,
.quadhd_io_num = -1,
.max_transfer_sz = 240 * 320 * 2, // 最大传输字节数
};
spi_bus_initialize(SPI2_HOST, &buscfg, SPI_DMA_CH_AUTO);第二步:挂载 LCD 面板驱动(ST7789)
esp_lcd_panel_io_spi_config_t io_config = {
.dc_gpio_num = PIN_NUM_DC, // DC 引脚
.cs_gpio_num = PIN_NUM_CS, // CS 引脚
.pclk_hz = 40 * 1000 * 1000, // SPI 时钟频率 40MHz
.spi_mode = 0,
.trans_queue_depth = 10,
};
esp_lcd_new_panel_io_spi(SPI2_HOST, &io_config, &io_handle);
esp_lcd_panel_dev_config_t panel_config = {
.reset_gpio_num = PIN_NUM_RST,
.bits_per_pixel = 16, // RGB565 色彩格式
};
esp_lcd_new_panel_st7789(io_handle, &panel_config, &panel_handle);第三步:初始化并显示
esp_lcd_panel_reset(panel_handle); // 复位屏幕
esp_lcd_panel_init(panel_handle); // 发送初始化命令序列
esp_lcd_panel_disp_on_off(panel_handle, true); // 开启显示
// 将像素数据写入指定区域
esp_lcd_panel_draw_bitmap(panel_handle, x_start, y_start, x_end, y_end, color_data);六、一句话总结整个过程
单片机通过 SPI 协议,用少量引脚向 ST7789V2 驱动芯片发送"初始化命令"和"像素颜色数据",驱动芯片再控制 240×320 个液晶像素点的电压,配合背光,最终在屏幕上呈现出你想要显示的内容。
七、各接口带宽对比(为什么你的屏用 SPI)
| 接口类型 | 数据位宽 | 带宽 | 适用场景 |
|---|---|---|---|
| SPI | 1位 | 最小 | 小尺寸低分辨率屏(如你的240×320) |
| QSPI | 4位 | 较小 | 中等分辨率 |
| I80 | 8/16位 | 较大 | 中高分辨率 |
| RGB | 8~24位 | 较大 | 高分辨率 |
| MIPI-DSI | 1~4 Lane | 最大 | 手机级高分辨率高刷新率 |
[接口参数对比]
你的 2.0寸 240×320 屏幕,SPI 接口完全够用,而且驱动简单,非常适合入门学习!
Two 单片机如何通过屏幕显示数据(内容)?
1. 多色的LED灯珠(拼成大屏幕)
LED广告大屏
LED广告大屏组件
2. OLED 单色的自发光显示屏
OLED单色显示屏模块
3. LCD 显示屏(需要背光把颜色投影出来)
LCD与OLED结构图对比
LCD结构图
LCD显示屏模块
