是的 —— 带 I2C 转接板的 16×2 LCD1602 接 Arduino Uno 只需要四根线:GND 接 GND、VCC 接 5V、SDA 接 A4、SCL 接 A5,再从 Library Manager 装一个库就够了。这篇教程带你免焊接线、扫出你这块模块的真实地址,并把塞满我们客服信箱的白屏和乱码问题一一修好。
这块 LCD 的 I2C 芯片是不是已经焊好了?
在 1602 + I2C 模块上,是的 —— 黑色的 I2C 转接板出厂时就已经横跨显示屏的 16 针排焊好了。把板子翻过来,全都在背面:接口芯片、蓝色对比度电位器、背光跳线帽,还有一排标着 GND、VCC、SDA、SCL 的直角 4 针排针。整个项目从头到尾没有任何要焊的地方。
Basic 款是同一块屏幕玻璃,但没有那块转接板:裸露的 16 针并口,要接十几根线,还得自己配对比度电位器。只有当课程计划明确要求并口接线时才值得买 —— 其余所有场合,焊好 I2C 的版本才是该拿的那块。
| 显示屏 | 接口 | 屏幕颜色 | 去哪买 |
|---|---|---|---|
| 16×2 | I2C,已焊好 | 蓝底白字 | 1602 + I2C(蓝色) —— 本文用的这块 |
| 16×2 | I2C,已焊好 | 绿底深色字 | 同一产品页选绿色款 |
| 16×2 | 并口,无转接板 | 绿底深色字 | 1602 Basic(绿色) |
| 20×4 | I2C,已焊好 | 蓝底白字 | 2004 + I2C(蓝色) |
| 20×4 | I2C,已焊好 | 绿底深色字 | 同一产品页选绿色款 |
| 20×4 | 并口,无转接板 | 蓝底白字 | 2004 Basic(蓝色) |
材料清单 —— 显示屏、主板、数据线,以及它们之间的四根杜邦线
Parts list
| Item | Price | Qty | |
|---|---|---|---|
LCD1602 LCD2004 Liquid Crystal Display Module with IIC I2C Basic 16x2 20x4For Arduino Display Application - 2004 + I2C (Blue)LCD2004 | RM19.95 |
更大的 20x4 屏幕。接线和库完全相同 —— 只有构造函数那一行改成 (0x27, 20, 4)。
I2C 转接板怎么把 16 根引脚变成 4 根?
转接板上载着一颗 PCF8574 —— 一颗 I2C 端口扩展芯片:它在两线的 I2C 总线上听命令,把收到的每个字节复制到八个物理输出脚上。LCD 自己的控制器是经典的 HD44780,它有一种 4 位模式,每条指令拆成两个半字节,从数据线 D4–D7 送进去。八个扩展输出正好够用:四条数据线、三条控制线(RS、RW、E),再加一个开关背光的三极管 —— 于是整个 16 针接口就收拢到了 SDA 和 SCL 两根线上。
这也是为什么你的 sketch 依然通过一个叫 LiquidCrystal 的库跟屏幕说话:屏幕的大脑从来没变,变的只是送信的路线。而且因为 PCF8574 是一颗带地址的通用芯片,同样两根线还能同时挂别的 I2C 设备 —— 每个设备只应答自己的地址。

