×

带Arduino Uno的I2C 16x2 LCD接口(仅4线)

消耗积分:0 | 格式:zip | 大小:0.97 MB | 2022-10-18

李鸿

分享资料个

描述

与 Arduino Uno 接口 I2C 16x2 LCD

在本文中,我将连接 16x2 I2C LCD 与 Arduino Uno。在我之前的文章中讨论了 16x2 LCD 与 Arduino Uno 的接口区别在于电线的数量。我们需要超过 12 根电线。但这里只使用 4 根线。如何 ?!!!!!!在我使用并行通信方法将 LCD 与 Arduino 连接之前。但现在我正在使用 I2C 通信。

这个怎么运作 ?

这里我使用了我之前文章中相同的 16X2 LCD。但另外将 I2C 模块连接到 16x2 LCD。它充当 LCD 和 MCU(此处为 Arduino)之间的中介。

在开始之前,您必须了解 I2C 串行接口适配器(I2C 模块)I2C 通信I2C LCD 的地址

I2C 通信

introduction-to-i2c-data-transmission-diagram-data-frame_0jawVJbo0r.png?auto=compress%2Cformat&w=740&h=555&fit=max
I2C 通信
 

I2C 是 Inter-IC 的缩写。它是一种BUS。这是飞利浦半导体设计的。I2C 是一种同步、多从机、多主机分组交换、单端串行总线。IE。多个芯片可以连接到同一总线。I2C 仅使用两条双向开集或开漏线,串行数据线(SDA)和串行时钟线(SCL),通过电阻上拉。使用的典型电压为 +5 V 或 +3.3 V,但允许使用其他电压的系统。有关 I2C 协议的更多信息,请单击此处

I2C 串行接口适配器

ic2_serial_interface_lcd_module_1_1_1_(1)_T2vWMivPjD.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
I2C 串行接口适配器
 

它也被称为 I2C 模块。它共有 20 个公插针。16 个引脚面向后侧,4 个引脚面向前侧。用于连接 16x2 LCD 的 16 个引脚,4 个引脚中的 2 个引脚是 SDA 和 SCL。SDA 是串行数据引脚,SCL 是时钟引脚。其余 2 个引脚用于电源(Vcc 和接地)。I2C 模块上有一个 POT。我们可以通过旋转这个 POT 来控制 LCD 显示屏的对比度。并且模块上固定有一个跳线。当我们移除跳线时,LCD 显示屏的背光将熄灭。

I2C LCD地址

在开始之前,我们需要了解 I2C 设备的寻址。每个可以连接到 MCU 的设备都有一个地址。我们需要知道这个地址才能与该特定设备进行通信。

您可以在 I2C 模块上看到三个焊盘。标记为 A0、A1 和 A2。这是地址选择器。即,每个焊盘具有一个上部分和一个下部分。如果上药水与下药水之间存在连接,则称为“已连接”,否则称为“未连接”。当 A0、A1、A2 处于“未连接”状态(A0 = 0、A1 = 0、A2 = 0)时,地址将为 0x27。默认情况下,A0、A1、A2 处于“未连接”状态。有时默认地址是0x3F。当我们只使用一个 LCD 时,无需更改 I2C 模块的地址。但是当我们使用多个 LCD 时,需要更改地址。因为两个或多个不同的设备不能与同一个地址通信。

i2c_adress_table_DZwgPNt9oR.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 

步骤1

如果您已经知道 LCD 的地址,请跳过此步骤 - 1 和步骤 -2

在某些情况下A0、A1、A2处于“未连接”状态,但地址不是0x27。我们无法与此地址通信。所以我们需要找到那个设备的原始地址。为此,我们需要使用“I2C 扫描仪”代码运行 Arduino。

I2C 扫描器代码

I2C Scanner 代码用于查找 I2C 设备的数量和 I2C 设备的地址。首先添加包含“Wire.h”库的头文件。然后在设置部分,通过“Wire.begin()”开始“Wire”库。然后通过“Serial.begin()”以 9600 的波特率启动串行监视器。接下来在循环部分,定义两个数据类型为“byte”的变量,分别命名为“error”和“address”。然后使用名为“Devices”的“Integer (int)”数据类型定义另一个变量。并将初始值设置为 0。接下来开始一个 for 循环,最小值为 1,最大值为 127。“地址”用作循环变量。接下来使用函数“Wire.beginTransmission()”输入要连接的地址。i2c_scanner 使用“Write. 然后仅当地址<16 时才将特定地址打印到串行监视器。这里我们以十六进制打印地址。打印指令为“Serial.print(address, HEX)”。并计算设备。然后仅当地址<16 时才将特定地址打印到串行监视器。这里我们以十六进制打印地址。打印指令为“Serial.print(address, HEX)”。并计算设备。完整的 I2C 扫描仪代码如下所示

