用四位led数码管作显示器的篮球比赛24秒计时器求c语言代码,单片机编程控制LED七段数码管作显示的篮球赛计时计分系统...

本次设计用由AT89C51编程控制LED七段数码管作显示的球赛计时计分系统。系统应具有赛程定时设置,赛程时间暂停,及时刷新甲、乙双方的成绩以及赛后成绩暂存等功能。

内容包括:显示、键盘、时钟等内容设计说明

2.1需求分析

2.1.1 计分系统

分为“A队”和“B队”的“3分”,“2分”,“1分”各六个按键输入部分,以及两队比分的LED显示部分。在每次增加分数的同时,“24秒”计时恢复为初始值,“12分钟”计时暂停,等待比赛的继续进行

2.1.2 计时系统

(1)比赛开始/继续:当“比赛开始/继续”键按下后,“24s”和“12分钟”计时器开始倒计时;

(2)手动24s复位:当“24s复位” 键按下后,“24s”倒计时恢复初始值,“12分钟”倒计时暂停,等待比赛的继续;

(3)比赛暂停:“比赛暂停”键按下后,“24s”倒计时和“12分钟”倒计时均暂停,等待比赛的继续进行;

(4)自动增加比赛节数:当“12分钟”倒计时完成后,判断当前节数是否为最后一节,若不是,则节数自动增加,并“12分钟”和“24s”均恢复默认值,等待下一节比赛的进行。

2.2原理分析

采用单片机AT89C51作为本设计的核心元件。利用7段共阴LED作为显示器件。在此设计中共接入了6个7段共阴LED显示器,其中2个4位LED显示器用于记录AB队的分数,每队1个4位LED显示器显示范围可达到0~999分,足够满足赛程需要;2个两位LED显示器用来记录赛程时间,其中1个用于显示分钟,1个用于显示秒钟;使用1个2位LED显示器用于显示“24s”倒计时,赛程计时均采用倒计时方式。即比赛前将时间设置好,即12分钟,比赛开始时启动计时,直至计时到零为止。本设计中设立了10个按键,其中6个用于设置两队的比分,1个用于比赛开始/比赛继续,1个用于暂停,1个用于手动增加比赛节数,一个用于恢复“24s”倒计时等功能。

2.3总体设计

系统主要包括单片机、LED显示电路、按键控制电路、时钟电路及复位电路等组成

2.4软硬件设计

2.4.1 硬件设计

设计思路:

(1)按键模块设计 :

按键接至P1口和P3口,按键按下时输入是低电平。键的设置如下:“A1”,“A2”,“A3”键是A队加1分、加2分,加3分键盘,B队同理。“比赛开始/比赛继续”是启动键,“比赛暂停”是暂停键。此外,还有两个按键, “24s”复位键,“增加比赛节数”键。

(2) LED显示模块设计 :

显示分为计时和计分显示两个部分,均采用共阴极LED数码管动态扫描显示,由2个四位一体和4个两位一体的共阴极数码管构成。数码管的7个段控端输出经过74HC573驱动器进行电流放大驱动接至P0口。采用动态扫描方式,在足够短的周期内,使各位数码管逐个轮流受控显示。

设计截图:

3fb0588e7e3e7b2114d1ccf647759413.png

2.4.2 软件设计

软件设计采用C语言模块设计方法,程序由主程序、T0中断程序、显示程序、外部中断0程序、按键程序、初始函数、计时函数、延时函数组成。

测试结果与分析

设计采用C语言编程,在Keil C51软件编译环境中,经过编译和连接,生成十六进制的目标代码文件.hex。在硬件上,用Proteus软件绘制出原理图,经过纯电路调试无误后,将生成的目标代码文件加载到Proteus界面的AT89C51中。接着再进行软硬件联合调试,反复调试,直至所有显示及按键功能实现,直至仿真成功。

运行截图:

d045c593bf97b25e00526019bca0832e.png框图

15795cd5d6267a05556ec0fecd5d40ca.png

C语言程序代码:

#include

#include

#define uchar unsigned char

#define uint unsigned int

sbit A8=P2^0;

sbit A9=P2^1;

sbit A10=P2^2;

sbit A11=P2^3;

sfr P00=0x80;

uchar code wei_1[]={0X01,0X02,0X04,0X08,0X10,0X20,0X40,0X80};

uchar code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7c,0x39,0x5e,0x79,0x71,0X00,0X40};

uchar minute=12;  //分

uchar second=0;   //秒

uchar key_status=0;     //按键状态值

uchar scoreA=0;     //A队得分

uchar scoreB=0;     //B队得分

