出错原因
对比度太高,实际输出了文字但是无法看到,需要弄螺丝刀电位器,此外出错原因还有地址不对,可通过文末代码进行测试。
注意事项
- 对比度调节
- 地址是否正确
- 接线
GND ------ 地线
VCC ------ 电源(5V or 3.3v 电源不同显示效果有点差别)
SDA ------ I2C 数据线
SCL ------ I2C 时钟线 - 注意显示文字长度
常用函数
lcd.init(),lcd初始化
setCursor(x,y),设置起始坐标
lcd.print(),显示内容
lcd.clear(),清空显示屏
lcd.backlight(),开启lcd背光灯
程序代码
下列代码包含两个部分,前半部分为正常驱动LCD显示屏,后半部分(注释掉了)用于寻找LCD物理地址。
//LingShun lab
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //引用I2C库
//设置LCD1602设备地址,这里的地址是0x3F,一般是0x20,或者0x27,具体看模块手册
LiquidCrystal_I2C lcd(0x27,16,2);
void setup()
{
lcd.init(); // 初始化LCD
lcd.backlight(); //设置LCD背景等亮
}
void loop()
{
lcd.setCursor(0,0); //设置显示指针
lcd.print("LCD1602 I2C"); //输出字符到LCD1602上
lcd.setCursor(0,1);
lcd.print(" Hello");
delay(1000);
}
/*********************************************************************/
//查找LCD地址的程序 I2C Scanner
/*
#include <Wire.h>
void setup() {
Serial.begin (115200); // Leonardo: wait for serial port to connect
while (!Serial) { }
Serial.println ();
Serial.println ("I2C scanner. Scanning ...");
byte count = 0;
Wire.begin();
for (byte i = 8; i < 120; i++) {
Wire.beginTransmission (i);
if (Wire.endTransmission () == 0) {
Serial.print ("Found address: ");
Serial.print (i, DEC);
Serial.print (" (0x");
Serial.print (i, HEX);
Serial.println (")");
count++;
delay (1); // maybe unneeded?
} // end of good response
} // end of for loop
Serial.println ("Done.");
Serial.print ("Found ");
Serial.print (count, DEC);
Serial.println (" device(s).");
} // end of setup
void loop() {}
*/
输出结果