我们重视您的隐私
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。
华凌拥有丰富的字符型液晶显示模块标准产品,依据显示形式提供 WH0802、WH1202、WH1601、WH1602、WH1604、WH2002、WH2004、WH2402、WH4002 等系列标准品。客户可通过最少数量的控制引脚实现显示功能,使 MCU 的选择更加灵活方便。市场上常见的字符型液晶显示模块(Character LCD Module),若需要使用 I2C 接口,通常会在模块上额外增加一块 I2C 接口转接板。除了会增加 LCM 厚度外,生产制造过程中也会增加额外工序,进而提高制造复杂度并影响产品良率,如图 1 所示。
图1:市场上常见的字符型液晶显示模块,需要额外增加 I2C 转接板。
图2:华凌 WH1602 字符型液晶显示模块,无需额外转接板即可直接使用 I2C、SPI 接口进行控制。
以下将介绍华凌字符型液晶显示模块,在无需额外转接板的情况下,搭配 Arduino Uno 开发板即可直接通过不同通信接口控制字符型液晶显示模块。
以上三款 LCM 内置 RW1063 LCD 控制器,支持 I2C、SPI 两种串行接口以及 6800 并行接口。
备注:关于显示接口的详细说明,请参考 认识显示接口
| 编号 | 引脚名称 | 描述 |
|---|---|---|
| No.1 | Vss | 电源负极输入引脚(接地)。 |
| No.2 | Vdd | 电源正极输入引脚(5V)。 |
| No.3 | V0 | 对比度调节引脚。 |
| No.4 | RS | 命令/数据选择线。 |
| No.5 | RW | 仅用于 6800 8/4bit 接口,为读写选择线。 |
| No.6 | E | 仅用于 6800 8/4bit 接口,为使能控制线。 |
| No.7 | DB0/SA0 | 6800 8bit 接口时为数据线位元 0。 I2C 接口时为 SA0 地址设定线。 |
| No.8 | DB1/SA1 | 6800 8bit 接口时为数据线位元 1。 I2C 接口时为 SA1 地址设定线。 |
| No.9 | DB2 | 仅用于 6800 8bit 接口,为数据线位元 2。 |
| No.10 | DB3 | 仅用于 6800 8bit 接口,为数据线位元 3。 |
| No.11 | DB4 | 仅用于 6800 8/4bit 接口,为数据线位元 4。 |
| No.12 | DB5/CSB/CSB | 6800 8/4bit 接口时为数据线位元 5。 I2C 和 SPI 接口时为 CSB 芯片使能选择线。 |
| No.13 | DB6/SDA/SCLK | 6800 8/4bit 接口时为数据线位元 6。 I2C 接口时为 SDA 数据线。 SPI 接口时为 SCLK 时钟控制线。 |
| No.14 | DB7/SCL/SID | 6800 8/4bit 接口时为数据线位元 7。 I2C 接口时为 SCL 时钟控制线。 SPI 接口时为 SID 数据线。 |
| No.15 | A+ | 背光电源正极输入引脚。 |
| No.16 | K- | 背光电源负极输入引脚。 |
关于上表中的 V0,此处使用 20kΩ 可调电阻调节字符显示的对比度。如果测试时无法看清文字,或持续显示背景阴影画面,可通过调整该可调电阻来设定适合的对比度。
V0 可调电阻连接方式如下图 3 所示:

如图4所示,LCM 四种通信接口(I2C、SPI、6800 8bit/4bit)连接 Arduino Uno 的方式。通过比较可以发现,I2C 和 SPI 接口仅需要较少数量的 GPIO 引脚即可控制字符型液晶显示模块。
其中,I2C 接口的连接方式,由于 Arduino Uno 的 I2C 引脚内部已提供上拉电阻,因此无需额外在 SDA 和 SCL 引脚连接上拉电阻。若用户在程序中关闭内部上拉电阻,则必须自行外接上拉电阻。
(a) 采用 I2C 接口的连接方式

(b) 采用 SPI 接口的连接方式

(c) 采用 6800-4bit 接口的连接方式

(d) 采用 6800-8bit 接口的连接方式

图4:LCM 四种通信接口连接 Arduino Uno 的方式。
并不是每种通信接口都支持 LCM 完整的指令集。采用 SPI 接口时,由于没有 RW 控制线和 MISO 引脚,因此不支持读取指令。写入操作时,通过 RS 控制线判断当前写入的是命令数据还是显示数据。
在 I2C 接口中,同样没有 RW 控制线,因此也不支持读取指令。由于没有 RS 控制线,在写入命令数据或显示数据前,需要先发送命令控制码(A0=0)或数据控制码(A0=1),以判断下一个发送的字节属于命令数据还是显示数据。
如图5和图6所示,为通过 SPI 接口控制 LCM 的时序图。用户可以观察到,LCM 所采用的 SPI 并非一般 MCU 所提供的标准 SPI 接口,而是需要额外增加一条 RS 信号线,用于判断当前发送的字节是命令数据还是显示数据。数据线(SID)的位(BIT7~BIT0)在时钟线(SCLK)为低电平时变化,并在时钟线(SCLK)为高电平时读取。
图5:SPI 写入命令的时序。
图6:SPI 写入数据的时序。
如图7和图8所示,为通过 I2C 接口控制 LCM 的时序图。除晶片选择线(CSB)外,I2C 接口控制方式为每次发送三个字节,以写入一笔命令数据或显示数据。其中,第二个字节中的 A0 位将决定第三个字节属于命令数据还是显示数据。
图7:I2C 写入命令的时序。
图8:I2C 写入数据的时序。
根据所使用的液晶显示模块修改程序设置后,即可直接编译并使用。
步骤一:设置 LCM 单行最大字符数。
例如以下设置单行最多显示 16 个字符。

步骤二:设置 LCM 最大行数。
例如以下设置 LCM 共有 2 行。

步骤三:设置 LCM 使用的通信接口。
例如以下设置使用 I2C 接口。

步骤四:编译并上传程序至 Arduino Uno 开发板。
如图9所示,为三款 LCM 显示画面的示意图。
当显示对比度出现偏淡或偏深时,可调整 V0 引脚的可调电阻至适合的对比度,如图10所示。
| (a) 对比度偏淡,仅能看到浅色字符 | (b) 对比度适中 | (c) 对比度偏深,每个字符出现明显残影 |
|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
| 图9:三款 LCM 显示画面示意图。 | ||

图10:V0 引脚可调节。
如需获取完整程序代码,请联系我们。
通过点击「允许所有 Cookie」,代表您同意在您的设备上存储 Cookie 以增强网站浏览体验、分析网站使用情况并协助我们的营销和网站效能优化工作。您可以在我们的隐私权政策中找到有关于此的更多信息。