用四位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,一经查实,立即删除!

相关文章

loading linux img2a,嵌入式Linux中initrd的应用--浅析ramdisk、ramfs、initrd和initramfs

看到这样的一句话很让我费解&#xff0c;因为似乎我理解为这样做能够提高一点嵌入式linux启动速度&#xff0c;我对此是非常地感兴趣自此&#xff0c;就开始了我的解惑之旅首先需要知道的是ramdisk和ramfshttp://www.linuxfordevices.com/c/a/Linux-For-Devices-Articles/Intro…

android短信动态权限设置,Android动态权限申请

从HBuilderX1.9.4及以上版本开始&#xff0c;Android平台默认targetSdkVersion从21(Android5.0)调整为23(Android6.0)。Android动态权限申请机制Android6.0(API23)及以后&#xff0c;系统对权限的管理更加严格&#xff0c;放弃了以往manifest中注册所需权限&#xff0c;用户只要…

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 root截图软件下载,截屏软件(无需ROOT)

ScreenshotIt是一款功能简单而专一的小软体&#xff0c;利用它你能够非常方便的对你的Android手机进行捉图操作&#xff0c;并将截取的萤幕快照储存为图片。软体功能&#xff1a;-裁剪你的萤幕截图&#xff1b;-萤幕截图状态栏按键&#xff1b;-可以利用重力感应来截图(摇晃手机…

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网页之间怎么切换效果,HTML教程:网页页面切换的各种效果-♚付涛纪实阁♚...

其中,n表示的就是下面的数&#xff0c;n取不同的值&#xff0c;对应有不同的效果&#xff1a;0、box in 1、box out 2、circle in 3、circle out 4、wipe up 5、wipe down 6、wipe right 7、wipe left 8、vertical blinds 9、horizontal blinds 10、checkerboard across 11、ch…

火车头采集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…

ios html gif 显示,显示gif时出现巨大的内存使用Swift iOS

我正在制作一个应用程序&#xff0c;它在UIImageView中显示gif&#xff0c;并从parse中加载gif。我偶然发现的问题是每当我加载一个Gif时&#xff0c;它会使用大约20 MB的内存&#xff0c;并且当我执行一个segue时&#xff0c;这个内存不会被分配。我从UIImageView中删除图像本…

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

随着科技的不断发展电脑已经走进了家家户户&#xff0c;几乎每一个家庭都有一台甚至是两台电脑&#xff0c;人们对于电脑的需求越来越高&#xff0c;对于电脑的要求也就越来越大。不仅仅是在性能方面外观设计也很重要。随着人们对于更轻更薄的追求&#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;新写的文章也无法预览。所…

855计算机应用基础,2017年曲阜师范大学信息技术与传播学院855计算机应用基础考研导师圈点必考题汇编...

一、选择题1&#xff0e; 有以下程序&#xff1a;程序运行后的输出结果是( )。A.1256B.5634C.5612D.3456【答案】B【解析】第一次funl 传递参数5, 6&#xff0c;输出5, 6, 第二次调用fun2&#xff0c;fun2的作用是将全局变量a 变为3, b 变为4, 故输出3, 4。2&#xff0e; 有以下…