LCD1602 怎么接到 Arduino Uno?
转接板的 4 针排针直接配公对母杜邦线:母头套上转接板的针脚,公头插进 Uno 的母排座。不用面包板、不用焊接 —— 从 40 根的排线上撕下四根就完事。Uno 盒子里那条散装公排针是留给别的项目的,这个搭建完全用不上。整套电路由 USB 口的 5 V DC 供电 —— 低压直流,市电从头到尾不沾边。
| 转接板引脚 | Uno 引脚 | 原因 |
|---|---|---|
| GND | GND | 电源和 I2C 总线的公共参考地 |
| VCC | 5V | HD44780 和它的背光都是 5 V 器件 —— 5 V 主板直接驱动 |
| SDA | A4 | Uno 的 I2C 数据线 |
| SCL | A5 | Uno 的 I2C 时钟线 |
Uno 在 AREF 旁边还引出了两个专门标着 SDA 和 SCL 的孔 —— 它们和 A4、A5 是同一组电气网络,哪对顺手用哪对;这是同一条共享总线,不是第二个端口。这块 Uno 有一样东西是不附送的:USB 线。它用全尺寸 USB-B 口烧录程序,所以记得连同 A 转 B 数据线一起带上 —— 或者选 CH340 版 Uno,盒子里就配好了一条。
想在自己动手插线之前,先看别人把接线和第一次通电完整做一遍?
该装哪个库 —— 地址是 0x27 还是 0x3F?
从 Library Manager 安装 Frank de Brabander 写的 LiquidCrystal I2C(Sketch → Include Library → Manage Libraries,搜索 “LiquidCrystal I2C”)。同一个列表里住着好几个名字相近的分支版本,所以要对作者名,不能只看标题。如果你压根不想操心地址这回事,Bill Perry 的 hd44780 库能自动检测地址和引脚映射 —— 但它检测的到底是什么,还是值得弄明白。
地址由你转接板上载的是哪颗芯片决定,而这是一场批次抽签。PCF8574 数据手册把地址的高四位固定为 0100,落在 0x20–0x27;它的孪生兄弟 PCF8574A 应答 0111,落在 0x38–0x3F。转接板上的 A0–A2 三个焊盘出厂时都没有桥接,三个低位地址脚全被拉高 —— 所以 PCF8574 落在 0x27,PCF8574A 落在 0x3F。两颗芯片驱动屏幕的方式一模一样,只有 sketch 里那个数字不同。所以别猜 —— 扫:
// I2C 扫描器:把总线上每个设备的地址打印出来。
// 先跑这个 - 它告诉你该写 0x27 还是 0x3F。
#include <Wire.h>
void setup() {
Wire.begin();
Serial.begin(9600);
Serial.println("Scanning...");
byte found = 0;
for (byte addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) { // 这个地址上有设备应答
Serial.print("Device found at 0x");
if (addr < 16) Serial.print("0");
Serial.println(addr, HEX);
found++;
}
}
if (found == 0) Serial.println("No devices found - check SDA/SCL wiring");
}
void loop() {}
上传,打开串口监视器(9600 波特),打印出来的那个地址就是 sketch 该用的地址。如果扫描器什么都不打印,最常见的元凶是 SDA 和 SCL 接反 —— A4、A5 插反是这个项目里最容易犯的接线错误,把两根线换回来就好。扫描器的原理是挨家挨户敲门:它对 1 到 126 的每个地址发起一次传输,看有没有设备把数据线(SDA)拉低来应答。这也是「怎么改 LCD 地址」的老实答案:地址定在硬件里,不在代码里。用焊锡桥接某个 A0–A2 焊盘,就把那个地址脚接到地、把对应的位拉低 —— 在 0x27 的模块上桥接 A0,它就变成 0x26 —— 两块屏幕共用一条总线用的正是这一招。
第一个 sketch 长什么样?
十行设置代码就能让 LCD1602 的玻璃上出字 —— 把扫描器打印的地址换进去:
// LCD1602 + I2C 转接板,接在 Arduino Uno 上。
// 库:"LiquidCrystal I2C",作者 Frank de Brabander(Library Manager 安装)。
// 第一个参数填你自己的扫描器打印出来的地址。
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // 地址、列数、行数
// LCD2004 用:(0x27, 20, 4)
void setup() {
lcd.init(); // 启动 PCF8574 和它背后的 HD44780
lcd.backlight(); // 打开 LED 背光
lcd.setCursor(0, 0); // 第 0 列、第 0 行(上行)
lcd.print("Hello MakerHub");
}
void loop() {
lcd.setCursor(0, 1); // 第 0 列、第 1 行(下行)
lcd.print("Uptime: ");
lcd.print(millis() / 1000); // 通电以来的秒数
lcd.print("s");
delay(1000);
}
编译出来 3,496 字节 —— 只占 Uno 闪存的十分之一。新手最容易漏掉的两个调用就在开头:lcd.init() 把控制器唤醒进 4 位模式,lcd.backlight() 点亮 LED 背光 —— 少了哪个,接线再完美屏幕也是黑的。换 20×4 版本时,只改构造函数:(0x27, 20, 4)。
为什么屏幕一片空白 —— 或者满屏乱码?
LCD1602 的对比度和背光是两套互相独立的电路,把它们搞混几乎是我们收到的每一条白屏求助背后的原因。背光只是玻璃后面的一颗 LED,由转接板上那个可拔的黑色跳线帽供电 —— 它决定屏幕亮不亮。对比度是那颗蓝色电位器:它设定 LCD VO 脚上的驱动电压,控制液晶字段变深的力度 —— 它决定字符看不看得见。屏幕在发光却没有字,多半是对比度问题,不是数据问题。
所以先从电位器下手:给屏幕通电,用小螺丝刀慢慢转,直到字符清晰浮现。还没烧录 sketch?把它调到上排隐约的方块刚好可见的位置 —— 那就是同一个最佳点。往一边拧过头,字会淡到消失;往另一边拧过头,每个字符格都糊成一块实心方块。调好一次就固定住了 —— 它是颗螺丝,不是会自己漂移的旋钮。

