YFROBOT创客社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 108848|回复: 93
打印 上一主题 下一主题

Arduino驱动IIC/I2C LCD1602模块显示(4根线解决连接)

  [复制链接]

签到天数: 866 天

[LV.10]以坛为家III

跳转到指定楼层
楼主
发表于 2013-7-4 20:20:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 AllBlue 于 2018-5-18 14:11 编辑

Arduino驱动IIC/I2C LCD1602模块显示(4根线解决连接)

Arduino控制器的控制端口数量有限,连接一个LCD就好像没接口了似得!

下面我们介绍一个使用IIC接口连接的LCD1602模块。这一模块只用4根线就可以解决与arduino连接问题,非常方便初学者使用,再也不用为繁琐的连线头疼了~~

IIC 1602背面图片:


模块基本参数:

       工作电压为+5V

       有背光且可调节对比度

       I2C接口通讯地址:0x27


下面我们介绍下IIC:

IIC 即Inter-Integrated Circuit(集成电路总线)又叫I2C,一种总线结构,这种总线类型是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

模块使用芯片(PCF8574)中文资料:


IIC LCD1602库文件:

   

              --- 已更新 1.6.6 版本IDE 可用   更改方法:点击查看

IIC LCD1602模块有4个引脚,连接非常简单,分别连接arduino(在这里要特别提示下各位用户,首先将库文件添加到library中,不然程序无法工作;虽然连线只有4根,但是还是要注意下连线,正负极不可反接):

       GND ———— GND

       VCC ———— 5V

       SDA ———— A4(AREF旁的SDA)

       SCL ———— A5 (AREF旁的SCL)


连接好电路后,将下面的例程下载到控制板中,就可以实现显示了:

  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>

  3. LiquidCrystal_I2C lcd(0x27,16,2); // set the LCD address to 0x27 for a 16 chars and 2 line display

  4. void setup()
  5. {
  6. lcd.init(); // initialize the lcd
  7. lcd.backlight(); //Open the backlight
  8. lcd.print("Welcome to "); // Print a message to the LCD.
  9. lcd.setCursor(0,1); //newline
  10. lcd.print("www.yfrobot.com");// Print a message to the LCD
  11. }
  12. void loop()
  13. {
  14. }
复制代码

程序中使用到:

      lcd.init();  初始化LCD
             lcd.backlight(); 打开背景灯     

      lcd.print("Welcome to "); 显示“Welcome to”文本

       还要说明的是 :之前介绍的LCD 1602的语法,在这个库中同样适用        其他语法介绍请见1602实验

显示图片:





模块原理图:

-----------------------------------------------------------------分割君--------------------------------------------------------------
网友:hwn444 贡献的IIC地址查询,给用到的朋友整理到这里。

[C] 纯文本查看 复制代码
#include <Wire.h>

void setup(){
  Wire.begin();
  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}
void loop(){
  byte error, address;
  int nDevices;
  Serial.println("Scanning...");
  nDevices = 0;
  for (address = 1; address < 127; address++ ){
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the 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(" !");
      nDevices++;
    }else if (error == 4){
      Serial.print("Unknow error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");
  delay(5000); // wait 5 seconds for next scan
}



代码可用,已测试!再次感谢hwn444的贡献!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏7 支持支持 反对反对

签到天数: 866 天

[LV.10]以坛为家III

沙发
 楼主| 发表于 2013-7-27 08:27:50 | 显示全部楼层
Macintosh 发表于 2013-7-26 08:53
这好东西到那里去买啊?

淘宝搜索“ IIC 1602” 就可以看到很多了~~~~
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

板凳
 楼主| 发表于 2014-9-18 13:36:14 | 显示全部楼层
zjjdog3 发表于 2014-9-17 12:58
?? 求教为什么我这里编译报错??
库文件已经添加了

你的错误提示就是库文件找不到哦,你看下库文件是否放在library文件夹中了!!如果放了,LiquidCrystal_I2C应该会变色的!
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

地板
 楼主| 发表于 2014-9-18 13:36:21 | 显示全部楼层
zjjdog3 发表于 2014-9-17 12:58
?? 求教为什么我这里编译报错??
库文件已经添加了

你的错误提示就是库文件找不到哦,你看下库文件是否放在library文件夹中了!!如果放了,LiquidCrystal_I2C应该会变色的!
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

5#
 楼主| 发表于 2015-3-20 09:34:55 | 显示全部楼层
evilsen 发表于 2015-3-18 20:38
代码如下:#include
#include
#include

可以先确认下液晶是否可以正常工作,你这个应该是库是用问题
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

6#
 楼主| 发表于 2015-5-8 18:00:54 | 显示全部楼层
xiongchp 发表于 2015-5-8 15:32
我的库正常添加了。编译出错,信息如下:
Arduino:1.6.3 (Windows 7), 板:"Arduino Uno"
In file includ ...

试下低版本的IDE,1.0.1,有可能是IDE版本问题
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

7#
 楼主| 发表于 2015-7-23 08:25:30 | 显示全部楼层
本帖最后由 AllBlue 于 2015-7-23 08:32 编辑
ivan24 发表于 2015-7-22 21:00
楼主,为什么我的LCD能亮,但始终无法显示出字呢?PS:代码编译和烧写都是没有错误的。另外求IIC/I2C和LCD ...

1、是否有调节背面的电位器控制下对比度呢(调小调过了都不能显示的)?
2、SDA 和 SCL 接线是否正确。(SDA — A4、 SCL — A5 )
3、还有一个要注意的就是 I2C接口通讯地址,我们这里默认是:0x27(现在版本可以通过短接 A0 A1 A2,来改变地址)

IIC与LCD连接图,文章底部有电路图,芯片资料文中也有的!
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

8#
 楼主| 发表于 2015-9-19 08:10:13 | 显示全部楼层
767348927 发表于 2015-9-16 10:44
楼主,我的也是不显示字符,只有第一行全黑,第二行无显示,程序用你的,库文件加上去也没报错求救

你地址对不对呢,程序复位试试看呢
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

9#
 楼主| 发表于 2015-12-21 17:14:42 | 显示全部楼层
Albert_qiang 发表于 2015-12-20 20:48
#include
#include
LiquidCrystal_I2C lcd(0x27,16,2); // 设置 LCD 为 16 字符,2 行显示,地址 0x27
...

程序应该是没有什么问题的。
重启下控制板试试看,不行的话,最好将扩展去掉,直接连接UNO控制板试试:
       GND ———— GND
       VCC ———— 5V
       SDA ———— A4
       SCL ———— A5
排除扩展有问题!
回复 支持 反对

使用道具 举报

签到天数: 866 天

[LV.10]以坛为家III

10#
 楼主| 发表于 2015-12-30 11:25:51 | 显示全部楼层
弦外音 发表于 2015-12-29 18:20
将楼主的代码贴进去,编译完成,上传,LCD没反应,将楼主方法与我的操作对比,没有错,就是不显示,已快崩 ...

IIC地址是否正确,电路连接是否正确,检查下~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|联系我们|YFROBOT ( 苏ICP备20009901号-2  

GMT+8, 2024-5-4 04:53 , Processed in 0.050735 second(s), 25 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表