proteus仿真arduino中使用PCF8574以I2C方式操作LCD1602

时间:2024-03-25 19:54:16

前面一篇我们尝试用普通的连接方式连接Arduino板,但我们会发现,这样比较浪费IO资源,如果还有需求连接数码管什么的,估计IO就被我们占用完了。Arduino与其他的单片机一样,都是IO资源珍贵,所以我们就有了IIC的连接方式。一般我们购买的1602不直接支持IIC的连接,有的有转么的转接模块,有的在1602的背面直接焊接了一个转接模块,但究其本质,都是使用了一个IIC的扩展芯片,这里我们使用的就是PCF8574,我们来看图:
proteus仿真arduino中使用PCF8574以I2C方式操作LCD1602
我们来看一下简单的程序,不过我们要注意LiquidCrystal_I2C的库文可以直接在网上下载,我的经验在arduino的IDE中的库文件管理器中搜索下载是不能成功的,必须搜索“LiquidCrystal I2C”,如下图:
proteus仿真arduino中使用PCF8574以I2C方式操作LCD1602

如果我们在proteus中编译的时候遇到了不能找到驱动库文件,我们就必须在编译器配置的文件夹中添加LiquidCrystal_I2C驱动库。文件路径如下:
proteus仿真arduino中使用PCF8574以I2C方式操作LCD1602

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;
 }

工程文件及代码下载