电位器解决不了的时候,症状本身就报出病因:
| 你看到的 | 最可能的原因 | 解法 |
|---|---|---|
| 背光亮着,别的什么都没有 | 对比度太低,或 I2C 地址不对 | 转蓝色电位器;还是空白就跑扫描器 |
| 一整行实心方块 | 有电但从未初始化 | 地址不对,或 sketch 根本没跑 lcd.init() —— 先扫描,再检查构造函数 |
| 随机乱码字符 | SDA/SCL 线松了,或地址不对 | 重新插紧四根杜邦线、重新扫描、重启主板 |
| 完全不亮 | 背光跳线帽丢了,或没供电 | 装回黑色跳线帽;检查 GND 和 VCC |
一整行方块的情况值得多讲一句机理:那排方块是 HD44780 在有电、有对比度、却从未收到初始化序列时的样子 —— 屏幕在告诉你「我活着,只是没人跟我说过话」。这是软件或地址问题,从来不是屏幕坏了。
真实客户身上常见的错误
“This lcd is already soldered with i2c chip?” —— +I2C 版本,是的:转接板出厂时就焊在屏幕上,你要接的只有那排 4 针排针。哪天拿不准手上是哪个版本,翻过来看 —— 背面那块黑色小板就是 I2C 接口。
“lcd1602 + I2C last time brough with u need install what library ah” —— Frank de Brabander 的 LiquidCrystal I2C,从 Library Manager 装。IDE 自带的那个普通 LiquidCrystal 库是给裸装并口版本用的 —— 它能顺利编译,却够不到挂在 I2C 总线上的屏幕,所以屏幕一直是空白的。
“i cant change the address of the lcd” —— 地址不是在代码里设的,所以任何 sketch 都改不了它:它住在转接板的硬件里。你能做的是读出它(扫描器),或者挪动它(桥接 A0–A2 焊盘把地址位拉低)。只用一块屏幕的话,把扫描器打印的地址填进构造函数就能跑。
对着症状拧错了控制。亮不亮归背光跳线帽管;看不看得见归对比度电位器管。动手之前,先对照上面的症状表。
常见问题
我的 LCD1602 是什么 I2C 地址?
0x27 或 0x3F 二选一,取决于你这批转接板载的是哪颗扩展芯片 —— PCF8574 模块出厂在 0x27,PCF8574A 在 0x3F。跑一遍上面的 I2C 扫描器 sketch,用它打印出来的地址;瞎猜的失败率跟抛硬币一样。
LCD2004 能用同样的代码吗?
能。20×4 模块用同样的转接板、同样的接线、同样的库 —— 把构造函数改成 LiquidCrystal_I2C lcd(0x27, 20, 4);,其余原封不动。
为什么我的 LCD 显示一行白色方块?
屏幕有电、有对比度,但从未被初始化。最常见的原因是 sketch 在跟错误的 I2C 地址说话,初始化序列根本没送到 —— 跑扫描器、改构造函数。地址确认没错的话,检查 lcd.init() 是不是真的写在 setup() 里。
这个项目需要面包板或烙铁吗?
都不需要。转接板到手时已焊在屏幕上,排针是公头,杜邦线是公对母,Uno 的排座是母口 —— 整条链路上的每个连接都是直接插上去的。
一块 Arduino 能接两块 LCD 吗?
能 —— A0–A2 焊盘就是干这个的。在第二块转接板上桥接一个焊盘,让它应答另一个地址,然后建两个 LiquidCrystal_I2C 对象,一个地址一个。两块屏幕共用同一对 A4/A5 线。

屏幕能稳定出字之后,它就成了几乎所有项目的显示窗:我们的 DS3231 数字时钟把实时时间放上的正是这块屏,键盘密码锁的显示屏挂的也是你刚接好的这条 A4/A5 I2C 总线。先扫描、接四根线,剩下的不过是 lcd.print()。
最后更新:2026年8月。有问题?WhatsApp 联系我们。



LCD1602 LCD2004 Liquid Crystal Display Module with IIC I2C Basic 16x2 20x4For Arduino Display Application - 1602 + I2C (Blue)
Arduino Compatible UNO R3 FT232 Development Board Arduino Compatible CH340 Alternative
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-B (1.0M)
40pcs Dupont Wire 10cm 20cm 30cm for Breadboard DIY Experiment Jumper Wire Breadboard wire - DUPONT WIRE M-F 20CM
LCD1602 LCD2004 Liquid Crystal Display Module with IIC I2C Basic 16x2 20x4For Arduino Display Application - 2004 + I2C (Blue)