前面一篇我们尝试用普通的连接方式连接Arduino板,但我们会发现,这样比较浪费IO资源,如果还有需求连接数码管什么的,估计IO就被我们占用完了。Arduino与其他的单片机一样,都是IO资源珍贵,所以我们就有了IIC的连接方式。一般我们购买的1602不直接支持IIC的连接,有的有转么的转接模块,有的在1602的背面直接焊接了一个转接模块,但究其本质,都是使用了一个IIC的扩展芯片,这里我们使用的就是PCF8574,我们来看图:
我们来看一下简单的程序,不过我们要注意LiquidCrystal_I2C的库文可以直接在网上下载,我的经验在arduino的IDE中的库文件管理器中搜索下载是不能成功的,必须搜索“LiquidCrystal I2C”,如下图:
如果我们在proteus中编译的时候遇到了不能找到驱动库文件,我们就必须在编译器配置的文件夹中添加LiquidCrystal_I2C驱动库。文件路径如下:
LiquidCrystal_I2C的实例化比较前面的LiquidCrystal的实例化更简单,指明LCD设备地址及行和列后,就可以顺利的使用了。
但这里要非常注意他的地址,如果按照上图进行连接,基本没有问题,都是默认的x27,当然我们如果在实际的使用中需要连接多个IIC设备,那么我们就要通过PCF8574的三个地址脚(A0 A1 A2)为设备设置一个唯一性的地址,以防设备地址冲突。
下面我们看看程序:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display
int l2_x=0;
int dir=1;
void setup()
{
lcd.init(); // initialize the lcd
// Print a message to the LCD.
lcd.backlight();
lcd.setCursor(0,0);
lcd.print("Arduino UNO R3!");
lcd.setCursor(0,1);
lcd.print("waiting a secend");
delay(1000);
}
void loop()
{
if(l2_x >=0 && l2_x <=9)
{
lcd.setCursor(0,1);
lcd.print(" ");
lcd.setCursor(l2_x,1);
lcd.print("welcoome");
delay(500);
}
l2_x=l2_x+dir;
if(l2_x > 9)
dir=-1;
if(l2_x < 0)
dir=1;
}