4.3.13 I2C LCD1602模块#

4.3.13.1 简介#

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

4.3.13.2 元件知识#

Img

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

Img

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

Img

本模块使用的IC芯片为PCF8574T (PCF8574AT),其默认I2C地址为0x27(0x3F)。

在I2C LCD1602模块的背面有一个金属电位器。你可以用一字螺丝刀转动电位器来调整对比度。

Img

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

原理图:

Img

参数:

  • 显示像素: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。

Img

对比度:

背面的电位器用于调整对比度(最亮的白色和最暗的黑色之间的亮度比)。

电位器 :用于调整对比度(显示文本的清晰度),对比度在顺时针方向上增加,在逆时针方向上减少。

Img

I2C串行通信:

I2C通信协议是Inter-Integrated Circuit(IIC)的缩写,也叫作两线制或TWI(Two-Wire Interface),是一种通用的主从式的两线总线通信协议,它是由Philips Semiconductor公司开发的(现在被美国NXP半导体公司收购)。

其最大的优点是只需要两根线就可以完成数据的传输,对于系统线路的繁琐也减少了很多,这种总线可以并行联结127个节点,并且支持多主机,从机一般不需要外接电源,因为I2C总线可以把电源传输到从机。如下图:

Img

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模块拆下来又重新组装和接线,这里再次提供接线图,是为了方便您编写代码!

Img

4.3.13.4 实验代码#

⚠️ 特别注意: 上传代码前要添加库文件,库文件存放在Arduino_库文件文件夹中名为LiquidCrystal_I2C.zip

代码文件在Arduino_代码文件夹中,代码文件为4_3_13_LCD1602,如下图所示:

Img

鼠标双击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),然后单击按钮Img上传代码。上传代码成功后,I2C LCD1602模块的显示屏会打开背光,并显示两行文字 “HELLO WORLD 0” 和 “HELLO WORLD 1”.

Img

⚠️ 注意: 如果代码和接线正确,但 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 为底数)。