物联网AI MicroPython传感器学习 之 LCD1602液晶屏-CSDN博客
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
学物联网来万物简单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.0mA5.0V
- 模块最佳工作电压5.0V
- 字符尺寸2.95×4.35W×Hmm
三、软件接口
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商品购买链接
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |