Arduino UNO 自制 LCD 跑酷小游戏:硬件接线与代码全解析
物料清单
| 组件 | 数量 |
|---|---|
| Arduino UNO | 1 |
| 1602 RGB 背光 LCD(I2C 或并口均可) | 1 |
| 面包板 | 1 |
| 220 Ω 电阻 | 1 |
| 12 mm 轻触开关 | 1 |
| 公对公杜邦线 | 若干 |
| USB-A 转 B 型数据线 | 1 |
硬件接线详解(并口 1602 为例)
电源与背光
- LCD VSS (Pin1) & RW (Pin5) & LED- (Pin16) → 面包板负极排(GND)
- LCD VDD (Pin2) → 面包板正极排(5V)
- 220 Ω 电阻串联在 LED+ (Pin15) 与 5V 间限流
数据与控制线(4-bit 模式)
| LCD 引脚 | Arduino 引脚 | 说明 |
|---|---|---|
| DB4 (Pin11) | D6 | 数据位 4 |
| DB5 (Pin12) | D5 | 数据位 5 |
| DB6 (Pin13) | D4 | 数据位 6 |
| DB7 (Pin14) | D3 | 数据位 7 |
| E (Pin6) | D9 | 使能信号 |
| RS (Pin4) | D11 | 寄存器选择 |
| V0 (Pin3) | D12 | 对比度 PWM 调节(或接 GND 固定) |
按键接线
轻触开关跨面包板中沟放置,一脚接 GND,另一脚接 Arduino D2(内部上拉)。
游戏原理
经典“跑酷”玩法:主角自动向右跑,按键跳跃躲避上下随机生成的障碍块。LCD 两行分别显示上下轨道,自定义字符绘制主角跑动/跳跃动画、地形块。得分随距离递增,碰撞即游戏结束。
核心代码逻辑
- 自定义字符:
createChar()定义 7 组 5×8 点阵(跑动两帧、跳跃、地形、地形左右边缘) - 地形滚动:
advanceTerrain()半字符平移,实现平滑滚动 - 状态机:主角 13 种状态(地面跑动 2 帧、跳跃 6 阶段、空中跑动 2 帧、隐藏/闪烁)
- 碰撞检测:
drawHero()写入字符前比对原地形字符,非空即碰撞 - 中断响应:D2 下降沿触发
buttonPush()置标志位,主循环处理跳跃 - 自动游玩演示:D1 输出高/低电平指示下一步是否需跳跃,可接 LED 观察 AI 判断
完整代码
#include <LiquidCrystal.h>
#define PIN_BUTTON 2
#define PIN_AUTOPLAY 1
#define PIN_READWRITE 10
#define PIN_CONTRAST 12
// ... 自定义字符常量定义 ...
LiquidCrystal lcd(11, 9, 6, 5, 4, 3); // RS, E, DB4-DB7
// ... 变量声明 ...
void initializeGraphics() { /* 创建 7 个自定义字符 */ }
void advanceTerrain(char* terrain, byte newTerrain) { /* 半字符滚动 */ }
bool drawHero(byte pos, char* upper, char* lower, unsigned int score) { /* 绘制+碰撞检测 */ }
void buttonPush() { buttonPushed = true; }
void setup() { /* 引脚模式、中断、LCD 初始化 */ }
void loop() { /* 状态机:等待开始→滚动地形→按键跳跃→碰撞判定→计分 */ }
扩展建议
- 改用 I2C LCD 节省引脚,仅需修改构造函数
- 增加蜂鸣器得分/碰撞音效
- 引入电位器调节游戏速度/对比度
- 移植至 Arduino Nano + OLED 实现便携掌机
制造工艺
- 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
- Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- 用 Arduino Nano 自制 37 灯珠轮盘赌游戏机
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino + 模拟摇杆互动游戏:五向 LED 反馈
- Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- DIY Arduino Nano 示波器:10 Hz–50 kHz / 128×64 LCD
- 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南