I2C LCD串行接口板不显示文本(引脚错误?)


9

我有一个1602液晶显示屏,它可以正常工作。但是,我想通过使用我单独购买的I2C / IIC LCD控制器来释放一些引脚。

虽然控制器似乎在正确的地址上与我的Arduino UNO通信,但我无法显示文本。默认情况下(无代码),LCD似乎有1行,每行16个实心“正方形”。在我的代码中使用地址27时,LCD将变为2行,每行16平方(见下图)。该代码还要求背光灯闪烁3次,这是可行的。但是我只能得到2行正方形。(完整代码位于此问题的底部)。

我正在使用F Malpartida 的LiquidCrystal_I2C库,该似乎很常用。
我应该使用更好的库吗?

我想知道代码中是否使用了错误的引脚。我在网上看到的所有草图都使用以下引脚:

//                    addr,en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Set the LCD I2C address

但是,我在网上看到的所有1602 LCD的引脚都与我的引脚相同,如下图所示:

I2C LCD控制器

这些引脚似乎是标准的:
1602 LCD引脚排列

让我更加困惑的是,LCD板上的引脚从左侧的1开始,但是默认代码的引脚似乎从0开始!因此,我尝试将代码的针脚更改为LCD板上的数字。LCD不再变为两行正方形,并且不再使背光闪烁。然后,我尝试从每个引脚减去1(从0开始),结果相同。然后,我尝试使用默认接脚减去1,结果相同。因此,默认引脚在某种程度上更正确吗?我究竟做错了什么?

是否有其他人得到了这些I2C控制器中的一种来为它们工作,如果可以,怎么做?

完整代码:

/* YourDuino.com Example Software Sketch
 16 character 2 line I2C Display
 Backpack Interface labelled "YwRobot Arduino LCM1602 IIC V1"
 terry@yourduino.com */

/*-----( Import needed libraries )-----*/
#include <Wire.h>  // Comes with Arduino IDE
// Get the LCD I2C Library here: 
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
#include <LiquidCrystal_I2C.h>

/*-----( Declare objects )-----*/
// set the LCD address to 0x27 for a 20 chars 2 line display
// Set the pins on the I2C chip used for LCD connections:
//                    addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Set the LCD I2C address

void setup()   /*----( SETUP: RUNS ONCE )----*/
{
  Serial.begin(9600);  // Used to type in characters
  lcd.begin(16,2);   // initialize the lcd for 16 chars 2 lines, turn on backlight

// ------- Quick 3 blinks of backlight  -------------
  for(int i = 0; i< 3; i++) {
    lcd.backlight();
    delay(250);
    lcd.noBacklight();
    delay(250);
  }
  lcd.backlight(); // finish with backlight on  

//-------- Write characters on the display ------------------
// NOTE: Cursor Position: (CHAR, LINE) start at 0  
  lcd.setCursor(0,0); //Start at character 4 on line 0
  lcd.print("Hello, world!");
  delay(1000);
  lcd.setCursor(0,1);
  lcd.print("HI!YourDuino.com");
  delay(8000);  

// Wait and then tell user they can start the Serial Monitor and type in characters to
// Display. (Set Serial Monitor option to "No Line Ending")
  lcd.clear();
  lcd.setCursor(0,0); //Start at character 0 on line 0
  lcd.print("Use Serial Mon");
  lcd.setCursor(0,1);
  lcd.print("Type to display");  

}/*--(end setup )---*/

void loop()   /*----( LOOP: RUNS CONSTANTLY )----*/
{
  {
    // when characters arrive over the serial port...
    if (Serial.available()) {
      // wait a bit for the entire message to arrive
      delay(100);
      // clear the screen
      lcd.clear();
      // read all the available characters
      while (Serial.available() > 0) {
        // display each character to the LCD
        lcd.write(Serial.read());
      }
    }
  }

}/* --(end main loop )-- */

您还记得添加上拉吗?
伊格纳西奥·巴斯克斯


1
可能不是问题,但是您是否尝试过使用电位计调节对比度?代码中的数字表示PCF8574芯片上的哪个引脚连接到LCD板上的哪个引脚。I2C板上的P3显然已连接到LCD的背光引脚。但是我认为其他引脚在某种程度上是错误的。尝试使用万用表查看PCF8574的P0-P7引脚到LCD接头连接器上的哪个引脚的位置。
Gerben 2014年

2
尽管可能不是问题,但您应该注意LCD上的焊接排针,从图中看来,它们似乎并未完全覆盖孔周围的铜;我会先尝试改善这些焊点。
jfpoilpret 2015年

1
@ Gerben,derp。我用万用表测试了芯片,但是我还是很困惑。芯片上的引脚9-12对应于lCD上的D4-D7。引脚6 = E,5 = RW和4 = RS 我无法弄清楚引脚7到底是什么。使用这些值后,LCD仍无响应。另外,我应该从这些引脚中减去1吗?再次因为所有在那里的默认代码都具有引脚0 = RS。但这不可能,因为芯片上的第一个引脚是A0(地址)。基本上,更改任何单个引脚都会杀死背光响应或停止第二行显示块字符。
2015年

Answers:


3

首先,看起来这些电线没有正确连接:

在此处输入图片说明

我以前没有拆过女跳线,所以这可能不是问题。但是,这似乎可能是原因。

此外,您需要通过旋转微调器来调整对比度(看起来有点像蓝色的蓝色螺钉中有一个螺丝)。液晶屏将不显示任何内容,文本的褪色版本,或者如果对比度设置不正确则显示蓝色框。这可能是原因。


跳线之类的原因仅在于我移动了照片板。另外,我已经调整了微调器,它要么整块,要么什么都没有。
2014年

3

我购买了SainSmart 20x04,还必须将地址更改为0x3F。我的背光跳线丢失了,I2C板右侧的小接头提供了背光电源。我发现一些代码包括:

lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);

1

我有同样的问题,我只是通过更改LCD 1602A的地址来解决它,该地址在教程0x27中,但在我的设备中是0x3F。

祝好运!


就我而言,更改此行时也有效:LiquidCrystal_I2C lcd(0x3F,16,2);。非常感谢!
斯特凡

0

据我所知,上拉电阻应与显示器集成在一起。

您尝试过其他地址吗?我有一个类似的地址范围为0x3F的作品。也许这会有所帮助。


该板被出售为“地址27”,而27是唯一可以响应的地址。实际上,可以通过在照片中的修整锅上方焊接A1 A2和A3引脚来进行自定义。
2014年

0

更改此代码:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

对此:

LiquidCrystal_I2C lcd(0x26, 2, 1, 0, 4, 5, 6, 7, 8, POSITIVE);

(“正”之前的参数从3更改为8)


1
有什么解释吗?PCF8574上没有P8。
tcurdt 2015年


-2
LiquidCrystal_I2C lcd(0x3f, 2, 1, 0, 4, 6, 5, 7, 3, POSITIVE);  // Set the LCD

I2C模块D6-> P5为D5-> P6(反相)。


1
你能解释更多吗?
2016年

2
编辑您的信息,并使用代码格式标记(以下四个空格)格式化代码。如需帮助,请参阅Markdown帮助。您应该可以通过选择代码并按Ctrl+K来让浏览器为您执行此操作。如果您进行更详细的讨论,您的答案将更有帮助。
尼克·加蒙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.