### 6.3.13 I2C LCD1602模块

#### 6.3.13.1 简介

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

#### 6.3.13.2 元件知识

![Img](../media/lcd.png)

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

![Img](../media/lcd-1.png)

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

![Img](../media/lcd-2.png)

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

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

![Img](../media/lcd-3.png)

⚠️ **请注意：当你旋转电位器时，屏幕将变得更亮或更暗，适当的角度将使字体显示更清晰。我们提供的LCD1602模块出厂时已经调节好对比度，可以不需要去调节。**

**原理图：**

![Img](../media/lcd-4.png)

**参数：**

- 显示像素：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](../media/lcd-5.png)

**对比度：**

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

电位器 ：用于调整对比度（显示文本的清晰度），对比度在顺时针方向上增加，在逆时针方向上减少。

![Img](../media/lcd-6.png)

**I2C串行通信：**

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

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

![Img](../media/cou75.png)

I2C总线的数据传输采用8位数据传输的方式，通常一个字节的数据传输是由9个时钟信号组成，8个时钟信号传输数据，最后一个时钟信号用于传输结束的标志。同时，I2C总线也支持多字节的数据传输，不断重复上述过程，即可完成多字节的数据传输。

I2C协议的基本组成部分包括以下内容：

- 起始信号：在发送数据之前，发送方必须发送起始信号，以告知接收方，要发送数据了。

- 地址码：地址码用于告知接收方，要发送的数据是给谁的。

- 数据：数据按照位传输，每次传输一个字节的数据。

- 停止信号：发送完数据后，发送方必须发送停止信号，以告知接收方，数据发送完毕。

Arduino提供了一个名为Wire.h的I2C协议集成库，可以通过调用其函数实现I2C通信，从而实现与I2C/TWI设备的通信。

具体库介绍参考官网链接：
[https://www.arduino.cc/reference/en/language/functions/communication/wire/](https://www.arduino.cc/reference/en/language/functions/communication/wire/)

#### 6.3.13.3 接线图

- **IIC LCD 1602模块连接到 BUS I2C(SDA连接(SDA:IO21)、SCL连接(SCL:IO22))**

**⚠️特别注意：智慧农场已经组装好了，这里不需要把I2C LCD1602模块拆下来又重新组装和接线，这里再次提供接线图，是为了方便您编写代码！**

![Img](../media/couj72.png)

#### 6.3.13.4 实验代码

代码文件在`Mixly_代码`文件夹中，代码文件为`6_3_13_LCD1602.mix`，如下图所示：

![Img](../media/acouj-015.png)

单击 “**文件**” --> “**打开**”，然后选择保存代码的路径，选中代码文件打开即可，如下图所示：

![Img](../media/acouj-00.png)

![Img](../media/acouj-015-1.png)

**认识代码块**

① 这是初始化代码块，初始化代码块里面的内容只执行一次。

![Img](../media/initialize.png)

② 这是一些 I2C LCD 1602显示屏的相关代码块。

![Img](../media/lcd1-7.png)

初始化LCD显示屏的地址和管脚。

![Img](../media/lcd1-8.png)

设置LCD显示屏的开/关/有光标/无光标/闪烁/不闪烁/清屏/关闭背光/打开背光。

![Img](../media/lcd1-9.png)

LCD显示屏显示的内容。

![Img](../media/lcd1-10.png)

**组合代码块**

![Img](../media/Mixly-code15.png)

#### 6.3.13.5 实验结果

按照接线图接好线，外接电源，选择好正确的开发板板型（ESP32 Dev Module）和 适当的串口端口（COMxx），然后单击按钮![Img](../media/upload2.png)上传代码。上传代码成功后，IIC LCD 1602 显示屏会打开背光，并显示两行文字 “**HELLO WORLD 0**” 和 “**HELLO WORLD 1**” .  

![img](../media/cou78.png)

⚠️ **注意：** 如果代码和接线正确，但 LCD 仍然无法显示任何内容，则可以调整背面的电位器以增加对比度。