【51单片机】【protues仿真】基于51单片机篮球计时计分器数码管系统

目录

一、主要功能

二、使用步骤

三、硬件资源

四、软件设计

五、实验现象

一、主要功能

1、数码管显示
1、比赛时间为15:00,甲乙队比分默认000,通过按键修改
3、比赛运行的状态下,按开始暂停键,比赛暂停,计时暂停。
4、在比赛进行的状态下按通过按键来对甲乙两队进行加减分
5、在一节比赛时间结束后,按下交换键,比赛时间重新预置为15:00,
同时左右两边数码管的比分交换显示。此时按下启动键可以开始新一节的比赛。
6、报警提示:在一节比赛时间倒计时到00:00时,蜂鸣器发出报警提示。
7、比赛时,24秒会以1秒的速度减,可随时按下24秒复位键重置24秒。

二、使用步骤

51单片机篮球计时计分器是51单片机项目中常用的显示设备,通过控制数码管来显示不同数据,通过按键来改变数码管显示的值。

三、硬件资源

1、51单片机核心模块
2、按键模块
3、蜂鸣器模块
4、数码管显示模块

四、软件设计

#include<reg51.h>
#define LEDData P0

unsigned char code LEDCode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

int minit,second,count,count1;            //分,秒,计数器
char min=15,sec=0;

sbit add1=P1^0;                        //甲对加分,每按一次加1分   /在未开始比赛时为加时间分
sbit dec1=P1^1;                        //甲对减分,每按一次减1分    /在未开始比赛时为减时间分
sbit exchange=P1^2;                    //交换场地
sbit add2=P1^3;                        //乙对加分,每按一次加1分    /在未开始比赛时为加时间秒
sbit dec2=P1^4;                        //乙对减分,每按一次减1分    /在未开始比赛时为减时间秒
sbit p24_sec=P1^5;
sbit secondpoint=P0^7;                //秒闪动点
//----依次点亮数码管的位------
sbit led1=P2^7;
sbit led2=P2^6;
sbit led3=P2^5;
sbit led4=P2^4;
sbit led5=P2^3;
sbit led6=P2^2;
sbit led7=P2^1;
sbit led8=P2^0;
sbit led9=P3^7;
sbit led10=P3^6;
sbit led11=P3^5;
sbit led12=P3^4;

sbit alam=P1^7;                        //报警

bit  playon=0;                        //比赛进行标志位,为1时表示比赛开始,计时开启
bit  timeover=0;                    //比赛结束标志位,为1时表示时间已经完
bit  AorB=0;                        //甲乙对交换位置标志位
bit  halfsecond=0;                    //半秒标志位

unsigned int scoreA;                //甲队得分
unsigned int scoreB;                //乙队得分
char sec24=24;        

void Delay5ms(void)
{
    unsigned int i;
    for(i=100;i>0;i--);
}


void display(void)
{
//-----------显示时间分--------------
    LEDData=LEDCode[minit/10];
    led1=1;
    Delay5ms();
    led1=0;
    LEDData=LEDCode[minit%10];
    led2=1;
    Delay5ms();
    led2=0;
//-------------秒点闪动------------
    if(halfsecond==1)
        LEDData=0x7f;
    else
        LEDData=0xff;
    led2=1;
    Delay5ms();
    led2=0;
    secondpoint=0;
//-----------显示时间秒------------
    LEDData=LEDCode[second/10];
    led3=1;
    Delay5ms();
    led3=0;
    LEDData=LEDCode[second%10];
    led4=1;
    Delay5ms();
    led4=0;
//-----------显示1组的分数百位-------
    if(AorB==0)
        LEDData=LEDCode[scoreA/100];
    else
        LEDData=LEDCode[scoreB/100];
    led5=1;
    Delay5ms();
    led5=0;
//---------------显示1组分数的十位-----------
    if(AorB==0)
        LEDData=LEDCode[(scoreA%100)/10];
    else
        LEDData=LEDCode[(scoreB%100)/10];
    led6=1;
    Delay5ms();
    led6=0;

//---------------显示1组分数的个位-----------
    if(AorB==0)
        LEDData=LEDCode[scoreA%10];
    else
        LEDData=LEDCode[scoreB%10];
    led7=1;
    Delay5ms();
    led7=0;

//-----------显示2组分数的百位-------
    if(AorB==1)
        LEDData=LEDCode[scoreA/100];
    else
        LEDData=LEDCode[scoreB/100];
    led8=1;
    Delay5ms();
    led8=0;
//-----------显示2组分数的十位-----------
    if(AorB==1)
        LEDData=LEDCode[(scoreA%100)/10];
    else
        LEDData=LEDCode[(scoreB%100)/10];
    led9=1;
    Delay5ms();
    led9=0;

//-----------显示2组分数的个位-----------
    if(AorB==1)
        LEDData=LEDCode[scoreA%10];
    else
        LEDData=LEDCode[scoreB%10];
    led10=1;
    Delay5ms();
    led10=0;

//-----------显示时间分--------------
    LEDData=LEDCode[sec24/10];
    led11=1;
    Delay5ms();
    led11=0;
    LEDData=LEDCode[sec24%10];
    led12=1;
    Delay5ms();
    led12=0;
}

