【51单片机】【protues仿真】基于51单片机的篮球计时计分器系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、LCD1602液晶显示

2、增加比赛节数,开始或暂停比赛时间,两队加分

3、交换比赛场地时,交换甲、乙两队比分的位置

4、比赛时间结束时,能发出报警指令

5、24秒倒计时功能,复位24秒,24秒倒计时结束

启动蜂鸣器报警,同时比赛时间暂停,处理好后按

一下24秒复位键,比赛继续。

二、使用步骤

基于51单片机的篮球计时计分器系统支持24秒进攻倒计时、12分钟比赛计时,具备暂停/继续功能,场地互换,加分减分和蜂鸣器提示。

三、硬件资源

1、51单片机核心模块

2、按键模块

3、蜂鸣器模块

4、LCD1602显示模块

四、软件设计

#include"KeyBord.h"

#include"LCD1602.h"

#include"Timer.h"

sbit Beep = P3^0;

char rule_time = 24; //24S规则

unsigned int A_Score = 0; //A队分数

unsigned int B_Score = 0; //B队分数

unsigned int T_biy = 0 ; //中场换地标注 0初始

unsigned char match = 1; //比赛节数

unsigned char rule_flag = 0; //记录24S规则是否启用

unsigned char Beep_flag =0 ; //判断蜂鸣器是否报警

unsigned char Beep_flag_24 =0 ; //判断24s蜂鸣器是否报警

unsigned char Start_flag = 0; //开始标志位

unsigned char Time_Data[4]; //数组用于存放处理的设定时间

unsigned char Score[6]; //用于存储处理的比赛分数

unsigned char Temp[4]; //用于存储处理的比赛节数和24S规则

void Key_Control();

void main()

{

Beep_flag = 1; //蜂鸣器报警启用

LCD_Init();

Timer0_Init();

while(1)

{

Key_Control();

Time_Data[0] = '0' + minute / 10; //赛程时间 分 十位

Time_Data[1] = '0' + minute % 10; //赛程时间 分 个位

Time_Data[2] = '0' + second / 10; //赛程时间 秒 十位

Time_Data[3] = '0' + second % 10; //赛程时间 秒 个位

Temp[0] = '0' + match / 10; //赛程节数 十位

Temp[1] = '0' + match % 10; //赛程节数 个位

Temp[2] = '0' + rule_time / 10; //24秒倒计时 十位

Temp[3] = '0' + rule_time % 10; //24秒倒计时 个位

Score[0] = '0' + A_Score / 100; //A队分数 百位

Score[1] = '0' + A_Score % 100 / 10; //A队分数 十位

Score[2] = '0' + A_Score % 100 % 10; //A队分数 个位

Score[3] = '0' + B_Score / 100; //B队分数 百位

Score[4] = '0' + B_Score % 100 / 10; //B队分数 十位

Score[5] = '0' + B_Score % 100 % 10; //B队分数 个位

if(T_biy == 0)

{

LCD_Write_Str(1,0,"H.T"); //对应的位置显示

LCD_Write_Char(5,0,Score[0]);

LCD_Write_Char(6,0,Score[1]);

LCD_Write_Char(7,0,Score[2]);

LCD_Write_Str(8,0,":");

LCD_Write_Char(9,0,Score[3]);

LCD_Write_Char(10,0,Score[4]);

LCD_Write_Char(11,0,Score[5]);

LCD_Write_Str(13,0,"R.T");

}

else

{

LCD_Write_Str(1,0,"R.T"); //对应的位置显示

LCD_Write_Char(5,0,Score[3]);

LCD_Write_Char(6,0,Score[4]);

LCD_Write_Char(7,0,Score[5]);

LCD_Write_Str(8,0,":");

LCD_Write_Char(9,0,Score[0]);

LCD_Write_Char(10,0,Score[1]);

LCD_Write_Char(11,0,Score[2]);

LCD_Write_Str(13,0,"H.T");

}

LCD_Write_Char(0,1,Time_Data[0]);

LCD_Write_Char(1,1,Time_Data[1]);

LCD_Write_Str(2,1,":");

LCD_Write_Char(3,1,Time_Data[2]);

LCD_Write_Char(4,1,Time_Data[3]);

LCD_Write_Str(6,1,"SEC-");

LCD_Write_Char(10,1,Temp[0]);

LCD_Write_Char(11,1,Temp[1]);

LCD_Write_Char(13,1,Temp[2]);

LCD_Write_Char(14,1,Temp[3]);

if(second < 0)

{

if(minute == 0) //判断某节点是否结束

{

if(match < MATCH) //判断是否为最后一节比赛

{

//计时系统恢复为默认值,比赛节数加一

match++;

minute = SET_TIME;

rule_time = RULE_TIME;

second = 0;

}

else

{

second = 0;

}

TR0 = 0; //停止时钟,等待下一次比赛开始

while(Beep_flag)

{

Key_Control();

Beep = ~Beep; //板子为无源蜂鸣器

DelayUs2x(10);

}

}

else

{

second = 59;

minute--;

}

}

if(rule_time < 0 && rule_flag) //24秒结束,球未出手,计时器暂停,24秒复位

{

TR0 = 0;

Beep_flag_24=1;

rule_time = RULE_TIME;

}

if(Beep_flag_24)

{

Key_Control();

Beep = 0;

}

}

}

五、实验现象

演示视频:

相关推荐
三佛科技-187366133972 小时前
分享机械键盘MCU解决方案
单片机·嵌入式硬件·计算机外设
李永奉2 小时前
51单片机-使用IIC通信协议实现EEPROM模块教程
单片机·嵌入式硬件·51单片机
工大一只猿2 小时前
51单片机学习
嵌入式硬件·学习·51单片机
小莞尔2 小时前
【51单片机】【protues仿真】 基于51单片机八路抢答器系统
c语言·开发语言·单片机·嵌入式硬件·51单片机
风_峰2 小时前
Ubuntu Linux SD卡分区操作
嵌入式硬件·ubuntu·fpga开发
liujing102329292 小时前
Day03_刷题niuke20250915
c语言
bing_feilong2 小时前
STM32精准控制水流
单片机·嵌入式硬件
第七序章5 小时前
【C++STL】list的详细用法和底层实现
c语言·c++·自然语言处理·list
l1t7 小时前
利用DeepSeek实现服务器客户端模式的DuckDB原型
服务器·c语言·数据库·人工智能·postgresql·协议·duckdb