更简便容易使用之STN液晶显示器控制接口
华凌拥有相当丰富的字符型液晶显示器模块标准品,依据显示型式有WH0802、WH1202、WH1601、WH1602、WH1604、WH2002、WH2004、WH2402、WH4002等系列的标准品。客户可以用最少的控制脚来达成显示目的,可以让客户端更方便容易选择MCU使用。市面上常见的字符型液晶显示器模块 (Character LCD Module),如果要使用I2C接口时,通常会在模块上外加一个I2C接口转接电路板,除了LCM的厚度增加,生产制造也会多几道工序,进而导致良率下降等风险。如图1所示
图1: T为市面上常见外加一块 I2C 转接电路板的字符型液晶显示模块。 | 图2: 为华凌 WH1602 的字符型液晶显示器模块,背面不需要转接电路板就可以直接使用 I2C、SPI 接口来控制。 |
以下介绍华凌字符型液晶显示器模块,在不需要额外转接电路板的情况下,搭配开发板 Arduino Uno就可以直接使用不同的通讯接口控制字符型液晶显示器模块。
- Winstar WH1602 LCM: 每行可显示16个字,共可显示2行字。
- Winstar WH2002 LCM: 每行可显示20个字,共可显示2行字。
- Winstar WH2004 LCM: 每行可显示20个字,共可显示4行字。
这三款LCM内部皆采用RW1063这个LCD控制器 (LCD controller),它提供了I2C、SPI两种串行接口和一个6800并列接口(Parallel interface)。
识别 LCM 的脚位
表1 : LCM的脚位说明编号 | 脚位名称 | 说明 |
---|---|---|
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 Ohm 的可变电阻来调整字符的对比,如果测试使用时,看不文字或者持续显示底影的画面,可以转动这个可变电阻调整对比。
V0 可变电阻连接方式,如下图3所示:
图3:VR可变电阻连接方式示意图。 |
LCM 和开发板 Arduino Uno 接线方式
如图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的指令
并不是每个通讯接口都可以使用LCM全部的指令集;采用SPI 接口时,没有RW控制线和MISO脚位,因此,不支持读取的指令。写入方面是透过RS控制线决定是写入命令数据或写入显示数据。
在I2C接口,同样没有RW控制线,所以,也不支持读取的指令。写入方面,没有RS控制线,在写入命令数据或显示数据前,要先发送命令句柄(A0=0),或数据控制码(A0=1),来决定下一个发送的字节是命令数据,还是显示数据。
SPI和I2C界面的时序
两张时序图,如图5及图6所示.是以 SPI 接口方式控制 LCM 的时序图。使用者可以观察到 LCM 采用的 SPI ,并非一般 MCU 所提供的典型 SPI 接口,它需要额外一条 RS 信号线,来决定当前送出的字节是命令?还是资料?数据线(SID)的位(BIT7~BIT0)数据,在频率线(SCLK)为低准位时变动;位(BIT7~BIT0)数据,在频率线(SCLK)为高准位时抓取(BIT7~BIT0)。
图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 脚位可调变。
如果需要索取完整的程序代码,请联络我们。