//******************************主函数*************************************************
void main(void)
{
    TMOD=0x11;
     TL0=0xb0;
     TH0=0x3c;
     TL1=0xb0;
     TH1=0x3c;
    minit=min;                
    second=sec;
     EA=1;
    ET0=1;
    ET1=1;
     TR0=0;
    TR1=0;
    EX0=1;
    IT0=1;
    IT1=1;
//    EX1=1;
    PX0=1;
//    PX1=1;
    PT0=0;
    P1=0xFF;
    P3=0xFF;
    alam=1;
     while(1)
     {
        keyscan();
        display();            
    }
}

void PxInt0(void) interrupt 0
{
    Delay5ms();
    EX0=0;
    alam=1;
    TR1=0;
    if(timeover==1)
    {
        timeover=0;
    }

    if(playon==0)
    {
        playon=1;                //开始标志位
        TR0=1;                    //开启计时
        
        if((minit+second)==0)
        {
            sec24=24;
            minit=min;            
            second=sec;
        }
    }
    else
    {
        playon=0;                //开始标志位清零,表示暂停
        TR0=0;                    //暂时计时
    }    
    EX0=1;                        //开中断    
}

五、实验现象

演示视频:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94843.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94843.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[读论文]Hunyuan 3D 系列

1.0&#xff1a; &#xff08;adaptive clasisfier guidance&#xff0c;input 输入一个没cam的branch&#xff1b;提高triplane分辨率&#xff09; 总结&#xff1a; 大规模再train zero123&#xff0c;但角度设置不同&#xff1b;adaptive clasisfier guidance&#xff08;f…

深入理解文本向量嵌入(Vector Embeddings):原理、实践与应用场景

深入理解文本向量嵌入&#xff08;Vector Embeddings&#xff09;&#xff1a;原理、实践与应用场景 1. 什么是向量嵌入&#xff1f; 文本向量嵌入&#xff08;Vector Embedding&#xff09;是一种将文本转化为数值向量的技术&#xff0c;使得字符串之间的关联性可以通过数值…

微论-神经网络中记忆的演变

从微突触到宏认知&#xff1a;论神经网络中记忆的生成、固化与演化人脑的智能&#xff0c;并非源于单个神经元的孤立活动&#xff0c;而是诞生于由万亿突触连接所构成的庞大而复杂的网络动态之中。在这个网络中&#xff0c;连接权重的强度分布——即强的约束与弱的变数——共同…

机器视觉学习-day07-图像镜像旋转

图像的镜像旋转分为三种&#xff0c;分别使用filpcode的参数表示&#xff1a;flipcode0&#xff0c;垂直翻转&#xff08;x轴为中线&#xff09; 垂直翻转可以把src沿着x轴翻转&#xff0c;坐标从&#xff08;x,y&#xff09;翻转为(x,-y)。flipcode>0&#xff0c;水平翻转&…

Python备份实战专栏第2/6篇:30分钟搭建企业级API认证系统,安全性吊打90%的方案

30分钟搭建企业级API认证系统&#xff0c;安全性吊打90%的方案 专栏导语&#xff1a;《从零到一&#xff1a;构建企业级Python Web自动化备份系统实战指南》第2篇 作者简介&#xff1a;madechango架构师&#xff0c;负责设计零安全事故的API认证系统&#xff0c;拦截100%非法请…

第6篇:链路追踪系统 - 分布式环境下的请求跟踪

项目地址&#xff1a;https://github.com/nemoob/atlas-log 开箱即用。前言 在微服务架构中&#xff0c;一个用户请求往往会经过多个服务的协作处理。本章将实现一个轻量级的链路追踪系统&#xff0c;让日志具备分布式追踪能力。 分布式链路追踪基础概念 链路追踪的核心价值 #m…

ubuntu25.04编译最新版本qgroundcontrol

编译系统版本: 编译器版本: 编译成功效果

如何在 Docker 和AKS上使用 IIS

前言 在我们的一个客户项目中,我们有一个混合 Swarm 集群,其中包含 Linux 和 Windows 节点。在 Windows 节点上,我们运行了许多 IIS 容器,这些容器运行着多个 Web 应用程序。在这篇博文中,我想向您展示在 Docker 容器中将网站部署到 IIS 上是多么简单。 Internet 信息服…

uniapp 页面favicon.ico文件不存在提示404问题解决