uchar count1=20;    //记录定时器时间

uchar match=1;      //比赛节数

uchar rule_time=24; //记录24秒规则

uchar rule_flag=0;          //记录24秒规则是否启用

/*

初始化IO口

*/

void IO_init(){

A8=0;

A9=0;

}

/*

初始化时间

*/

void time_init(){

TMOD = 0x01;

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

EA = 1;

ET0 = 1;

}

/*

延时函数

*/

void delay_ms(uint z){

uint i;

uchar j;

for(i=0;i

for(j=0;j<100;j++);

}

}

/*

计时函数

*/

void T0_Time() interrupt 1 using 1{

if (count1-- == 0)

{

second--;

rule_time--;

count1 = 20;

}

TH0 = (65536-50000)/256;

TL0 = (65536-50000)%256;

}

/*

时间显示函数

*/

void time_display(uchar w2,uchar d2){

uchar shi1,ge1;

shi1=d2/10;

ge1=d2%10;

P00=wei_1[w2];

A10=1;

A10=0;

P00=table[shi1];;

A8=1;

A8=0;

delay_ms(5);

P00=0;

A10=1;

A10=0;

A8=1;

A8=0;

P00=wei_1[w2+1];

A10=1;

A10=0;

P00=table[ge1];

A8=1;

A8=0;

delay_ms(5);

P00=0;

A10=1;

A10=0;

A8=1;

A8=0;

}

/*

分数显示函数

*/

void score_dispaly(uchar w2,uchar d2){

uchar qian2,shi2,ge2;

qian2=d2/100;

shi2=d2%100/10;

ge2=d2%100%10;

P00=wei_1[w2];

A9=1;

A9=0;

P00=table[qian2];;

A8=1;

A8=0;

delay_ms(10);

P00=0;

A9=1;

A9=0;

A8=1;

A8=0;

P00=wei_1[w2+1];

A9=1;

A9=0;

P00=table[shi2];

A8=1;

A8=0;

delay_ms(10);

P00=0;

A9=1;

A9=0;

A8=1;

A8=0;

P00=wei_1[w2+2];

A9=1;

A9=0;

P00=table[ge2];

A8=1;

A8=0;

delay_ms(10);

P00=0;

A9=1;

A9=0;

A8=1;

A8=0;

}

/*

键盘输入函数

*/

void key(){

static uchar key_new = 0, key_l;

key_status = 0;

P1 = 0x0f;

if((P1 & 0x0f) != 0x0f)

{

delay_ms(1);

if(((P1 & 0x0f) != 0x0f) && (key_new == 1))

{

key_new = 0;

/*

矩阵键盘扫描

*/

key_l = (P1 | 0xf0);

P1 = key_l;

switch(P1)

{

/*

开始计时/比赛继续

*/

case 0x7e:

TR0=1;

rule_flag=1;

time_display(6,rule_time);

break;

/*

暂停比赛

*/

case 0x7d:

TR0=0;

break;

/*

加分,同时24秒清零和总计时器停止计时

*/

case 0xee:

TR0=0;

scoreA +=3;

rule_time=24;

rule_flag=0;

break;

case 0xed:

TR0=0;

scoreA +=2;

rule_time=24;

rule_flag=0;

break;

case 0xeb:

TR0=0;

scoreA +=1;

rule_time=24;

rule_flag=0;

break;

case 0xde:

TR0=0;

scoreB +=3;

rule_time=24;

rule_flag=0;

break;

case 0xdd:

TR0=0;

scoreB +=2;

rule_time=24;

rule_flag=0;

break;

case 0xdb:

TR0=0;

scoreB +=1;

rule_time=24;

rule_flag=0;

break;

/*

增加比赛节数,同时24秒复位和总计时器复位

*/

case 0xbd:

match++;

minute=12;

second=0;

TR0=0;

rule_time=24;

rule_flag=0;

break;

/*

手动24秒复位

*/

case 0xbe:

if(TR0==1){

rule_time=0;

rule_flag=0;

}else{

rule_flag=0;

}

break;

}

}

}

else

{

key_new = 1;

}

}

void main()

{

IO_init();

time_init();

while(1){

key();

if(second==0){

/*

判断某节比赛是否结束

*/

if(minute==0){

/*

判断是否为最后一节比赛

*/

if(match<4){

/*

计时系统恢复为默认值,比赛节数加一

*/

second=60;

minute=11;

match++;

rule_time=24;

rule_flag=0;

}

TR0=0;

}

/*

比赛分钟数减一

*/

else {

second=60;

minute--;

}

}

/*

24秒结束,计时器暂停和24秒复位

*/

if(rule_time<=0){

TR0=0;

rule_time=24;

}

/*

显示

*/

time_display(0,minute);

time_display(2,second);

time_display(4,match);

time_display(6,rule_time);

score_dispaly(1,scoreA);

score_dispaly(5,scoreB);

}

}复制代码以上的Word格式文档51黑下载地址:

7269ff8fd7142ea0f1528660ab33985d.gif

单片机文档 18电3 赵俊杰.docx

(540.65 KB, 下载次数: 8)

2020-12-25 09:42 上传

点击文件名下载附件

下载积分: 黑币 -5

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

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

相关文章

android 获取对话框对象,Android 基本Dialog和自定义Dialog

Android 基本Dialog和自定义DialogDialog类是对话框的基类&#xff0c;但你应该避免直接实例化Dialog ,可以使用子类1.AlertDialog 此对话框可以显示标题&#xff0c;最多三个按钮&#xff0c;可选择列表或自定义布局View.2.DatePickerDialog或TimePickerDialog 此对话框带有允…

android inset 标签,android – 有几个WindowInsets?

WindowInsets描述了一组窗口内容的插图.换句话说,WindowInsets有一个可用的应用程序区域(并有其他信息,如isRound).可用区域不包括StatusBar和NavigationBar的Rect.如果您只想知道StatusBar和NavigationBar的高度,请查看this.你可以得到如下的WindowInsets.以下示例使用WindowI…

android toolbar源码解析,深入理解Android 5.0中的Toolbar

环境说明&#xff1a;Android Studio 2.0V7包版本&#xff1a;com.android.support:appcompat-v7:23.4.0compileSdkVersion 23buildToolsVersion "24.0.0"Toolbar 引入使用XML布局中加入&#xff1a;android:id"id/toolbar"android:layout_width"matc…

android 9图片报错,Android2.1加载9Patch图片运行后报错

今天遇到一个很无语的问题&#xff0c;竟然是9Patch图片上多加了光晕效果。因为需要自定义Button&#xff0c;所以请用了9Patch图片&#xff0c;而且图片上面还有一点光晕效果&#xff0c;同样也被拉伸了&#xff0c;在2.2的系统上面正常能跑&#xff0c;2.1上面就出问题&#…

鸿蒙系统发布IT直播,华为开源平台上线:鸿蒙系统、方舟编译器在列

华为近日官方宣布&#xff0c;方舟编译器将于8月31日正式开源。这一颠覆式的技术堪称安卓系统性能革命&#xff0c;将带来巨大的性能提升&#xff0c;官方称操作流畅度提升可高达60&#xff05;。8月31日凌晨&#xff0c;华为开源平台网站(HUAWEI OpenSource)就迫不及待地悄然上…

火车头采集html文档没内容,火车头采集器:编辑任务中常见问题

1.标题前面大量空白&#xff0c;应该如何采集&#xff1f;答&#xff1a;程序里有html过滤选项&#xff0c;你可以选中过滤这些空白字符,如果有些空白字符不在html过虑里,你可以在过滤选项里添加那些字符。2.同一个页面&#xff0c;很多相同内容&#xff0c;怎么分做为多条记录…

金字塔图表 html,Highcharts 柱形图(柱状图及条形图)之 金字塔图 演示

JS 代码&#xff1a;var categories [0-4, 5-9, 10-14, 15-19,20-24, 25-29, 30-34, 35-39, 40-44,45-49, 50-54, 55-59, 60-64, 65-69,70-74, 75-79, 80-84, 85-89, 90-94,95-99, 100 ];var chart Highcharts.chart(container, {chart: {type: bar},title: {text: 2015 年德…

angular html页面嵌套,使用AngularJS来实现HTML页面嵌套的方法

html不支持嵌入在html页面中的html页面。实现这一功能通过使用以下方式&#xff1a;使用ajax - 让一台服务器来调用获取相应的html页面&#xff0c;并将其设置在html控件的innerhtml。使用服务器端包含 - jsp&#xff0c;php等web端服务器技术可以在包括动态页面中的html页面。…

jquery属于html框架吗,jquery是前端框架吗?

jquery是前端框架吗&#xff1f;jquery不是前端框架&#xff0c;它是一个JavaScript库。框架与库之间最本质区别在于控制权&#xff1a;you call libs, frameworks call you(控制反转)库&#xff1a;库是一个封装好的特定的集合&#xff0c;提供给开发者使用&#xff0c;而且是…

html ajax 菊花,Ajax加载菊花loding效果

