1. 项目概述
HS12864-15C是一款128×64点阵的图形液晶显示模块,采用ST7920控制器芯片。这种LCD在嵌入式系统中广泛应用,能够显示图形、文字和简单动画。与常见的16×2字符型LCD相比,它的显示能力更强大,但驱动复杂度也更高。
我在最近的一个智能家居控制面板项目中使用了这款LCD,需要实现菜单界面、状态显示和简单的动画效果。通过STM32的SPI接口驱动它,既能节省IO口资源,又能保证刷新速率。下面分享我的完整实现过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件连接与原理
2.1 模块引脚说明
HS12864-15C的20引脚定义如下:
| 引脚 | 名称 | 说明 |
|---|---|---|
| 1 | GND | 地线 |
| 2 | VCC | 5V电源 |
| 3 | VO | 对比度调节 |
| 4 | RS | 寄存器选择(串行模式时作为CS) |
| 5 | RW | 读写控制(串行模式时作为SID) |
| 6 | E | 使能(串行模式时作为SCLK) |
| 7-14 | D0-D7 | 数据线(并行模式使用) |
| 15 | PSB | 接口选择(0:串行,1:并行) |
| 16 | NC | 空脚 |
| 17 | RST | 复位(低电平有效) |
| 18 | VOUT | LCD电压输出 |
| 19 | BLA | 背光阳极 |
| 20 | BLK | 背光阴极 |
2.2 ST7920控制器特点
ST7920支持三种通信方式:
- 8位并行模式
- 4位并行模式
- 串行模式(SPI)
在资源紧张的STM32项目中,我推荐使用串行模式,只需3个IO口(CS, SCLK, SID)即可完成控制,大大节省硬件资源。
2.3 与STM32的连接
我使用的是STM32F103C8T6最小系统板,连接方式如下:
| STM32引脚 | LCD引脚 | 功能 |
|---|---|---|
| PA4 | RS(4) | 片选CS |
| PA5 | E(6) | 时钟SCLK |
| PA7 | RW(5) | 数据SID |
| 3.3V | BLA(19) | 背光 |
| GND | BLK(20) | 背光地 |
| 5V | VCC(2) | 电源 |
| GND | GND(1) | 地线 |
| PA6 | RST(17) | 复位 |
| 电位器中点 | VO(3) | 对比度调节 |
注意:PSB(15)引脚必须接地选择串行模式。
3. 软件驱动实现
3.1 初始化序列
ST7920的初始化有严格的时序要求,以下是正确的初始化步骤:
c复制void ST7920_Init(void)
{
// 硬件复位
LCD_RST_LOW();
DelayMs(50);
LCD_RST_HIGH();
DelayMs(100);
// 功能设置
ST7920_SendCmd(0x30); // 基本指令集
DelayUs(100);
ST7920_SendCmd(0x30); // 重复发送确保稳定
DelayUs(40);
// 显示控制
ST7920_SendCmd(0x08); // 关闭显示
DelayUs(100);
ST7920_SendCmd
