基于STM32与红外遥控的嵌入式篮球计分系统设计与实现

📅 2026/6/28 22:47:35
基于STM32与红外遥控的嵌入式篮球计分系统设计与实现
1. 项目背景与设计思路篮球计分系统是体育比赛中不可或缺的基础设备传统机械式计分板操作繁琐且功能单一。作为一名嵌入式开发爱好者我一直在思考如何用更智能的方式解决这个问题。最近用STM32结合红外遥控做了一个嵌入式篮球计分系统实测效果非常不错特别适合作为课程设计或毕业设计项目。这个设计的核心思路很简单用STM32作为大脑红外遥控作为输入设备OLED屏幕作为显示终端。相比传统方案它有三大优势一是成本低廉全部硬件成本不到100元二是扩展性强通过红外遥控可以实现20多个功能按键三是便携性好整个系统可以做到巴掌大小。我在实际开发中发现很多同学在做类似项目时容易陷入两个误区要么功能过于简单缺乏实用价值要么追求复杂导致难以实现。这个设计找到了很好的平衡点既实现了计时、计分、节次切换等核心功能又通过红外遥控大大简化了硬件设计。2. 硬件选型与电路设计2.1 核心器件选型主控芯片选择了STM32F103C8T6也就是常说的蓝色药丸开发板。这款芯片性价比极高72MHz主频完全够用而且有丰富的定时器和中断资源特别适合做实时性要求高的计时系统。显示部分用的是0.96寸OLED屏IIC接口这是我反复对比后的选择。相比LCD屏OLED有三大优势一是功耗低整个系统可以用移动电源供电二是显示效果好对比度高三是接口简单只需要4根线VCC、GND、SCL、SDA。红外接收头选用的是HS0038这是最常用的红外接收模块兼容市面上绝大多数遥控器。我测试过在5米距离内响应都很稳定完全满足篮球场的使用需求。2.2 电路设计要点整个硬件设计遵循极简原则核心电路只有三部分主控电路STM32最小系统包括晶振、复位电路和电源滤波显示电路OLED直接通过I2C接口连接红外接收电路HS0038的信号线接PB9配合上拉电阻这里有个设计技巧红外接收模块的供电最好加一个100μF的电容可以有效滤除电源干扰。我在初期测试时就遇到过遥控不稳定的问题后来加上这个电容就解决了。焊接时要注意OLED的I2C接口需要接4.7kΩ上拉电阻。如果使用开发板通常板载已经有上拉电阻了这时就不需要额外添加。我第一次做的时候没注意这点导致通信老是失败排查了好久才发现问题。3. 关键功能实现3.1 红外遥控解码红外解码是这个项目的技术难点之一。我参考了正点原子的代码但做了重要改进修复了原代码中按键一次会触发多次响应的问题。解码核心是定时器4的输入捕获功能主要逻辑是检测4.5ms的引导码记录后续560us和1680us的脉冲将脉冲序列转换为键值这里有个实用技巧不同遥控器的编码可能不同建议先用逻辑分析仪抓取波形确认键值对应关系。我在开发时就发现网上买的遥控器和家里电视遥控器的编码完全不同。3.2 计时功能实现比赛计时使用了定时器3配置为10ms中断一次。中断服务程序中实现了一个多层计数器ms计数器记录0.01秒second计数器记录秒minute计数器记录分钟这种分层设计既保证了计时精度又避免了频繁操作全局变量。实测下来12分钟比赛的计时误差在0.1秒以内完全满足需求。特别要注意的是在暂停状态下要禁用定时器中断否则后台计时会继续运行。我第一次测试时就犯了这个错误导致暂停后时间还在走。3.3 显示功能优化OLED显示采用了分层渲染策略球队信息区显示主客队名称和大比分比分区放大显示当前比分计时区显示节次和比赛时间24秒区圆形倒计时显示为了提高刷新效率我实现了局部刷新功能。比如比分变化时只重绘比分区域而不是整个屏幕。这个优化使系统响应更加流畅。字模处理也有技巧使用PCtoLCD2002软件生成汉字字模时建议选择阴码、逐列式、逆向输出模式这样最兼容常见的OLED驱动库。4. 系统功能详解4.1 核心功能实现这个篮球计分系统实现了以下核心功能比赛计时支持12分钟倒计时精度0.01秒比分管理支持两队比分增减范围0-999节次控制支持4节比赛半场自动交换场地24秒违例带14/24秒复位功能暂停功能可随时暂停/继续比赛特别实用的是比分对调功能。当比赛进入下半场时按特定键可以一键交换两队比分显示位置这个设计在现场测试时获得了很多好评。4.2 红外按键功能分配为了操作方便我将遥控器按键功能做了如下分配数字键1/2主队比分加减数字键3/4客队比分加减方向键控制比赛时间调整OK键开始/暂停比赛菜单键24秒复位返回键14秒复位这种布局符合直觉新用户也能快速上手。建议在OLED上做个简单的按键说明图方便现场操作。4.3 扩展功能设计除了基本功能系统还支持一些实用扩展球队名称自定义内置了12个学院名称也可自行添加大比分记录记录每节比分比赛数据重置一键恢复初始状态这些功能虽然简单但在实际比赛中很实用。特别是大比分记录功能可以帮助裁判快速核对比赛进程。5. 开发经验与优化建议5.1 开发中的坑与解决方案在开发过程中我遇到过几个典型问题红外接收不稳定通过增加电源滤波电容解决按键响应延迟优化了扫描频率从100ms降到50msOLED闪屏改用局部刷新后解决计时误差大调整了定时器中断优先级特别要提醒的是STM32的I2C接口比较敏感如果通信失败可以尝试降低时钟频率。我把I2C时钟从400kHz降到100kHz后OLED通信就稳定了。5.2 性能优化建议对于想进一步优化的同学可以考虑以下方向改用硬件I2C驱动OLED需要修改底层驱动增加无线模块实现远程控制添加声音提示功能设计更美观的UI界面增加比赛数据存储功能如果要做商业化产品还可以考虑加入球队LOGO显示、广告插播等实用功能。不过作为课程设计现有功能已经足够丰富了。5.3 项目拓展思路这个设计还有很多拓展可能改为其他球类计分系统如排球、乒乓球增加网络功能实现手机APP控制连接大型LED显示屏加入自动判分功能需配合传感器开发双屏版本让双方队员都能看到比分我在完成基础版本后就尝试增加了蓝牙模块现在可以用手机控制计分系统使用起来更加方便。这也说明这个项目的可扩展性确实很好。