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

}

}

}

五、实验现象

演示视频:

相关推荐
Yupureki4 小时前
从零开始的C++学习生活 4:类和对象(下)
c语言·数据结构·c++·学习
MAR-Sky4 小时前
单片机学习中的一些简单总结
单片机·嵌入式硬件·学习
点灯小铭4 小时前
基于stm32的物联网OneNet火灾报警系统
stm32·单片机·嵌入式硬件·物联网·毕业设计·课程设计
小秋学嵌入式-不读研版4 小时前
C56-字符串拷贝函数strcpy与strnpy
c语言·开发语言·笔记
晨非辰7 小时前
《剑指Offer:单链表操作入门——从“头删”开始破解面试》
c语言·开发语言·数据结构·c++·笔记·算法·面试
许商12 小时前
【stm32】【edgetx】解析链接脚本文件(ld)
stm32·单片机·嵌入式硬件
王夏奇14 小时前
C语言中#pragma的用法
c语言·开发语言
云山工作室14 小时前
基于单片机的三相逆变电源设计
单片机·嵌入式硬件·毕业设计·毕设
Pocker_Spades_A16 小时前
【C语言数据结构】第2章:线性表(2)--线性表的顺序存储结构
c语言·数据结构
国科安芯16 小时前
ASP3605电源芯片关键指标测试说明
功能测试·单片机·嵌入式硬件·pcb工艺