#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int Devices;
Serial.println("Scanning...");
Devices = 0;
for(address = 1; address < 127; address++ )
{

Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println("  !");
Devices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (Devices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);          
}

将 I2C 扫描仪代码上传到 Arduino Uno。

第2步

如果您有 I2C LCD,请跳过此步骤。但如果您有 16x2 LCD 和 I2C 模块,请参阅将此模块连接到 LCD 的步骤。

联系

首先焊接 I2C 模块。I2C 模块上没有用于连接 16x2 LCD 的标签。所以在下面给出的图像的帮助下焊接它

i2clcd_1oCPuO9l9f.png?auto=compress%2Cformat&w=740&h=555&fit=max
16x2 LCD 上的 I2C 模块
 

焊接后将 I2C 模块连接到 Arduino Uno。

Arduino Uno I2C 模块

模拟引脚 4 - SDA

模拟引脚 5 - SCL

5V - Vcc

地 - 地

将 Arduino 连接到计算机。

接下来从 Arduino IDE 右上角的图标打开串行监视器。并将波特率设置为9600。请确保端口正确。然后您可以在串行监视器中看到 LCD 的地址,如下所示

i2c_lcd_(2)_pn4Y4HF7c5.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
 
最后我们找到I2C LCD的地址。那是 0x27

步骤 - 3

接下来我将在我们的 I2C LCD 上显示一个文本。

在此之前需要向 Arduino IDE 添加一个库。转到链接 并下载库 Arduino-LiquidCrystal-I2C-library。然后打开 Arduino IDE 并转到Sketch>Include Library> Add.ZIP Library 接下来选择下载的 ZIP 文件并单击打开。

第4步

接下来创建草图。首先,我包含标题“Wire.h”。该库有助于与 I2C 设备进行通信。然后包括“LiquidCrystal_I2C.h”以更好地与显示器通信。

#include  
#include 

步骤 - 5

接下来使用函数“LiquidCrystal_I2C lcd() 设置地址、列数和行数。地址为 0x27(使用 I2C Scanner Code 发现)。列数为 16,行数为 2。之后,我们可以使用“lcd”调用显示器。您也可以将多个 I2C LCD 与 Arduino Uno 一起使用。但为每个显示器设置不同的地址和变量。

LiquidCrystal_I2C lcd(0x27, 16, 2);

步骤 - 6

接下来对设置部分进行编码。首先使用函数“lcd.begin()”初始化显示。如果你有另一个显示器初始化它们。

lcd.begin();

步骤 - 7

接下来使用函数“lcd.backlight()”打开背光。

lcd.backlight();

步骤 - 8

接下来使用指令“lcd.clear()”清除 lcd。然后将光标设置到位置 (4, 0)。

lcd.clear();
lcd.setCursor(4,0);

步骤 - 9

现在 LCD 已准备好打印。光标位于第 4 列(从 0 开始计数)和第 0 行(从 0 开始计数)。然后通过函数“lcd.print()”打印消息“Hackster”。

lcd.print("Hackster");

然后将循环部分留空。

编程完成。将草图上传到 Arduino 并在 LCD 上查看消息。 完整的代码在本文的代码部分给出

请不要复制粘贴我的代码。尝试逐行理解代码并创建自己的草图。

您可以在这里加入我们的电报群或搜索 INNOVATION。对硬件或编程有任何疑问,请随时在我们的电报群中提问。

跟着我,

Instagram :五伏特玩家

联系方式:akshayjoseph666@gmail.com

在评论框中分享您的经验和建议。

以前的文章:

与 Arduino Uno 接口 16x2 LCD(并行接口)非接触式门铃、与 Arduino Uno接口蓝牙模块 (HC-05)、自动水龙头、自动洗手液、与 Arduino Uno 接口超声波传感器、与 Arduino Uno 和按钮控制伺服电机、带有 Arduino Uno 和 POT 的控制伺服电机,带有 Arduino Uno 的伺服电机接口,具有保存先前状态的红外控制家用电器,非接触式洗手定时器


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !