一、项目背景
篮球比赛是一项节奏快、对时间和比分要求精确的运动。在常规比赛中,场馆使用专业的电子计分系统来记录比赛时间、比分以及进攻时间。对于单片机学习者来说,设计一个简易的篮球计分器,不仅能够加深对 数码管显示、按键输入、定时器中断 等知识的理解,还能锻炼嵌入式系统整体设计能力。
本文介绍一个 基于单片机的篮球计分器设计,系统能够实现:
- 比分显示(四位数码管)
- A队、B队比分加分功能
- 中场交换:分数对调功能
- 比赛时间显示(分钟、秒)
- 进攻时间倒计时(24秒)
二、功能需求分析
-
比分显示
- 使用四位数码管,前两位显示A队得分,后两位显示B队得分。
- 每支队伍可通过按键实现加1分、加2分、加3分。
-
分数对调
- 比赛中场时,交换场地后,需对比分显示进行对调。
-
比赛时间
- A组:比赛倒计时(例如从10:00开始倒计时)。
- B组:比赛正计时(从0:00开始计时)。
- C组:进攻24秒倒计时。
-
按键功能
- A队加1/2/3分
- B队加1/2/3分
- 比分对调
- 比赛时间启动/暂停/复位
- 进攻时间重置
三、系统方案设计
-
硬件部分
- 单片机:STC89C52 或者 STM32 均可实现,这里以 51 单片机为例。
- 显示模块:4位共阴极数码管(动态扫描)。
- 按键模块:独立按键 8~10 个。
- 蜂鸣器(可选) :进攻时间到 0 时蜂鸣提示。
-
软件部分
- 定时器 T0:用于比赛时间计时。
- 定时器 T1:用于数码管动态扫描。
- 按键扫描:消抖、功能识别。
- 逻辑控制:分数加减、对调、进攻时间刷新。
四、硬件电路设计(思路)
-
数码管连接
- P0 口 → 数码管段选(a~g、dp)。
- P2 口 → 数码管位选(位1~位4)。
-
按键连接
- P3 口用于独立按键输入,低电平有效。
-
蜂鸣器(可选)
- P1.0 控制蜂鸣器。
五、软件流程
主程序流程
-
系统初始化(定时器、IO 口)。
-
进入主循环:
- 按键扫描 → 更新比分/功能。
- 定时器中断 → 更新时间(倒计时/正计时/24秒)。
- 数码管刷新显示。
定时器中断服务
- T0:1s 定时 → 更新时间。
- T1:2ms 定时 → 动态扫描数码管。
六、核心代码框架(示例,C语言-51单片机)
#include <REGX52.H>
unsigned char code smg_duan[10] = {0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f}; // 数码管段码
unsigned char scoreA = 0, scoreB = 0;
unsigned char sec = 0, min = 10; // 比赛10分钟倒计时
unsigned char atk24 = 24; // 24秒进攻时间
// 数码管显示缓存
unsigned char display[4] = {0,0,0,0};
void Delay(unsigned int t){
while(t--);
}
// 数码管显示函数
void DisplaySMG(unsigned char pos, unsigned char num){
P0 = 0x00; // 清空段选
P2 = ~(0x01 << pos); // 位选
P0 = smg_duan[num];
Delay(100);
P2 = 0xFF; // 熄灭
}
// 定时器初始化
void Timer0_Init(){
TMOD |= 0x01; // 定时器0模式1
TH0 = 0xFC; // 1ms定时
TL0 = 0x18;
ET0 = 1; EA = 1; TR0 = 1;
}
unsigned int count = 0;
void Timer0_ISR(void) interrupt 1{
TH0 = 0xFC;
TL0 = 0x18;
count++;
if(count >= 1000){ // 1秒
count = 0;
if(sec>0) sec--;
else{
sec=59;
if(min>0) min--;
}
if(atk24>0) atk24--;
}
}
// 主函数
void main(){
Timer0_Init();
while(1){
// 更新数码管数据
display[0] = scoreA/10;
display[1] = scoreA%10;
display[2] = scoreB/10;
display[3] = scoreB%10;
// 动态扫描
DisplaySMG(0, display[0]);
DisplaySMG(1, display[1]);
DisplaySMG(2, display[2]);
DisplaySMG(3, display[3]);
}
}
说明:
- 此处仅给出核心框架,实际需增加 按键扫描函数、分数对调逻辑、24秒复位功能 等。
- 在定时器中断里可以同时处理 比赛时间 和 进攻时间。
- 数码管显示时,可以通过切换模式选择显示比分 / 时间 / 进攻24秒。
七、效果展示
- 比分可实时更新,支持加分、交换显示。
- 倒计时和正计时可灵活切换。
- 24秒倒计时到 0 时蜂鸣器报警。
- 有问题联系QQ849723859