基于51单片机的篮球比赛计时器

2023-05-16

目录

  • 基于51单片机的篮球比赛计时器
    • 1、PCB原理图
    • 2、仿真图
    • 3、毕设要求:
    • 4、总体方案设计
    • 5、程序源码
    • 6、资源下载

基于51单片机的篮球比赛计时器

注:本毕设资源可在微信公众号:“Kevin的学习站” 中获取!

原文地址:http://www.51hei.com/bbs/dpj-215748-1.html

1、PCB原理图

2、仿真图

img
img

3、毕设要求:

计分系统:
(1)分为“A队”和“B队”的“3分”,“2分”,“1分”各六个按键输入部分,以及两队比分的LED显示部分。在每次增加分数的同时,“24秒”计时恢复为初始值,“12分钟”计时暂停,等待比赛的继续进行
计时系统:
(1)比赛开始/继续:当“比赛开始/继续”键按下后,“24s”和“12分钟”计时器开始倒计时;
(2)手动24s复位:当“24s复位” 键按下后,“24s”倒计时恢复初始值,“12分钟”倒计时暂停,等待比赛的继续;
(3)比赛暂停:“比赛暂停”键按下后,“24s”倒计时和“12分钟”倒计时均暂停,等待比赛的继续进行;
(4)自动增加比赛节数:当“12分钟”倒计时完成后,判断当前节数是否为最后一节,若不是,则节数自动增加,并“12分钟”和“24s”均恢复默认值,等待下一节比赛的进行。

4、总体方案设计

篮球比赛计时计分器主要包括单片机控制系统、数码管/LCD显示模块、按键控制模块、报警模块、时钟电路及复位电路。通过几个模块的协调工作就可以完成相应的计时计分控制和显示功能。模块框图如下图所示。

本设计采用单片机AT89C51作为本设计的核心元件。利用LCD1602显示屏作为显示器件。LCD1602显示的内容包括比赛队伍的名称和比分情况,并且显示赛程时间(分钟:秒钟)以及比赛节数和“24S”倒计时。本设计中设立了10个按键,其中6个用于设置两队的比分,1个用于比赛开始/比赛继续,1个用于暂停,1个用于手动增加比赛节数,一个用于恢复“24s”倒计时等功能。赛程计时采用倒计时方式,本节比赛结束时,蜂鸣器报警模块进行报警。

5、程序源码

/*=================================================================================================================
 项目说明:计分系统:(1)分为“A队”和“B队”的“3分”,“2分”,“1分”各六个按键输入部分,以及两队比分的LED显示部分。
                      在每次增加分数的同时,“24秒”计时恢复为初始值,“12分钟”计时暂停,等待比赛的继续进行
          计时系统:
                     (1)比赛开始/继续:当“比赛开始/继续”键按下后,“24s”和“12分钟”计时器开始倒计时;
                     (2)手动24s复位:当“24s复位” 键按下后,“24s”倒计时恢复初始值,“12分钟”倒计时暂停,等待比赛的继续;
                     (3)比赛暂停:“比赛暂停”键按下后,“24s”倒计时和“12分钟”倒计时均暂停,等待比赛的继续进行;
                     (4)自动增加比赛节数:当“12分钟”倒计时完成后,判断当前节数是否为最后一节,若不是,则节数自动增加,
                      并“12分钟”和“24s”均恢复默认值,等待下一节比赛的进行。
==================================================================================================================*/

#include"KeyBord.h"
#include"LCD1602.h"
#include"Timer.h"

sbit Beep = P1^5;

char rule_time = 24;   //24S规则

unsigned int A_Score = 0;       //A队分数
unsigned int B_Score = 0;       //B队分数
unsigned char match = 1;        //比赛节数
unsigned char rule_flag = 0;    //记录24S规则是否启用
unsigned char Beep_flag =0 ;    //判断蜂鸣器是否报警
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队分数 个位

        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");

        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;
            rule_time = RULE_TIME;
        }
    }
}

