python arduino i2c1602_Arduino基础入门—3.连接 IIC 1602 LCD显示文字

1. IIC转接板介绍

Arduino Uno R3开发板的外部IO口是非常有限的。在驱动LCD1602时,尽管我们的数据线使用了4线,相对于8线方式减少一半,但是在需要外接多种传感器的应用中,4线驱动还是占用了过多的IO。本篇介绍LCD1602的IIC驱动方式,通过IIC转接板使用IIC接口,只占用2个IO口就能驱动LCD1602。

IIC「Inter-Integrated Circuit 集成电路总线」是一种串行通信总线,应用于板载低速设备间的通讯。由飞利浦公司开发的这一通讯协议,其目的就是为了简化系统硬件设计,减少设备间的连线。

IIC串行总线有两根信号线,一根是双向的数字线SDA,另一根是时钟线SCL,每个IIC设备都有自己的地址,IIC总线上多个设备间通过设备地址进行区别。

上图为本篇使用的IIC转接板,直接焊接于LCD1602。可通过跳线帽设置是否开启背光,通过蓝色电位器调节对比度。IIC设备地址可通过短路A0/A1/A2修改,默认地址0x27

2. 安装驱动库

在Arduino IDE中点击「项目」—「加载库」—「管理库」,查找「LiquidCrystal_I2C」,选择最新版本进行安装。(这个得慢慢找)

3.实验材料

Uno R3开发板

配套USB数据线

面包板及配套连接线

LCD1602液晶屏带IIC转接板

4.实验步骤

4.1.电路连接。

IIC转接板的VCC、GND分别连接开发板5V、GND,转接板的SDA、SCL连接开发板A4、A5。

对应到I2C版的

这样就明白了吧?

4.2. 新建sketch,拷贝如下代码替换自动生成的代码并进行保存。

1 /*

2 * LCD1602 IIC驱动3 */

4 #include

5 #include

6

7 LiquidCrystal_I2C lcd(0x27,16,2); //配置LCD地址及行列

8

9 voidsetup()10 {11 lcd.init(); //初始化LCD

12 lcd.backlight(); //打开背光

13 }14

15 voidloop()16 {17 lcd.setCursor(0,0);//设置显示位置

18 lcd.print("hello");//显示字符数据

19 lcd.setCursor(0,1);//设置显示位置

20 lcd.print("world !");//显示字符数据

21 }

4.3. 连接开发板,设置好对应端口号和开发板类型,进行程序下载。

5.实验现象

可通过转接板蓝色电位器调节对比度,使LCD1602显示清晰。

连接步骤如下: 1. 将 DS18B20 温度传感器的 VCC 引脚连接Arduino 板的 5V 引脚上,将 GND 引脚连接Arduino 板的 GND 引脚上,将 DATA 引脚连接Arduino 板的数字引脚上(比如 D2 引脚)。 2. 将 LCD1602 液晶显示屏的 I2C 模块的 VCC 引脚连接Arduino 板的 5V 引脚上,将 GND 引脚连接Arduino 板的 GND 引脚上,将 SDA 引脚连接Arduino 板的 A4 引脚上,将 SCL 引脚连接Arduino 板的 A5 引脚上。 3. 在 Arduino IDE 中安装并打开 OneWire 和 LiquidCrystal_I2C 库。 4. 编写代码,通过 OneWire 库读取 DS18B20 温度传感器的温度值,再通过 LiquidCrystal_I2C 库将温度值显示LCD1602 液晶显示屏上。 下面是一个简单的示例代码: ``` #include <OneWire.h> #include <LiquidCrystal_I2C.h> #define ONE_WIRE_BUS 2 // DS18B20 DATA 引脚连接到 D2 引脚上 OneWire oneWire(ONE_WIRE_BUS); LiquidCrystal_I2C lcd(0x3F, 16, 2); // I2C 模块的地址为 0x3F,LCD1602 的行数和列数分别为 16 和 2 void setup() { lcd.init(); // 初始化 LCD1602 液晶显示lcd.backlight(); // 打开背光 lcd.setCursor(0, 0); // 将光标移到第一行第一列 lcd.print("Temperature:"); // 在第一行第一列显示“Temperature:”文本 } void loop() { float temperature = getTemperature(); // 读取 DS18B20 温度传感器的温度值 lcd.setCursor(0, 1); // 将光标移到第二行第一列 lcd.print(temperature); // 在 LCD1602 液晶显示屏上显示温度值 lcd.print("C"); // 在温度值后面显示“C”符号 delay(1000); // 延迟 1 秒 } float getTemperature() { byte data[2]; float temperature = 0; oneWire.reset(); // 发送复位信号 oneWire.write(0xCC); // 跳过 ROM,直接发命令 oneWire.write(0x44); // 启动温度转换 delay(800); // 等待转换完成 oneWire.reset(); oneWire.write(0xCC); oneWire.write(0xBE); // 读取温度值 for (int i = 0; i < 2; i++) { data[i] = oneWire.read(); } temperature = ((data[1] << 8) | data[0]) * 0.0625; // 计算温度值 return temperature; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值