Arduino UNO 驱动 16x2 LCD 实现动画与小游戏
元器件清单
| Arduino UNO | ×1 |
| 1602 字符型 LCD (16列×2行) | ×1 |
| 10kΩ 电位器(对比度调节) | ×1 |
| 220Ω 电阻(背光限流) | ×1 |
| 面包板、跳线若干 | ×1 |
软件工具
Arduino IDE
项目简介
本教程从零开始,讲解如何用 Arduino 控制 1602 LCD 显示文本、滚动字符、自定义字符(如恐龙、箭头),并最终实现一个简单的躲避游戏。所有代码基于官方 LiquidCrystal 库,可直接移植到其他尺寸字符屏。
LCD 接线
| LCD 引脚 | 功能 | 连接 |
|---|---|---|
| 1 | VSS | 面包板负极轨 (GND) |
| 2 | VDD | 面包板正极轨 (5V) |
| 3 | VO | 电位器中间脚 (两侧分别接 5V/GND) |
| 4 | RS | Arduino D12 |
| 5 | R/W | GND (只写模式) |
| 6 | E | Arduino D11 |
| 11-14 | D4-D7 | Arduino D4-D7 |
| 15 | A | 5V 串联 220Ω |
| 16 | K | GND |
先不接数据线通电,若底行亮起方块说明屏幕正常。随后接上数据线上传测试代码,调节电位器直到显示 “Working”。
核心代码解析
LiquidCrystal lcd(12, 11, 4, 5, 6, 7); // RS, E, D4, D5, D6, D7
lcd.begin(16, 2); // 初始化 16列2行
lcd.setCursor(0, 1); // 光标移至第2行第1列 (0-index)
lcd.print("Welcome"); // 打印字符串
滚动文本
利用指针偏移实现字符从右向左滚动:
void loop() {
char msg[] = "Scrolling text!";
for (int n = 15; n >= -14; n--) {
lcd.clear();
lcd.setCursor(n, 1);
if (n < 0) lcd.print(msg - n); // 指针偏移
else lcd.print(msg);
delay(250);
}
}
自定义字符
每个字符占 5×8 像素,用 8 字节数组定义:
byte dino[8] = {
B01110, B01110, B01100, B01111,
B11101, B01010, B01010, B01010
};
lcd.createChar(0, dino); // 将字符存入 CGRAM 位置 0
lcd.write(byte(0)); // 显示自定义字符
射箭动画
定义箭头、箭身、箭尾三个自定义字符,在循环中依次写入并左移,形成飞行效果。残影现象属正常,因 LCD 响应时间导致。
躲避游戏
玩法:英雄(自定义字符)固定在第1列,箭从右向左飞来。按按钮(接 D2, 上拉输入)让英雄跳到第0行躲避,松开回第1行。得分随时间递增,被击中游戏结束。
关键技术:
attachInterrupt(0, buttonISR, CHANGE)— 外部中断实时响应按键,不阻塞主循环randomSeed(analogRead(A0))— 利用悬空模拟脚噪声产生真随机数,控制箭发射间隔- 中断服务程序
buttonISR()读取 D2 电平切换英雄行号
完整游戏代码见原文 pre 块,包含初始化、主循环、绘制英雄、中断处理、游戏结束显示分数等函数。
原理图

制造工艺
- 自制 Arduboy 克隆掌机:从面包板到专业 PCB
- Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
- Arduino + DHT11 + 以太网盾板温湿度数据记录仪
- Python 3 控制 Arduino UNO - 串口通信点亮内置 LED 入门教程
- Arduino Nano 驱动 128x64 OLED 实时运行康威生命游戏 (元胞自动机)
- 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
- 打造可靠的 Arduino 气象站:DHT 传感器 + LCD + RTC
- 用蜂鸣器和摇杆制作经典 Arduino LCD 街机游戏
- MKR1000 接入 Azure IoT:DHT22 温湿度实时上云监控
- 手把手教你打造树莓派 3 + Arduino 笔记本电脑
- 自制 AI 助手机器人:Arduino 与 Python 协同实现语音交互与肢体动作
- Arduino传感器:类型、应用与实战项目