【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_Data4; //数组用于存放处理的设定时间

unsigned char Score6; //用于存储处理的比赛分数

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

void Key_Control();

void main()

{

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

LCD_Init();

Timer0_Init();

while(1)

{

Key_Control();

Time_Data0 = '0' + minute / 10; //赛程时间 分 十位

Time_Data1 = '0' + minute % 10; //赛程时间 分 个位

Time_Data2 = '0' + second / 10; //赛程时间 秒 十位

Time_Data3 = '0' + second % 10; //赛程时间 秒 个位

Temp0 = '0' + match / 10; //赛程节数 十位

Temp1 = '0' + match % 10; //赛程节数 个位

Temp2 = '0' + rule_time / 10; //24秒倒计时 十位

Temp3 = '0' + rule_time % 10; //24秒倒计时 个位

Score0 = '0' + A_Score / 100; //A队分数 百位

Score1 = '0' + A_Score % 100 / 10; //A队分数 十位

Score2 = '0' + A_Score % 100 % 10; //A队分数 个位

Score3 = '0' + B_Score / 100; //B队分数 百位

Score4 = '0' + B_Score % 100 / 10; //B队分数 十位

Score5 = '0' + B_Score % 100 % 10; //B队分数 个位

if(T_biy == 0)

{

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

LCD_Write_Char(5,0,Score0);

LCD_Write_Char(6,0,Score1);

LCD_Write_Char(7,0,Score2);

LCD_Write_Str(8,0,":");

LCD_Write_Char(9,0,Score3);

LCD_Write_Char(10,0,Score4);

LCD_Write_Char(11,0,Score5);

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

}

else

{

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

LCD_Write_Char(5,0,Score3);

LCD_Write_Char(6,0,Score4);

LCD_Write_Char(7,0,Score5);

LCD_Write_Str(8,0,":");

LCD_Write_Char(9,0,Score0);

LCD_Write_Char(10,0,Score1);

LCD_Write_Char(11,0,Score2);

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

}

LCD_Write_Char(0,1,Time_Data0);

LCD_Write_Char(1,1,Time_Data1);

LCD_Write_Str(2,1,":");

LCD_Write_Char(3,1,Time_Data2);

LCD_Write_Char(4,1,Time_Data3);

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

LCD_Write_Char(10,1,Temp0);

LCD_Write_Char(11,1,Temp1);

LCD_Write_Char(13,1,Temp2);

LCD_Write_Char(14,1,Temp3);

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;

}

}

}

五、实验现象

演示视频:

相关推荐
Dr.kangder39 分钟前
嵌入式面试总结(十五)——异常处理
单片机·面试·职场和发展·系统架构·嵌入式
qq_448011162 小时前
C语言中的柔性数组
c语言·开发语言·柔性数组
zlinear数据采集卡2 小时前
D223上位机C#开发实战:从帧解析到波形显示的完整实现
开发语言·arm开发·嵌入式硬件·fpga开发·开源·c#
ACP广源盛139246256733 小时前
蚂蚁百灵 Ling‑3.0‑flash 开源 + 昇腾 0‑Day 原生适配@ACP#GSV9001E 在国产算力矩阵中的机会与落地场景
大数据·人工智能·分布式·单片机·嵌入式硬件
luj_17684 小时前
塔防牌:策略与卡牌的智慧碰撞
服务器·c语言·开发语言·经验分享·算法
Rocktech_ruixun4 小时前
机器人端侧大模型部署对主板有哪些要求?瑞迅主控板分级方案对比
人工智能·嵌入式硬件·机器人
wuyk5555 小时前
3.链表:用指针串联的动态数据结构
c语言·开发语言·数据结构·链表
振南的单片机世界5 小时前
SysTick硬核拆解:既是HAL_Delay的“心跳”,也是RTOS的“节拍器”
arm开发·stm32·单片机·嵌入式硬件
Lzh编程小栈6 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Rocktech_ruixun6 小时前
机器人数据采集能力取决于什么?瑞迅科技RK3588/3576核心板方案深度解析
人工智能·嵌入式硬件·机器人