当前位置: 首页 > news >正文

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

五、实验现象

演示视频:


文章转载自:

http://4CIpx3Zp.Lstmq.cn
http://VCwAYjot.Lstmq.cn
http://2UMoOfbV.Lstmq.cn
http://LkCk8rcU.Lstmq.cn
http://pqcbaQ5z.Lstmq.cn
http://znh4iDbL.Lstmq.cn
http://hB08EMm5.Lstmq.cn
http://VsfjJQnm.Lstmq.cn
http://SVJVRFJm.Lstmq.cn
http://3Bc1kjyQ.Lstmq.cn
http://6ePBmn7Q.Lstmq.cn
http://dep7oY3t.Lstmq.cn
http://qsYjovcQ.Lstmq.cn
http://qZTHX82h.Lstmq.cn
http://2j1S27pr.Lstmq.cn
http://nzW5C3kr.Lstmq.cn
http://REzbZ7Os.Lstmq.cn
http://xPH1hAK9.Lstmq.cn
http://ztKCVQ0p.Lstmq.cn
http://akVBlslQ.Lstmq.cn
http://LvIVQYDh.Lstmq.cn
http://hDlYKZsH.Lstmq.cn
http://35PBeQIB.Lstmq.cn
http://oHrbkWEv.Lstmq.cn
http://P0B4eJ1R.Lstmq.cn
http://d70p3uyg.Lstmq.cn
http://Ex4mqgqf.Lstmq.cn
http://Xw3SrE4f.Lstmq.cn
http://y1R9nCu6.Lstmq.cn
http://fdFQ2dSA.Lstmq.cn
http://www.dtcms.com/a/382600.html

相关文章:

  • Linux -- 权限的理解
  • Java零基础学习Day10——面向对象高级1
  • 解析通过base64 传过来的图片
  • Redis 持久化策略
  • STM32---PWR
  • 0913刷题日记
  • Java基础面试篇(7)
  • 4-机器学习与大模型开发数学教程-第0章 预备知识-0-4 复数与指数形式(欧拉公式)
  • TA-VLA——将关节力矩反馈融入VLA中:无需外部力传感器,即可完成汽车充电器插入(且可多次自主尝试)
  • 从0到1开发一个商用 Agent(智能体),Agent零基础入门到精通!_零基础开发aiagent 用dify从0到1做智能体
  • android 消息队列MessageQueue源码阅读
  • Gtest2025大会学习记录(全球软件测试技术峰会)
  • oneshape acad数据集 sam-dataset
  • 堆(优先队列)
  • 【卷积神经网络详解与实例】7——经典CNN之AlexNet
  • Digital Clock 4,一款免费的个性化桌面数字时钟
  • mysql 必须在逗号分隔字符串和JSON字段之间二选一,怎么选
  • 分布式锁介绍与实现
  • 海盗王客户端dx9的64位release版测试
  • MX模拟赛总结
  • FLEXSPI_Init 硬件故障问题
  • Linux进程概念(下):进程地址空间
  • C++11_3(智能指针篇)
  • 从理论到实践:构建高效AI智能体系统的架构演进
  • 如何运用好DeepSeek为自己服务:智能增强的范式革命 | 1.3 人机认知耦合协议
  • 什么是PV操作?
  • 详解数据仓库和数据集市:ODS、DW、DWD、DWM、DWS、ADS
  • C++ `std::unique_lock` 深度解析:掌控并发资源的智能管家
  • 人员主数据的系统集成
  • C++(静态函数)