![篮球比赛30秒倒计时器的设计_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-3/3/684683c6-23d7-4830-b235-1df0cb7e9775/684683c6-23d7-4830-b235-1df0cb7e97751.gif)
![篮球比赛30秒倒计时器的设计_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-3/3/684683c6-23d7-4830-b235-1df0cb7e9775/684683c6-23d7-4830-b235-1df0cb7e97752.gif)
![篮球比赛30秒倒计时器的设计_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-3/3/684683c6-23d7-4830-b235-1df0cb7e9775/684683c6-23d7-4830-b235-1df0cb7e97753.gif)
![篮球比赛30秒倒计时器的设计_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-3/3/684683c6-23d7-4830-b235-1df0cb7e9775/684683c6-23d7-4830-b235-1df0cb7e97754.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、篮球比赛 30 秒倒计时器的设计 【摘 要】篮球比赛 30 秒钟规则规定:进攻球队在场上控球时必须在 30 秒钟内投篮出手 (NBA 比赛为 24 秒, 全美大学体育联合会比赛中为 35 秒 ,因此在比赛时裁判既要看比赛又要看秒表计时,而本文介绍的30 秒倒计时器可以解决此问题。【关键词】 AT89C51 单片机、 30 秒倒计时器、 LED30 秒倒计时器的设计和制作有很多方法,本文介绍的 30 秒倒计时器以 AT89C51 单片机作为控制单元,采用两个数码管显示时间,用三个按键分别控制计时器的计时开始、复位和暂停。倒计时器初始状态显示 “30,”当裁判员按下计时键, 30 秒倒计时开始,当
2、计时器时间减到 0 时,计时器发出声光报警,提示裁判计时时间已到。一、电路设计30 秒倒计时器的电路主要由电源电路、单片机最小系统、按键输入、显示驱动电路、报警电路组成, 30 秒倒计时器控制电路如图 1 所示。图 1 30 秒倒计时器电路原理图1、按键输入“ 30秒倒计时器 ”采用了三个按键来完成计数器的启动计数、复位、暂停 /继续计数等功能。(1)K1 键:启动按钮( P3.2)。按下 K1 键,计数器倒计时开始,数码管显示数字从30 开始每秒递减计数,当递减到到零时,报警电路发出声、光报警信号。当计数器处于暂停状态时按下 K1 键将回到计时状态。(2)K2 键:复位按钮( P3.3)。按
3、下 K2 键,不管计数器工作于什么状态,计数器立即复位到预置值 “30”在,报警状态时按下 K2 键还可取消报警。(3)K3 键:暂停 /计时切换按钮( P3.4)。当计数器处于计时状态时按下该键计数器暂停计时,数码管显示数字保持不变;当计数器处于暂停状态按下该键计数器将回到计时状态;初始状态时该键无效。2、显示驱动电路“ 30秒倒计时器 ”用两个共阳数码管来显示时间,数码管显示方式为动态显示。显示驱动电路中,数码管的段码引脚通过 470 欧的电阻接到单片机的 P1 口,两个片选引脚各通过一个 9012 连接到正 5V 电源,由 P3.0 和 P3.1 控制。4、报警电路计时时间减到 0,显示
4、数码管显示 “00时”,发光二极管D1 由 P3.5控制发出光报警,同时蜂鸣器由P3.7 控制发出声报警。二、软件编程思路1、全局变量“ 30秒倒计时器 ”动作流程主要受三个全局变量控制。首先是bit 变量 “ act,”当“ act为”“ 1时”倒计时开始,为 “ 0时”倒计时停止, “ act初”值为 “ 0,”可以由按钮操作将其置 “1或”清 “0。”第二个全局变量是 char 变量 “time,”存放倒计时的时间,当倒计时时间为 0 时,发出声光报警。变量 “time的”初值为 30,定时中断服务程序在 “ act为”1 时,每 1s 对其进行减 1 操作,减到 0 时保持为 0,按下
5、 “复位键 ”可将 “ time复”位为 30。第三个全局变量是 int 变量 “ t,”记录响应定时中断 0 的次数。根据初始化定义,定时器 0 以方式 1 工作,每 1ms 发出一次中断请求。控制程序只开放了定时器 0 中断,因此不会有比定时器 0 中断更高级的中断被允许,所以每次请求都会立刻被响应。响应后在中断服务程序中将全局变量 “t加”1 记录响应中断次数,每响应 1000 次即为 1 秒钟。变量 “t初”值为 0,在中断服务程序中加 1,当 “ t为”2000 时由中断服务程序清 0。在按键驱动程序中,按下启动键、复位键、暂停 /启动键时将 “t清”0,目的是从 0ms 开始计时。
6、2、控制流程主程序主要用来检测全局变量 “time当”“time为”0 时发出 “声光报警 ”。按键驱动、显示驱动和 “time操”作都在定时器 0 中断服务程序中进行。其控制流程如图 2 所示。图 2 控制流程图三、软件程序设计1、数码管驱动程序到计时器的两个数码管以动态显示的方式显示计时时间 “time(”全局变量), LED1 显示 “ time的”十位, LED2 显示 “ time的”个位。(1)定义段码数据口和片选信号根据实际电路,在C51 中定义段码的数据口为P1,两个片选信号为P3.0和P3.1。定义如下:#define duan P1sbit wei1=P30;sbit we
7、i2=P31;(2)定义字形码LED 显示数字 09 以及全灭的字形码表格放在数组zixing 中。字形码是固定的表格,定义时加上关键字“code”表示该表格存放在程序存储器中。unsigned char code zixing=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff ;(3)定义数码管 LED1 和 LED2 的显示变量为了增加驱动程序的可移植性,笔者为数码管LED1 和LED2 定义了显示变量。显示变量就是本驱动程序的对外接口,外部程序只要改变显示变量的值就可改变数码管显示的数值。定义方式如下:unsigned char
8、 led_str2=10,10;led_str0直接对应数码管 LED1, led_str1 直接对应数码管 LED2。本项目中由专门的子程序将全局变量 time 计算拆分成 led_str0和 led_str1。void js(led_str1=time/10%10; led_str0=time%10; (4)数码管驱动程序数码管驱动程序 “void chushi(char i在定”时中断服务程序中被调用执行。 根据初始化程序的定义, 定时中断服务程序每1ms 被执行一次。定时中断服务程序中运用全局变量“t ”记录进入该 服务程序的次数, “t计”满 2000 由定时中断服务程序清零。 数码
9、管驱动程序的参数 “char i是”用来确定当前点亮的是 LED1 还是 LED2 ,当参数为 “0时”点亮 LED1,参数为 “1时”点 亮 LED2。如果我们希望偶数次进入定时中断服务程序时点亮 LED1,奇数次进入定时中断服务程序时点亮 LED2 ,我们可以 用程序调用语句 “chushi(t%2;”轻松实现。 进入数码管驱动程序后首先调用子函数 js(,计算当前的led_str0和led_str1。接下来将两个数码管全部熄灭以防止余晖的出现。最后点亮需要点亮的数码管并送出字型码。驱动程序代码如下:void chushi(char i js(; duan=0xff; wei1=i; we
10、i2=!i; / 计算显示变量 /去余晖 /确定片选 /送字型码duan=zixingled_stri; 2 、按键驱动程序按键驱动程序分为按键识别和按键功能执行两部分。按键功 能执行可在按键按下时或按键抬起后执行,文中将其设计在按键抬起后执行。( 1)定义按键 I/O地址 根据实际电路,三个按键(启动键、复位键、暂停/启动键) 分别接在 P3 口的 P3.2, P3.3 和 P3.4 三个引脚上。为了取键值 方便还将 P3 口定义为 “iokey,”程序中可作定义如下: #define iokey P3 sbit key1=P32; sbit key2=P33; sbitkey3=P34;
11、(2)按键驱动流程 按键识别的通用流程为: 口写 “ 1”判断有无键按下 延 I/O 时去抖 确定键值 等待按键抬起 执行按键功能。按键驱动 程序中定义了两个静态变量 “ts和”“kv,”分别用来延时去抖和 存放键值。 (3)延时去抖静态变量 “ts用”来延时去抖。按键驱动程序在定时中断服务 程序中每 1ms 被执行一遍, 每检测到有键按下 “ts加”1, 检测到 无键按下 “ts清”0。按键连续按下 20ms,则连续 20 次执行按键 驱动程序时都检测到有键按下,此时静态变量 “ts累”加到20, 可确认按键按下有效。 为防止按键一直按着不放而使 “ ts累”加到溢出,确认有键按 下后可使
12、“ts的”值保持为 20,或大于 20 的某一个值如 21。 ( 4)取键值确认有键按下后即可通过读取按键的 I/O 口状态来得到键 值。为读取 P3.2、 P3.3 和 P3.4 引脚状态,屏蔽 P3 口其他引脚 的影响,可将读取后的数值按位或上11100011B( 0xE3)再送 给静态变量 “ kv。” 静态变量 “ kv存”放按键的键值,无键按下或按键抬起后 kv 的值为 0。按下启动键 key1 时 kv=11111011B(0xFB),按下 复位键 key2 时 kv=11110111B(0xF7),按下暂停 /启动键 key3 时kv=11101111B( 0xEF)。 (5)执
13、行按键功能按键抬起后第一次执行按键驱动程序时, 静态变量 “kv任”保 持着按键按下时最后得到的键值,以该键值作为参数调用按键 执行程序 “actkey(kv;”即可执行按键功能。调用后 kv 值立刻 清 0,确保按一次键执行一次按键功能。驱动程序代码如下: void key( static unsigned charkv=0; static unsigned char ts=0; key1=1;key2=1;key3=1; if(!(key1&key2&key3 ts+; if(ts>=20ts=20; /有键按下 if(ts=20 kv=iokey|0xe3; / 取
14、键值 else actkey(kv; ts=0; kv=0; 函数 actkey(kv 用来根据键值 “ kv执”行相应操作。当 “kv等” 于 0xFB 时代表启动键 key1 按下,函数 actkey(kv 将全局变量 act 赋值为 “1。”当 “kv等”于 0xF7 时代表复位键 key2 按下,函 数 actkey(kv 将全局变量“ time复”位为 “ 30。”当 “ kv等”于 0xEF 时代表暂停 /启动键按下,函数 actkey(kv 将全局变量 act 取反。 每按一个按钮都有将全局变量 “t清” 0 的操作, 目的是每当复位、 或启动计时时,进入定时中断的次数都从0 开始计算,否则会出现第 1 秒计时不准确的现象。程序代码如下:void actkey(unsigned char k switch(k case0xfb:act=1;t=0;break; c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 全新员工入职合同下载
- 2025广告发布委托合同书版范本
- 全新房地产买卖合同范文下载
- 公司业务担保合同
- 单位货物采购合同格式
- 幼儿园股份合伙经营合作合同书
- 2024年中考物理(安徽卷)真题详细解读及评析
- 地板砖购销合同模板
- 拓宽知识面的重要性主题班会
- 2025如果合同标的不合格怎么办反担保
- 商标法基础知识
- 2025年高考物理一轮复习之机械振动
- 2024年度市政工程项目三方合作协议3篇
- (2024)甘肃省公务员考试《行测》真题及答案解析
- 医院医务人员医德考评标准
- 小红书种草营销师(初级)认证考试真题试题库(含答案)
- 癫痫病人的护理(课件)
- 2024年WPS计算机二级考试题库350题(含答案)
- 2024年6月浙江省高考地理试卷真题(含答案逐题解析)
- 医院培训课件:《如何撰写护理科研标书》
- 河南省郑州市2023-2024学年高二上学期期末考试 数学 含答案
评论
0/150
提交评论