LCD1602介绍
LCD1602是一种工业字符型液晶,能够同时显示16x02即32个字符号。LCD1602液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,即可以显示出图形。
LCD1602连接方式
由图可知,LCD1602由很多引脚,使用单片机驱动LCD1602需要很多的IO引脚,为了减少IO引脚的使用数量,采用IIC通信减少IO口的使用数量
直接控制方式
LCD1602的16个接口与单片机IO相连,其中8位数据总线D0-D7,和RS、R/W、EN三个控制端口,工作电压为5V,并且带有字符对比度调节V0和背光源AK。
序号 | 符号 | 功能 | 序号 | 符号 | 功能 |
---|---|---|---|---|---|
1 | VSS | 电源地 | 9 | D2 | 数据 |
2 | VDD | 电源正极 | 10 | D3 | 数据 |
3 | V0 | 液晶显示偏压 | 11 | D4 | 数据 |
4 | RS | 数据/命令选择 | 12 | D5 | 数据 |
5 | R/W | 读/写选择 | 13 | D6 | 数据 |
6 | EN | 使能信号 | 14 | D7 | 数据 |
7 | D0 | 数据 | 15 | A | 背光源正极 |
8 | D1 | 数据 | 16 | K | 背光源负极 |
引脚1(VSS/GND):地引脚
引脚2(VDD/VCC):电源引脚
引脚3(V0):液晶显示器对比度引脚,接正电源时对比度最弱,接地时对比度最高,使用时可以通过外接一个电位器调整其对比度。
引脚4(RS):寄存器选择脚,高电平时选择数据寄存器、低电平时选择指令寄存器。
引脚5(R/W):读(read)/写(write)信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或显示地址;当RS为低电平,R/W为高电平时,可以读忙信号;当RS为高电平,R/W为低电平时,可以写入数据。
引脚6(E):使能端,当E端由高电平跳变为低电平时,液晶模块执行命令。
引脚7-14(D0~D7): 8位双向数据线 用于单片机向1602写入数据和从1602读取数据
引脚15(BLA):背光源正极
引脚16(BLK):背光源负极
知道引脚所对应的意义即可对应datasheet的时序写驱动程序,由于时序复杂,本篇文章以第二种,IIC通信的方式驱动LCD1602
间接控制方式
间接控制方式也称为四线制工作方式,实际上给1602屏增加一块IIC驱动版,将1602的16个管脚连接到由PCF8574T作为主要芯片的驱动版上,将接口转换为IIC再连接开发板
符号 | 功能 |
---|---|
VCC | 电源5V |
GND | 接地 |
SDA | 数据线 |
SCK | 时钟线 |
实验内容
使用ESP32驱动LCD1602
准备材料
ESP32开发版,LCD1602A液晶屏幕,杜邦线
硬件连接
LCD1602接5V电源,GND连接GND,SCL接D22,SDA接D21,因为GPIO21/22为硬件IIC接口对应的SDA和SCL。
软件驱动
软件平台
软件选择VScode+PlatformIO,选择Espressif ESP32 Dev Module,Arduino框架
LCD1602库安装
选择Libraries,搜索LiquidCrystal_I2C,点击Add to Project,选择添加的项目
LiquidCrystal_I2C库函数介绍
在正式程序编写前需要了解一下LiquidCrystal_I2C库的基本使用,下图为LiquidCrystal_I2C库常用的函数。
程序编写
简单的使用
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
//构造LCD对象,设置地址,列数,行数
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// 初始化lcd对象
lcd.init();
// 开启背光
lcd.backlight();
// 打印内容
lcd.printf("Hello Word!");
// 设置光标开始的位置第2行第一列
lcd.setCursor(0,1);
// 打印内容
lcd.print("Are you ok");
}
void loop() {
}
此案例只是在液晶屏展示打印内容,注意,打印的字符数量每行小于等于16个
打印从串口的数据
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
//构造LCD对象,设置地址,列数,行数
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
// 初始化lcd对象
lcd.init();
// 开启背光
lcd.backlight();
// 设置串口波特率
Serial.begin(9600);
}
void loop() {
// 检测串口输入内容
if(Serial.available()){
// 等待一段时间,等待串口输入完毕
delay(20);
// 清除上次的展示内容
lcd.clear();
// 打印内容
lcd.printf("You input data!");
// 设置光标开始的位置第2行第一列
lcd.setCursor(0,1);
// 检测串口缓冲区数据,并展示到LCD屏幕上
while(Serial.available()){
// 打印内容
lcd.write(Serial.read());
}
}
}
从串口助手输入数据,串口检测到输入的内容,把内容在液晶屏上展示,后续使用熟练可配合debug使用,在液晶屏打印断点内容
致谢
写的不好的地方,还请大家多多指教