1. 项目概述
打地鼠游戏作为经典街机游戏的电子化版本,在嵌入式开发教学中具有典型意义。这个基于单片机的实现方案,完美融合了硬件交互设计与游戏逻辑编程,是电子类专业学生入门嵌入式开发的绝佳练手项目。
我去年在指导电子设计竞赛时,就曾用这个项目帮助学生们快速掌握GPIO控制、定时器中断和状态机编程等核心技能。整个系统硬件部分成本可以控制在50元以内,软件代码量约300行,非常适合作为为期两周的课程设计课题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件系统设计
2.1 核心器件选型
主控芯片选用STC89C52RC,这款51内核单片机虽然性能不算强劲,但8KB的Flash和512B的RAM对于本应用绰绰有余。更重要的是其GPIO驱动能力直接支持LED显示,省去了额外的驱动电路。
地鼠洞采用9个红色LED环形排列,中心位置安装一个轻触开关作为锤击检测。实际制作时我发现,将LED安装在洞底约3cm深处,既能保证显示效果又可防止误触开关。
2.2 电路设计要点
电源部分采用AMS1117-3.3V稳压芯片,虽然单片机工作电压是5V,但3.3V供电可以降低LED工作电流。每个LED串联220Ω限流电阻,实测电流约8mA,整个系统工作电流不超过100mA。
按键防抖电路采用经典的RC滤波(10kΩ+0.1μF)配合软件去抖。在PCB布局时,所有开关信号线都加了10pF的对地电容,有效抑制了实验室环境下的电磁干扰。
3. 软件架构实现
3.1 游戏状态机设计
系统包含5个主要状态:
- 待机状态:LED全灭等待开始信号
- 游戏进行:随机点亮LED模拟地鼠出现
- 击中判断:检测到按键后判断是否命中
- 得分计算:更新显示分数
- 结束状态:显示最终得分
状态转换通过定时器中断触发,我设置了一个20ms的基础时钟节拍,所有时间参数都是这个基时的整数倍。
3.2 随机数生成算法
使用线性同余法生成伪随机数:
c复制static unsigned long seed = 1;
void srand(unsigned long s) { seed = s; }
int rand(void) {
seed = seed * 1103515245 + 12345;
return (unsigned int)(see
