4.3.13 I2C LCD1602模块#
4.3.13.1 简介#
本教程将为您详细介绍I2C LCD1602模块的使用方法和应用技巧,该显示屏采用PCF8574T驱动芯片,背光 (蓝色背景和白色背光)。教程内容包括I2C LCD1602模块的工作原理、引脚功能、电路连接方法以及如何通过微控制器(如ESP32)控制显示内容。您将学习如何编写代码来使I2C LCD1602模块显示数字、字母等。无论您是电子初学者还是有经验的开发者,本教程都将帮助您掌握I2C LCD1602模块的应用,为您的项目增添清晰、生动的视觉显示功能。
4.3.13.2 元件知识#

LCD1602显示屏:显示屏有LCD 1602液晶显示屏和I2C LCD1602模块。但是我们在这个项目中使用的是一个I2C LCD1602模块。LCD 1602显示屏可以显示16列2行字符。它能够显示数字、字母、符号、ASCII码等。如下所示是一个单色LCD1602显示屏(在工作时需要占用控制板的7个IO口)及其电路引脚图:

I2C LCD1602模块集成了I2C接口,连接的串行输入&并行输出给LCD1602显示屏模块。这使得我们只要使用4条线路就可以来操作LCD1602。

本模块使用的IC芯片为PCF8574T (PCF8574AT),其默认I2C地址为0x27(0x3F)。
在I2C LCD1602模块的背面有一个金属电位器。你可以用一字螺丝刀转动电位器来调整对比度。

⚠️ 请注意: 当你旋转电位器时,屏幕将变得更亮或更暗,适当的角度将使字体更清晰。
原理图:

参数:
显示像素:16 * 2 字符
芯片工作电压:4.5 ~ 5.5V
工作电流:2.0mA (5.0V)
模块最佳工作电压:5.0V
I2C 地址:0x27
背光 (蓝色背景和白色背光)
背后的接线引脚分别为GND、VCC、SDA、SCL(SDA和SCL分别为IIC通讯的数据线和时钟线)。
I2C 地址:
默认地址基本上是 0x27,在少数情况下可能是 0x3F。
以默认地址 0x27 为例,可以通过短接 A0/A1/A2 焊盘来修改设备地址; 在默认状态下,A0/A1/A2 为 1,如果焊盘短路,则 A0/A1/A2 为 0。

对比度:
背面的电位器用于调整对比度(最亮的白色和最暗的黑色之间的亮度比)。
电位器 :用于调整对比度(显示文本的清晰度),对比度在顺时针方向上增加,在逆时针方向上减少。

I2C串行通信:
I2C通信协议是Inter-Integrated Circuit(IIC)的缩写,也叫作两线制或TWI(Two-Wire Interface),是一种通用的主从式的两线总线通信协议,它是由Philips Semiconductor公司开发的(现在被美国NXP半导体公司收购)。
其最大的优点是只需要两根线就可以完成数据的传输,对于系统线路的繁琐也减少了很多,这种总线可以并行联结127个节点,并且支持多主机,从机一般不需要外接电源,因为I2C总线可以把电源传输到从机。如下图:

I2C总线的数据传输采用8位数据传输的方式,通常一个字节的数据传输是由9个时钟信号组成,8个时钟信号传输数据,最后一个时钟信号用于传输结束的标志。同时,I2C总线也支持多字节的数据传输,不断重复上述过程,即可完成多字节的数据传输。
I2C协议的基本组成部分包括以下内容:
起始信号:在发送数据之前,发送方必须发送起始信号,以告知接收方,要发送数据了。
地址码:地址码用于告知接收方,要发送的数据是给谁的。
数据:数据按照位传输,每次传输一个字节的数据。
停止信号:发送完数据后,发送方必须发送停止信号,以告知接收方,数据发送完毕。
Arduino提供了一个名为Wire.h的I2C协议集成库,可以通过调用其函数实现I2C通信,从而实现与I2C/TWI设备的通信。
具体库介绍参考官网链接: https://www.arduino.cc/reference/en/language/functions/communication/wire/
4.3.13.3 接线图#
I2C LCD1602模块连接到 BUS I2C(SDA连接(SDA:IO21)、SCL连接(SCL:IO22)
⚠️ 特别注意:智慧农场已经组装好了,这里不需要把I2C LCD1602模块拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

4.3.13.4 实验代码#
⚠️ 特别注意: 上传代码前要添加库文件,库文件存放在Arduino_库文件文件夹中名为LiquidCrystal_I2C.zip。
代码文件在Arduino_代码文件夹中,代码文件为4_3_13_LCD1602,如下图所示:

鼠标双击4_3_13_LCD1602.ino即可在Arduino IDE中打开。
/*
* 文件名 : LCD1602
* 功能 : LCD1602显示字符串等
* 编译IDE:ARDUINO 2.3.6
* 作者 : https://www.keyesrobot.cn/
*/
#include <LiquidCrystal_I2C.h>
//初始化LCD1602,其中0x27为I2C地址
//I2C接口:SDA引脚接SDA(IO21), SCL引脚接SCL(IO22)
LiquidCrystal_I2C lcd(0x27,16,2);
void setup() {
//LCD初始化
lcd.init();
// 打开/关闭(可选)背光
lcd.backlight();
//lcd.noBacklight();
//设置位置
lcd.setCursor(0, 0);
//显示
lcd.print("HELLO WORLD 0");
lcd.setCursor(0, 1);
lcd.print("HELLO WORLD 1");
//清空显示
// lcd.clear();
}
void loop() {
}
4.3.13.5 实验结果#
按照接线图接好线,外接电源,选择好正确的开发板板型(ESP32 Dev Module)和 适当的串口端口(COMxx),然后单击按钮
上传代码。上传代码成功后,I2C LCD1602模块的显示屏会打开背光,并显示两行文字 “HELLO WORLD 0” 和 “HELLO WORLD 1”.

⚠️ 注意: 如果代码和接线正确,但 LCD 仍然无法显示任何内容,则可以调整背面的电位器以增加对比度。
4.3.13.6 代码说明#
(1). 通过调用库LiquidCrystal_I2C.h,您可以轻松驱动 LCD 1602。
#include <LiquidCrystal_I2C.h>
库功能:
创建
LiquidCrystal_I2C类,该类表示连接到开发板的特定 LCD 1602。LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows)
lcd_Addr:LCD 1602 的地址默认为 0x27。lcd_cols:LCD 1602有 16 列。lcd_rows:LCD 1602 有 2 行。
(2). 初始化 LCD 1602。
lcd.init()
(3). 打开(可选)背光灯。
lcd.backlight()
(4). 关闭(可选)背光。
lcd.noBacklight()
(5). 打开 LCD 1602 显示屏。
lcd.display()
(6). 快速关闭 LCD 1602 显示屏。
lcd.nodisplay()
(7). 清除显示,将光标位置设置为零。
lcd.clear()
(8). 将光标位置设置为 X行、X列。
lcd.setCursor(uint8_t col,uint8_t row)
(9). 将文本打印到 LCD 1602 显示屏上。
lcd.print(data,BASE)
data:要打印的数据(char、byte、int、long 或 string)。BASE(可选):打印数字的底数。BIN: 对于二进制 (以 2 为底数)DEC: 对于十进制(以 10 为底数)OCT: 对于八进制(以 8 为底数)HEX: 对于十六进制(以 16 为底数)。