1. uniapp 页面favicon.ico文件不存在提示404问题解决 1.1. 场景 在uniapp中经常出现的&#xff0c;因为找不到 favicon.ico 而报404错误的问题。 GET http://localhost:5174/favicon.ico 404 (Not Found)1.2. 问题原因 在document.ejs中使用link标签相对路径引入文件。 <…

Magicodes.IE.Pdf 生成导出PDF文件 bytes Stream FileStreamResult 下载

1、ExporterAttribute&#xff1a;导出特性 Name&#xff1a;名称 HeaderFontSize&#xff1a;头部字体大小 FontSize&#xff1a;正文字体大小 MaxRowNumberOnASheet&#xff1a;一个Sheet最大允许的行数&#xff0c;设置了之后将输出多个Sheet AutoFitAllColumn&#xff1a;自…

Python LangChain RAG从入门到项目实战10.:质量评价指标体系

好的&#xff0c;RAG (Retrieval-Augmented Generation) 系统的评估是一个多维度的问题&#xff0c;需要同时对检索器 (Retriever) 和生成器 (Generator) 的性能进行衡量。 评估指标主要分为三大类&#xff1a;检索质量、生成质量 和 整体系统质量。下图清晰地展示了这些核心指…

【记录】Copilot|Github Copilot重新学生认证通过方法(2025年7月,包括2FA和认证材料、Why are you not on campus)

文章目录前言步骤最重要的一步前言 事实上&#xff0c;Github Copilot马上就要开源了&#xff0c;我原本的认证过期了。但是在我体验了众多的代码补全工具实在是太难用了之后&#xff0c;我觉得一天也等不了了&#xff0c;就去再一次认证了学生认证。 这次严格了很多&#xff…

【C语言16天强化训练】从基础入门到进阶:Day 13

&#x1f525;个人主页&#xff1a;艾莉丝努力练剑 ❄专栏传送门&#xff1a;《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C基础知识知识强化补充、C/C干货分享&学习过程记录 &#x1f349;学习方向&#xff1a;C/C方向学习者…

单元测试到底是什么?该怎么做?

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快一、什么是单元测试&#xff1f;单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范…

PostgreSQL【应用 04】加解密扩展 pgcrypto 使用实例(加密、导出、导入、解密流程说明)

加解密扩展 pgcrypto 使用实例1.需求说明2.工具说明2.1 环境说明2.2 插件添加3.实例分析3.1 测试数据3.2 进行加密3.3 数据导出3.3.1 Navicat 导出3.3.2 copy 命令导出3.4 数据解密3.4.1 Navicat 导入3.4.2 copy 导入3.5 坑1.需求说明 从内网导出敏感数据的时候&#xff0c;对…

SDK、JDK、JRE、JVM的区别

SDK、JDK、JRE、JVM的区别一、SDK二、JDK三、JRE四、JVM五、JDK、JRE、JVM三者关系图一、SDK SDK&#xff08;Software Development Kit&#xff0c;程序软件开发工具包&#xff09;&#xff0c;可以认为jdk只是sdk的一种&#xff08;子集&#xff09;&#xff0c;而当提及jav…

如何启动一个分支网络改造试点?三步走

在多云化、全球化的今天&#xff0c;企业的分支网络早已不仅仅是“能连”的问题。视频会议卡顿、ERP 响应延迟、跨境访问不稳、合规风险增大……这些都让 CIO 和 IT 负责人越来越清楚&#xff1a;分支网络改造是数字化的必修课。但是&#xff0c;面对几百甚至上千个分支机构&am…

四,设计模式-原型模式

目的原型模式的产生是为了解决一个问题&#xff0c;即复制对象时对被复制对象所属类的依赖。当需要复制一个对象时&#xff0c;需要遍历对象中的所有成员并进行复制&#xff0c;但存在一些问题&#xff1a;某些成员对象可能是私有的无法访问。同时要复制某个对象&#xff0c;那…

(笔记)Android窗口管理系统分析

概述 Android窗口管理系统是Android UI框架的核心组件&#xff0c;负责管理所有应用窗口的显示、布局、层级、焦点和输入事件分发。WindowManagerService&#xff08;WMS&#xff09;作为系统服务&#xff0c;协调Surface、Activity、View等组件&#xff0c;为用户提供流畅的界…

WebIDEPLOY 技术支撑草莓数字产业链的构建逻辑与实践路径—— 草莓智能育苗系统实践应用分析

一、WebIDEPLOY 技术与草莓产业数字化的适配逻辑WebIDEPLOY 技术以 “低门槛接入、全链路协同、数据驱动” 为核心特征&#xff0c;其底层架构可精准对接草莓产业链的碎片化需求。通过零代码设备接入模块&#xff0c;能快速整合育苗棚传感器、种植区智能设备、销售端数据平台等…