学物联网,来万物简单IoT物联网!!
一、产品简介
LCD1602 字符型液晶显示模块是专门用于显示字母、数字、符号等的点阵型液晶显示模块。分4位和8位数据传输方式。提供5x7点阵+游标的显示模式。提供显示数据缓冲区 DDRAM、字符发生器CGROM和字符发生器CGRAM,可以使用CGRAM来存储自己定义的最多8个5x8点阵的图形字符的字模数据。提供了丰富的指令设置:清显示;游标回原点;显示开/关;游标开/关;显示字符闪烁;游标移位;显示移位等。提供内部上电自动复位电路,当外加电源电压超过+4.5V时,自动对模块进行初始化操作,将模块设置为默认的显示工作状态。
引脚定义:
- VSS:电源地
- VDD:电源+5V
- VO:液晶显示偏压,接电位计VO
- RS:数据/命令选择
- RW:读/写选择
- E:使能信号,用于数据传输
- D0-D3:数据,暂未用
- D4-D7:数据,接入 GPIO
- A:背光源正极,接电源+5V
- S:背光源负极,接电源地
二、技术参数
- 显示容量:16×2个字符
- 芯片工作电压:4.5—5.5V
- 工作电流:2.0mA(5.0V)
- 模块最佳工作电压:5.0V
- 字符尺寸:2.95×4.35(W×H)mm
三、软件接口
LCD1602() - 创建 LCD1602 驱动对象
- 函数原型:
lcd1602Obj = LCD1602(RS, RW, E, D4, D5, D6, D7)
- 参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
RS | GPIO | 是 | 传入GPIO对象 |
RW | GPIO | 是 | 传入GPIO对象 |
E | GPIO | 是 | 传入GPIO对象 |
D4 | GPIO | 是 | 传入GPIO对象 |
D5 | GPIO | 是 | 传入GPIO对象 |
D6 | GPIO | 是 | 传入GPIO对象 |
D7 | GPIO | 是 | 传入GPIO对象 |
- 返回值:
LCD1602 对象成功,返回 LCD1602 对象;LCD1602 对象创建失败,抛出 Exception - 示例代码:
from machine import Pin
import lcd1602
# 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)
print('GPIO init done')
lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
- 输出:
GPIO init begin
GPIO init done
LCD inited!
displayString(row, col, text) - 向 LCD 屏幕指定行列打印字符
- 函数功能:
先设置光标到指定行列偏移位置,然后打印字符,其中行列偏移为字符偏移而非点阵偏移,共2行16列 - 函数原型:
drv.displayString(1, 0, ‘Hello’)
- 参数说明:
- row 表示行偏移,范围是 0-1 表示 行1-行2
- col 表示列偏移,范围是 0-15 表示 列1-列16
- text 待打印的字符串
- 返回值:
成功打印的字符数量 - 示例:
# 在第二行,第一列打印字符 Hello
from machine import Pin
import lcd1602
# 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)
print('GPIO init done')
lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
lcd1602Obj.displayString(1, 0, 'Hello')
print('LCD printed')
- 输出:
GPIO init begin
GPIO init done
LCD inited!
LCD printed
四、接口案例
- 代码:
# Python代码
from machine import Pin
import lcd1602
if __name__ == '__main__':
# 初始化 LCD 的各个 GPIO 管脚
print('GPIO init begin')
# 按照 board.json 中名为 "RS" 的设备节点的配置参数,如下以此类推
gpioRSObj = Pin(2,Pin.OUT)
gpioRWObj = Pin(4,Pin.OUT)
gpioEObj = Pin(16,Pin.OUT)
gpioD4Obj = Pin(17,Pin.OUT)
gpioD5Obj = Pin(18,Pin.OUT)
gpioD6Obj = Pin(19,Pin.OUT)
gpioD7Obj = Pin(21,Pin.OUT)
print('GPIO init done')
lcd1602Obj = lcd1602.LCD1602(gpioRSObj, gpioRWObj, gpioEObj, gpioD5Obj, gpioD5Obj, gpioD5Obj, gpioD5Obj)
print('LCD inited!')
lcd1602Obj.displayString(1, 0, 'Hello')
print('LCD printed')
- 输出:
...
GPIO init begin
GPIO init done
LCD inited!
LCD printed
...
五、通信协议
主控芯片和 LCD1602 控制器之间通信为 GPIO 通讯,分为初始化阶段以及指令通讯阶段。
- 初始化阶段
- 通过三次发送 0x03,向 LCD 控制器发起初始化请求,每次间隔不同;
- 初始化后立即设置数据/命令传输模式为 4bits 模式;
- 然后进行功能、显示模式、打印项模式的设置,均为指令通讯方式;
- 指令通讯阶段
- 通过 RS=0,选择 LCD 控制器的指令寄存器,随后通过D4-D7发送指令内容,可实现:清显示;游标回原点;显示开/关;游标开/关;显示字符闪烁;游标移位;显示移位等。
- 通过 RS=1,选择 LCD 控制器的数据寄存器,随后通过D4-D7发送数据内容,可实现向 LCD 屏幕打印字符的功能;
- 4线传输机制
- 指令和数据每次传输均为 8bits,因此分为两次传输,每次传输4bits
- 传输时序:
- RS=0/1 先稳定寄存器显示选择
- 因为目前我们仅用到写,因此 RW=0 同时保持拉低
- 随即准备数据到 D4-D7 管脚,准备通知 LCD 读取
- 控制 E 管脚产生下降沿,其中高电平保持需要>450ns
- 因为 LCD 控制器获得下降沿时需要读取数据并执行指令,因此再保持一个命令执行的时间稳定,时间为 40us
六、工作原理
液晶显示屏从 LCD 控制器引出 16 个管脚用于控制指令/数据输入,通过 GPIO 控制。
- VSS 为地电源
- VDD 接5V正电源
- VO 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”现象,使用时可以通过一个10k欧姆的电位器调整其对比度。
- RS 为寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
- RW 为读/写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或显示地址;当RS为低电平,RW为高电平时,可以读忙信号;当RS为高电平,RW为低电平时,可以写入数据。
- E 端为使能端,当E端由高电平跳变为低电平时,液晶模块读取 D0-D7 数据执行命令。
- D0-D7 为8位双向数据线。
- A 背光源正极。
- K 背光源负极。
参考文献及购买链接
[1] LCD1602电气手册
[2] LCD1602系列
[3] LCD1602商品购买链接