/*========================================
 函数名称:Key_Control
 函数功能:按键控制,每个按键对应功能
=========================================*/
void Key_Control()
{
	switch(KeyScan())
	{
		case 0x77:            //比赛开始/继续
            TR0 = 1;             //定时器开关打开,开始计时
            rule_flag = 1;      //24S规则启用
            Beep_flag = 1;      //蜂鸣器报警启用
            break;

		case 0xb7:            //比赛暂停
            TR0 = 0;          //定时器开关打开,停止计时
            break;

		case 0x7b:             //手动24S倒计时复位
            if(TR0 == 1)
            {
                rule_time = 0;      //24秒清零,等待下次球权
                rule_flag = 0;      //24秒功能停用

            }
            else
            {
                rule_flag = 0;      24秒功能停用

            }
            break;

		case 0xbb:             //增加比赛节数,同时总计时器和24秒复位
            if((match >= MATCH) && (minute == 0))     //判断比赛结束是否超过四节以及此节比赛是否结束
            {  
                TR0 = 0;                   //定时器停止
                match++;                   //赛程节数加一
                minute = 5;                //加时赛赛程时间设置 5分钟
                second = 0;
                rule_time = RULE_TIME;     //24秒恢复初值
                rule_flag = 0;

            }
            break;

		case 0xdb:
            Beep_flag = 0;      //关闭蜂鸣器
 
            break;
                                           //每队加分后赛程停止计时,24秒恢复初值,等待比赛继续开始
		case 0x7d:                         //A队加3分
            TR0 = 0;
            A_Score += 3;                 
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;

		case 0xbd:                         //A队加2分
            TR0 = 0;
            A_Score += 2;
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;    
                                 
		case 0xdd:                         //A队加1分
            TR0 = 0;
            A_Score += 1;
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;

		case 0x7e:                         //B队加3分
            TR0 = 0;
            B_Score += 3;
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;

		case 0xbe:                         //B队加2分
            TR0 = 0;
            B_Score += 2;
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;

		case 0xde:                         //B队加1分
            TR0 = 0;
            B_Score += 1;
            rule_time = RULE_TIME;
            rule_flag = 0;
            break;

		default:break;	
	}
}

6、资源下载

在这里插入图片描述

原文下载地址:http://www.51hei.com/bbs/dpj-215748-1.html