Ajax 异步请求的时候&#xff0c;一般都会利用一个动态的 gif小图片来制作一个Ajax Loading &#xff0c;以便增加用户体验。这里我们使用Spin.js &#xff0c;该 js 脚本压缩后5k&#xff0c;可以不用任何图片&#xff0c;任何外部的CSS样式&#xff0c;就可以创建一个Ajax Lo…

非一体式台式计算机,一体台式机推荐及介绍【详解】

随着科技的不断发展电脑已经走进了家家户户&#xff0c;几乎每一个家庭都有一台甚至是两台电脑&#xff0c;人们对于电脑的需求越来越高&#xff0c;对于电脑的要求也就越来越大。不仅仅是在性能方面外观设计也很重要。随着人们对于更轻更薄的追求&#xff0c;电脑渐渐的开始走…

计算机网络模拟器 mac,网易mumu模拟器mac版使用常见问题解决办法_3DM手游

不少Mac设备的用户&#xff0c;在使用网易MuMu模拟器时&#xff0c;都会遇到些许问题。关于大家在使用网易MuMu模拟器Mac版时经常会出现的问题&#xff0c;下面小编也为大家带来了一个FAQ。网易MuMu常见问题解答&#xff1a;1、Mac版安装环境操作系统&#xff1a;mac os 10.11.…

如何让cloudflare缓存html,CloudFlareCDN页面规则缓存设置教程

wordpress博客使用CloudFlare的CDN来加速网站(页面规则缓存设置教程)此篇文章只讲wordpress站点使用CloudFlare CDN的页面规则教程。CloudFlare的CDN有一个很好的特点就是可以整站缓存下来&#xff0c;但是整站缓存时我们是无法登陆后台的&#xff0c;新写的文章也无法预览。所…

hashset java 键值对_Java集合 - HashSet的定义以及用法

HashSet的定义HashSet类实现了Set接口&#xff0c;由一个实际上是HashMap实例的散列表​支持。不能保证该集合的迭代次序&#xff0c;这意味着该类不能保证元素随时间的不变顺序。这个类允许null元素。该类还为基本操作(如添加&#xff0c;删除&#xff0c;包含和大小)提供了恒…

计算机对口高考文化试卷,计算机对口高考模拟试卷

计算机对口高考模拟试卷 (9页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分2011-2012第一学年对口计算机期中试卷一、选择题(每题2分&#xff0c;共50分) 下列各组设备中&#xff0c;全部属…

delve 调试带参数_带你学够浪:Go语言基础系列-环境配置和 Hello world

前面几周陆陆续续写了一些后端技术的文章&#xff0c;包括数据库、微服务、内存管理等等&#xff0c;我比较倾向于成体系的学习&#xff0c;所以数据库和微服务还有后续系列文章补充。最近工作上比较多的 Golang 编程&#xff0c;现在很多互联网公司都在转向 Golang 开发&#…

语音 视频 质量测试软件,DxOMARK官方发布视频,了解如何测试手机音频质量

IT之家10月11日消息 北京时间昨日晚间&#xff0c;DxOMARK正式推出了手机音频评分系统DXOMARK Audio&#xff0c;官方也发布视频告诉大家DXOMARK如何测试手机音频质量。视频中展示了录制环节&#xff0c;包括自拍视频、语音消息、播放视频、游戏、播放音乐等。通过三个步骤测试…

计算机拆卸组装过程,如何拆卸并重新组装笔记本电脑

如何拆卸并重新组装笔记本电脑当您的笔记本电脑需要更换、升级硬件或者清理内部灰尘时&#xff0c;您需要知道如何进行拆卸并重装&#xff0c;跟着本文一起了解是如何进行的吧。详细了解如何安全处理旧组件或笔记本电脑。拆卸笔记本电脑本文只是通用性的拆卸指南&#xff0c;具…

登录服务器用户账户限制,当用户有登录到的限制时,远程桌面登录报错的解决...

------老朱 2015.3.6一客户对普通域用户能够登录到的计算机有着严格的限制&#xff0c;即在用户账户中进行了登录到的设置&#xff0c;比如张三只能登录到张三的电脑&#xff0c;但对服务器账户没有限制&#xff0c;现在准备限制服务器账户能够登录到的服务器&#xff0c;按原来…

js在wap端获取定位_iPhone 定位服务,没用的都关掉

iOS 13 系统带来了很多新功能&#xff0c;同时对用户的隐私保护也进行了再度加强和优化。比如和用户隐私息息相关的定位服务&#xff0c;苹果在「始终」和「永不」之外&#xff0c;又加入了「使用 App 期间」这个更人性化的选项&#xff0c;应用只有在使用期间才会获取你的位置…