【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;

}

}

}

五、实验现象

演示视频:

相关推荐
DIY机器人工房4 小时前
要解决 ESP32 与 STM32 之间 LoRa 通信无应答的问题,可从以下硬件、软件、参数匹配三个维度逐一排查:
stm32·单片机·嵌入式硬件·lora·嵌入式·diy机器人工房
qq_401700414 小时前
STM32的存储起始地址和运行起始地址为什么一样
stm32·单片机·嵌入式硬件
带土14 小时前
6. C语言 共用体及typedef
c语言
-Excalibur-5 小时前
形象解释关于TCP/IP模型——层层封装MAC数据帧的过程
linux·c语言·网络·笔记·单片机·网络协议·tcp/ip
想唱rap6 小时前
C++ list 类的使用
c语言·开发语言·数据结构·c++·笔记·算法·list
点灯小铭7 小时前
基于单片机的楼道声光人体红外智能控制灯设计
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
hazy1k7 小时前
51单片机基础-红外遥控(NEC协议)
stm32·单片机·嵌入式硬件·51单片机·1024程序员节
子不语1807 小时前
STM32——按钮实验
stm32·单片机·嵌入式硬件
牛马大师兄9 小时前
STM32实现低功耗管理使用配置知识梳理笔记
笔记·stm32·单片机·嵌入式硬件·物联网·低功耗
是苏浙9 小时前
零基础入门C语言之深入了解指针3
c语言·开发语言