项目的仿真和PCB工程已经放在下面公众号里面,可以关注公众号:Kevin的学习站,输入关键字:“篮球比赛计时器”,就可以免费获取啦!创作不易,但您的点赞、关注、收藏就是对我最大的鼓励!
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于51单片机的篮球比赛计时器 的相关文章

  • 树莓派3B安装win11操作系统-成功版

    三个注意事项 事前准备永恒的决心成功 61 失败 事前准备 1 树莓派3B主板及电源连接 xff1b 2 HDMI的显示器 xff1b 3 USB的键盘鼠标 xff0c 或者有USB连接器的键盘鼠标 永恒的决心 1 其他安装过程 xff0c
  • 树莓派3B+安装Android 系统

    试水在树莓派3B 43 上安装Android 系统 xff08 完整的安卓 xff0c 非Adroid IOT xff0c 因为还不支持 xff09 xff0c 受到了一个小哥安装成功的鼓舞 xff08 带度盘资源 xff1a https
  • WinDbg 的入门经历

    WinDbg 的入门经历 WinDbg 是一款非常好用的调试工具 xff0c 针对于在win上的程序都有很好的调试效果 xff0c 相信玩逆向工程 Net 开发的同学都很熟悉 起因 在调试UCOS操作系统在windows上的仿真问题遇到的多
  • 目标检测网络中的 bottom-up 和 top-down理解

    看目标检测网络方面的论文时 xff0c 出现了一组对比词汇 xff1a bottom up和top down xff0c 查了一些资料 xff0c 结合个人理解 xff0c 得到的看法是 xff1a top down 顾名思义是自上而下进行
  • 2021.08.26学习内容 Win10+GeForce GTX1650安装NVIDIA显卡驱动及CUDA11.4+cuDNN8.2

    之前主要使用Ubuntu系统 xff0c 但是个人笔记本更多使用windows 为了方便跑一些pytorch的小代码 xff0c 所以想在windows配置一下相关环境 xff0c 达到调用GPU运算的目的 记录也是为了自己以后有安装需求少
  • vscode调试webpack-dev-server项目

    先上结果 vscode下载debugger for chrome 插件 创建launch json 添加的时候选择Chrome Launch会自动生成chrome调试模板 xff0c 主要是要加上 34 preLaunchTask 34 3
  • OpenNetworkLinux:i2c-gpio.c源码学习笔记

    OpenNetworkLinux xff1a i2c gpio c源码学习笔记 i2c gpio的init和exit i2c驱动需要首先在平台驱动上进行注册 xff0c 方可提供自身的总线供适配器进行注册 xff0c 注册流程类似于一个内核
  • 每天一个Lodash源码解析

    每天一个Lodash源码解析 chunk 方法介绍自我实现源码分析代码对比知识点补充浮点数转化为浮点数数组创建方法区别js中切割数组方法 slice 方法介绍自我实现源码分析代码对比知识点补充 96 96 gt gt gt 96 96 移位
  • conda的常用操作

    1 查看conda版本 2 更改安装第三方库的源 将国外的源改为清华镜像源 cmd窗口依次输入 xff1a conda config add channels https mirrors tuna tsinghua edu cn anaco
  • 云技术

    什么是 云 与云技术 xff1f 云技术是在分布式计算技术 网格计算基数基础上发展起来的一种计算技术 云技术基于资源虚拟化的方式 xff0c 为用户提供方便快捷的服务 xff0c 可以实现计算与存储的分布式与并行处理 云技术为其他信息技术
  • 什么是上转型对象及其基本特征

    5 12 什么是上转型对象及其基本特征 xff1f 上转型对象 子类对象赋值给父类变量 例如 xff1a package com wangxing test1 父类 public class Person public void testP
  • 【树莓派入门系列】4 树莓派安装测试torch与torchvision

    树莓派运行YOLOV5项目 安装测试torch amp torchvision 项目目录 点击跳转 0 首页 1 前期准备工作 2 配置树莓派系统 3 安装测试opencv 4 安装测试torch amp torchvision 5 测试y
  • javascript中in和includes的区别

    in的用法 遍历对象 span class token keyword let span names span class token operator 61 span span class token punctuation span n
  • centos安装java环境

    方式一 xff1a 安装java环境 1 先查看本地是否自带java环境 xff1a yum list installed grep java 2 卸载自带的java xff08 输入su xff0c 输入root超级管理员的密码 xff0
  • 计算机网络(五) 网络层(中)

    网络层 xff08 中 xff09 3 划分子网和构造超网3 1划分子网3 2使用子网时分组的转发3 3无分类编址CIDR xff08 构造超网 xff09 4 网际控制报文协议 xff08 ICMP xff09 4 1 ICMP报文的种类
  • 【软件工程学习】软件工程概论

    一 软件工程基础 软件是什么 xff1f xff08 1 xff09 软件独立于硬件 早期软件是作为计算机硬件的零件来开发的 xff0c 40年代中后期和50年代早期时 xff0c 为了利用计算机硬件进行研究 xff0c 使用针对专门的硬件
  • Hadoop (四) ——MapReduce 的原理+实现

    MapReduce简介 MapReduce是一种编程模型 xff0c 用于大规模数据集的并行运算 概念 34 Map xff08 映射 xff09 和 34 Reduce xff08 归约 xff09 xff0c 是它们的主要思想 xff0
  • 51单片机oled12864显示时间日期温度

    思路 xff1a 电源接入 第一行显示时间 第二行显示日期 xff0c 屏幕下面左边显示星期 xff0c 右边显示温度 xff0c 当k1按键第一次按下进入设置页面 xff0c 在设置页面 xff0c k1按键为确定 k2按键为循环选择 k
  • python post请求报错:{“error“:“invalid_request“,“error_description“:“Missing grant type“}

    request post请求报错信息 xff1a error invalid request error description Missing grant type 修改为 xff1a 把headers中的 Content Type 改为
  • Ubuntu下teamviewer的安装及使用

    1 到官网下载对应的安装包 xff0c 官网下载网址 xff1a https www teamviewer cn cn download linux coupon 61 CMP SEM CN 20 amp utm source 61 bai

随机推荐