篮球比赛30秒倒计时器的设计
- 格式:rtf
- 大小:595.73 KB
- 文档页数:10
实验二篮球30秒倒计时电路的设计一、设计任务用小规模集成电路设计篮球比赛中30秒进攻倒计时电路二、设计要求用555定时器产生1秒的标准脉冲信号, 显示器为三十进制计数器,当计时时间到,显示器显示00, 电路具有时间显示功能,计数器清零、启动和暂停/连续计时利用外部开关控制。
电路框图如下图所示。
三、实验原理1、标准秒脉冲发生电路标准秒脉冲发生电路如图2所示,它由555定时器组成多谐振荡器,定时元件R1为15KΩ,R2为688Ω,C为10μF,产生1Hz的标准脉冲信号。
振荡器的频率约为:f= 1.443 / [ ( R1 + 2 R2 ) C2、计数器及译码显示电路计数器采用74LS192同步可逆双时钟计数器。
74LS192的UP、DOWN端分别是加/减计数器的时钟输入端。
在置数控制端LOAD = 1、清零端CLR = 0的情况下,若DOWN = 1, 计数脉冲加入到UP端,则计数器在预置数的基础上完成加计数, CO′端发出进位负跳变脉冲;若UP = 1, 计数脉冲加入到DOWN端,则计数器在预置数的基础上完成减计数,当减计数到0时, BO′借位输出端发出借位负跳变脉冲。
LOAD为异步并行置数控制端,当LOAD′= 0时,计数器置数,LOAD = 1时,计数器处于计数状态。
计数器及译码显示电路如图4所示。
用两片74LS192设计成三十进制减法计数器,由74LS47译码,七段码显示器显示计时时间。
计数器个位接成十进制,置数端A、B、C、D均接低电平“0”。
计数器十位接成三进制, A、B两置数端接高电平“1”, C、D端接低电平“0”。
计数脉冲信号接入个位计数器的DOWN减脉冲输入端(UP端接高电平) 。
根据设计要求,计数器计数到零时应停止计数,为此,将十位计数器的BO′借位端与脉冲信号源通过与门联接,使计数到零时,BO2′= 0,封锁CP信号,计数器保持零状态不变,控制电路发出报警声信号,使报警电路工作,信号灯亮。
篮球30秒计时器课程设计一、引言篮球30秒计时器是一项非常重要的设备,它在篮球比赛中起到了至关重要的作用。
本文将介绍如何进行篮球30秒计时器课程设计,以便让学生们更好地掌握这项技能。
二、课程目标本课程的主要目标是让学生们了解篮球比赛中30秒计时器的使用方法和规则,并且能够熟练地操作该设备。
通过本课程,学生应该能够掌握以下技能:1. 熟悉30秒计时器的外观和功能;2. 理解30秒计时器在篮球比赛中的作用;3. 掌握30秒计时器的使用方法;4. 能够根据比赛情况灵活操作30秒计时器。
三、教学内容1. 介绍30秒计时器的外观和功能在第一节课中,我们将向学生介绍30秒计时器的外观和功能。
首先,我们会向学生展示一个真实的30秒计时器,并让他们了解每个按钮和指示灯所代表的意义。
然后,我们会向学生演示如何启动和停止计时器,并且讲解不同指示灯所代表的含义。
2. 讲解30秒计时器在篮球比赛中的作用在第二节课中,我们将向学生讲解30秒计时器在篮球比赛中的作用。
我们会向学生介绍什么情况下需要使用30秒计时器,并且让他们了解使用30秒计时器的规则和注意事项。
同时,我们还会向学生演示如何根据比赛情况灵活地使用30秒计时器。
3. 掌握30秒计时器的使用方法在第三节课中,我们将教授学生如何正确地操作30秒计时器。
我们会向学生演示如何启动和停止计时器,并且讲解每个按钮所代表的含义。
然后,我们会让学生自己操作30秒计时器,并且纠正他们可能存在的错误。
4. 灵活操作30秒计时器在最后一节课中,我们将模拟篮球比赛场景,并且让学生根据比赛情况灵活地操作30秒计时器。
这样可以帮助学生更好地掌握该技能,并且提高他们的实际应用能力。
四、教学方法1. 讲授法:通过介绍、演示和讲解等方式向学生传授知识。
2. 实践法:让学生亲自操作30秒计时器,并且纠正他们可能存在的错误。
3. 模拟法:模拟篮球比赛场景,并且让学生根据比赛情况灵活地操作30秒计时器。
电子技术课程设计报告学院:衡水学院专业班级:11级电子信息工程学生姓名:王少帅陈敖张豪王展鸿张璐学号:201140513207 201140513293201140513245 201140513191201140513231指导教师:苏明敏完成时间:2013年10月17日成绩:篮球竞赛30S计时器设计报告一、设计要求(1)具有显示30S计时功能,启动和暂停/连续功能(2)在直接清零时,要求数码显示器灭灯(3)设置外部操作开关,控制计数器的直接清零(4)计时器为30S递减计时,计时间隔为1S(5)计时器递减计时到零时,数码显示器不能灭灯,同时发出光电报警信号。
秒脉冲发生器译码显示计数器控制电路报警电路外部操作开关{原理框图二、设计的作用、目的本课程设计是脉冲数字电路的简单应用,设计了篮球竞赛30秒计时器。
此计时器功能齐全,可以直接清零、启动、暂停和连续以及具有光电报警功能,同时应用了七段数码管来显示时间。
此计时器有了启动、暂停和连续功能,可以方便地实现断点计时功能,当计时器递减到零时,会发出光电报警信号。
本设计完成的中途计时功能,实现了在许多的特定场合进行时间追踪的功能,在社会生活中也具有广泛的应用价值。
三、设计的具体实现1.系统概述该电路包括秒脉冲发生器、计数器、译码显示电路、辅助时序控制电路和报警电路等5个部分。
计数器和控制电路是系统的主要部分。
计数器完成30s 计时功能,而控制电路具有直接控制计数器的启动计数、暂停/连续计数、译码显示电路的显示和灭灯等功能2.单元电路设计(或仿真)与分析1)秒脉冲发生器方案一:555集成电路组成多谐振荡电路为系统提供时钟秒脉冲。
方案二:32k晶振15分频得到1HZ的脉冲。
相比较方案一用32k晶振分频更准确且便于调试。
原理图如下:2)计数器、译码显示电路由两片74LS192递减计数器构成。
74LS192是十进制计数器,具有“异步清零”和“异步置数”功能,且有进位和借位输出端。
篮球比赛30秒倒计时电路设计篮球比赛倒计时是体育比赛中非常重要的一个环节,倒计时电路的设计对于比赛的顺利进行起着至关重要的作用。
本文将以设计一个篮球比赛倒计时电路为例,详细介绍其设计原理和实现方法。
一、需求分析篮球比赛倒计时电路的主要功能是实现倒计时功能,包括显示比赛剩余时间和报警功能。
根据题目要求为30秒倒计时,那么需要设计一个能够精确计时30秒的电路。
二、设计思路由于需要实现精确的倒计时,可以采用计时器和显示器结合的方式来实现。
同时,为了能够及时提醒比赛进行者和观众,还需要设计报警功能。
三、电路设计在电路设计方面,可以采用数字集成电路来实现。
1.计时功能设计可以选择一个可编程集成电路(IC)或者计时集成电路(IC)来作为倒计时器。
作为一个例子,可以选择一个7490集成电路作为计时器。
7490是一个具有十进制计数器的集成电路,可以实现从0-9的十进制计数。
其中,用于个位数倒计时的是7490的1号引脚(QA)和15号引脚(QD),用于十位数倒计时的是7490的5号引脚(QA)和11号引脚(QD)。
计时器的输入引脚可以由外部触发器或者时钟发生器提供。
2.显示功能设计可以选择七段LED显示器来显示倒计时的时间。
七段LED显示器是由七个LED组成的,每个LED代表一个数字。
可以通过将不同的LED点亮来显示不同的数字。
具体显示方式可以参考七段LED显示器的数据手册。
3.报警功能设计为了实现报警功能,可以选择一个蜂鸣器作为报警器。
蜂鸣器可以通过输入电流来发出声音。
可以将蜂鸣器与倒计时器相连,当倒计时达到0时,触发报警器发出声音。
四、电路实现根据上述设计思路和步骤,可以将电路实现如下:1.连接7490计时器与七段LED显示器,根据7490计时器的倒计时情况,通过输出引脚来控制LED显示器中的LED点亮情况,从而实现对时间的显示。
2.连接倒计时器与蜂鸣器,当倒计时器倒计时到0时,触发蜂鸣器发出声音,提醒比赛进行者和观众。
篮球30秒计时器课程设计简介篮球30秒计时器是一种用于比赛计时的设备,它起到控制比赛时间的作用。
本篇课程设计将介绍篮球30秒计时器的原理、使用方法以及相关的教学内容。
篮球30秒计时器的原理篮球30秒计时器是一种根据篮球比赛规则设计的计时设备,主要用于掌控比赛时间。
其原理如下: 1. 计时器设置在30秒,根据比赛规则,球队进攻时必须在30秒内投篮。
2. 当一支球队控球开始进攻时,计时器开始倒计时。
3. 如果球队在30秒内未能完成投篮,那么球权转移到对方球队。
4. 如果球队在30秒内完成投篮,并且投篮球进入篮筐,那么该球队得到2分。
篮球30秒计时器的使用方法篮球30秒计时器的使用方法非常简单,主要分为以下几个步骤: 1. 首先,将篮球30秒计时器放置在比赛台上,并确保其电源已接通。
2. 在比赛开始前,按下计时器上的“开始”按钮,计时器开始工作,显示屏上显示的时间为30秒。
3.当一支球队控球开始进攻时,教练或裁判员应立即按下计时器上的“开始”按钮,计时器开始倒计时。
4. 如果球队在30秒内未能完成投篮,计时器倒计时结束后会发出警报声,并自动将球权转移到对方球队。
5. 如果球队在30秒内完成投篮,并且投篮球进入篮筐,计时器会停止倒计时,并显示下一次进攻的时间。
篮球30秒计时器课程设计为了帮助学生更好地理解和运用篮球30秒计时器,我们设计了以下课程内容: 1. 介绍篮球30秒计时器的作用和原理 - 讲解篮球30秒计时器在比赛中的重要作用,以及其设计原理和工作原理。
2. 计时器的使用方法和注意事项 - 具体讲解计时器的使用方法,如何按下开始按钮、如何重置计时器、如何处理倒计时结束后的情况等。
- 强调注意事项,如确保计时器连接正常、不要随意更改计时器设置等。
3. 球队协作训练 - 通过分组练习,让学生模拟比赛情境,分两支球队进行攻防对抗。
- 设定每次进攻时间为30秒,要求学生在规定时间内完成投篮,并根据比赛结果进行得分统计。
《篮球竞赛30S计时器》课程设计说明书题目篮球竞赛30S计时器学生姓名学号所属学院专业班级 2指导教师教师职称目录一、设计要求 (1)二、电路设计与分析2.1设计原理 (1)2.2单元模块 (1)1、秒脉冲信号的产生 (1)2、计数器 (3)3、时钟信号控制电路 (4)4、显示模块电路 (5)5、报警电路 (6)三、外部操作开关 (6)四、设计原理图与电路总图 (6)五、仿真测试性能 (7)六、总结 (9)一、设计要求篮球竞赛30S计时器的基本要求:1)具有显示30S计时功能2)设置外部操作开关,控制计数器的直接清零,启动和暂停/连续功能3)在直接清零时,要求数码显示器灭灯4)计时器为30S递减计时,计时间隔为1S5)计时器递减计时到零时,数码显示器不能灭灯,同时发出光电报警信号〖主要元器〗:NE555(1),74LSl92(2)等二、电路分析与设计2.1设计原理篮球竞赛30S计时器的总体设计方案如下:它主要包括秒脉冲信号,30S 计数器,译码显示器部分,报警电路和外部操作开关五部分组成,其中外部操作开关包括接直接清零,启动和暂停/继续。
2.2单元模块1、秒脉冲信号的产生555定时器主要是通过外接电阻R和电容器C构成充、放电电路,并由两个比较器来检测电容器上的电压,以确定输出电平的高低和放电开关管的通断。
这就很方便地构成从微秒到数十分钟的延时电路、以及多谐振荡器、单稳态触发器、施密特触发器等脉冲波形产生和整形电路。
NE555为8脚时基集成电路,各脚主要功能1地 GND 2触发3输出 4复位5控制电压 6门限(阈值)7放电 8电压Vcc用555定时器构成多谐振荡器:用555定时器构成多谐振荡器电路如图(a)所示。
电路没有稳态,只有两个暂稳态,也不需要外加触发信号,利用电源VCC 通过R1和R2向电容器C充电,使uC逐渐升高,升到2VCC /3时,uO跳变到低电平,放电端D导通,这时,电容通过电阻R2和D端放电,使uC 下降,降到VCC/3时,uO跳变到高电平,D端截止,电源VCC又通过R1和R2向电容器C充电。
水电学院
课程设计任务书
课程名称:数字电路
题目名称:篮球30秒倒计时器
专业:发电厂及电力系统
班级:一班
学号:*********
姓名:***
设计题目智能篮球比赛倒计时器的设计
课程论文的要求设计一个篮球赛计时系统,具有攻方30秒倒计时功能,设计要求如下;
1,具有30秒倒计时功能:用两个共阴数码管显示,其间隔时间为1秒。
2,分别设计启动键和暂停键/继续键,控制两个计时器启动计数,暂停/继续计数功能。
3设置复位键:按复位键可随时返回初始状态,即进攻方计时器放回到30秒。
4,计时器递减数到“00”时,计时器跳回“30”停止工作,并给出声音和发光提示,即直流振荡器发出声响和发光二极管发光。
主要元器件及仪器设备
可逆十进制计数器74LS192三片、三输入或非门74LS27一片,七段译码器74LS48三片,七段译码器CD4511,共阴极数码管SM120501K三个,二输入与非门74LS00一片,四输入与非门74LS20一片,555定时器一片,二输入与门74KS08一片。
开关3个,电容0.01,0.51,1微法各一个,电阻10k,470欧姆若干,LED个等实验板稳压电源,万用表。
个部分。
设计思路
设计方案
74LS192的工作原理计数器单元电路
74LS48管脚图
74LS48功能表:
停止控制电路:
总电路图:。
篮球竞赛30秒计时器课程设计一、课程目标:通过篮球竞赛30秒计时器课程的学习,能够掌握以下技能:1. 能够理解和运用30秒计时器在篮球比赛中的作用和意义;2. 能够熟练掌握30秒计时器的使用方法和使用规则;3. 能够运用30秒计时器进行有效的进攻和防守;4. 培养团队合作精神和比赛策略意识。
二、课程内容:1. 介绍篮球竞赛30秒计时器的作用和意义;2. 讲解30秒计时器的使用方法和使用规则;3. 练习30秒计时器的操作,并进行比赛模拟;4. 教授进攻和防守策略,并应用于30秒计时器的比赛模拟中;5. 进行团队合作练习,培养团队合作精神。
三、课程安排:1. 熟悉知识点:10分钟简单介绍篮球竞赛30秒计时器的作用和意义,让学生明确学习目标。
2. 讲解使用规则:10分钟详细讲解30秒计时器的使用方法和使用规则,让学生熟悉其操作流程。
3. 30秒计时器操作训练:30分钟让学生进行计时器模拟操作练习,错漏重点训练,直到达到熟练操作的程度。
4. 篮球比赛模拟:20分钟组织两个团队进行比赛模拟,练习30秒计时器的应用,同时结合进攻和防守策略。
5. 团队合作练习:10分钟通过进行团队合作练习,培养学生的团队合作精神和比赛策略意识。
四、教学方法:1. 讲授法:通过讲解30秒计时器的使用方法和使用规则,让学生了解其操作流程,熟悉其使用规则。
2. 模拟操作法:通过计时器模拟操作练习,让学生掌握熟练操作的技巧。
3. 实践练习法:组织比赛模拟,结合进攻和防守策略,让学生在实践中掌握30秒计时器的应用。
4. 团队合作法:通过团队合作练习,培养学生的团队合作精神和比赛策略意识,提高他们的团队协作能力。
五、教学评价:通过考核学生在模拟操作练习和比赛模拟中的表现,以及团队工作能力的发挥情况,综合评价学生的学习成果,给予相应的评估和激励。
六、教学资源:1. 30秒计时器2. 篮球场地3. 篮球装备(篮球、球网、球架、护膝等)4. 篮球教学板书5. PPT课件6. 计时器使用规则手册。
篮球竞赛30秒倒计时器设计+原理框图+电路图篮球竞赛30秒倒计时器设计+原理框图+电路图芯片NE555 NE555是时基集成电路,它在应用和工作方式上一般可归纳为3类。
每类工作方式又有很多个不同的电路。
在实际应用中,除了单一品种的电路外,还可组合出很多不同电路,如:多个单稳、多个双稳、单稳和无稳,双稳和无稳的组合等。
下图是NE555的内部功能原理框图和内部管脚图。
NE555内部管脚图芯片74LS161 74LS161是常用的四位二进制可预置的同步加法计数器,它可以灵活的运用在各种数字电路,以及单片机系统种实现分频器等很多重要的功能. <74ls161引脚图>输入输出CR CP LD EP ET D3 D2 D1 D0 Q3 Q2 Q1 Q00 ФФФФФФФФ0 0 0 01 ↑ 0 ФФ d c b a d c b a1 ↑ 1 0 ФФФФФQ3 Q2 Q1 Q01 ↑ 1 Ф0 ФФФФQ3 Q2 Q1 Q01 ↑ 1 1 1 ФФФФ状态码加1<74LS161功能表> 从74LS161功能表中可以知道,当清零端CR=“0”,计数器输出Q3、Q2、Q1、Q0立即为全“0”,这个时候为异步复位功能。
当CR=“1”且LD=“0”时,在CP 信号上升沿作用后,74LS161输出端Q3、Q2、Q1、Q0的状态分别与并行数据输入端D3,D2,D1,D0的状态一样,为同步置数功能。
而只有当CR=LD=EP=ET=“1”、CP脉冲上升沿作用后,计无耻悲鄙下流的网学网总是抄六维论文网器加1。
74LS161还有一个进位输出端CO,其逻辑关系是CO=Q0•Q1•Q2•Q3•CET。
合理应用计数器的清零功能和置数功能,一片74LS161可以组成16进制以下的任意进制分频器。
芯片74LS0074LS00是常用的2输入四与非门集成电路,它的作用很简单,顾名思义就是实现一个与非门。
Vcc 4B 4A 4Y 3B 3A 3Y┌┴—┴—┴—┴—┴—┴—┴┐__ │14 13 12 11 10 9 8│Y = AB )│ 2输入四正与非门74LS00│ 1 2 3 4 5 6 7│└┬—┬—┬—┬—┬—┬—┬┘1A 1B 1Y 2A 2B 2Y GND<74LS00引脚图> 论文网A=1 B=1 Y=0A=0 B=1 Y=1A=1 B=0 Y=1A=0 B=0 Y=1 2.3.2 8421BCD码递减计数器模块74LS192是一块同步8421BCD码加/减计数器,具有直接清零、置数、加锁计数功能。
篮球比赛30秒倒计时器的设计【摘要】篮球比赛30秒钟规则规定:进攻球队在场上控球时必须在30秒钟内投篮出手(NBA比赛为24秒,全美大学体育联合会比赛中为35秒),因此在比赛时裁判既要看比赛又要看秒表计时,而本文介绍的30秒倒计时器可以解决此问题。
【关键词】AT89C51单片机、30秒倒计时器、LED30秒倒计时器的设计和制作有很多方法,本文介绍的30秒倒计时器以AT89C51单片机作为控制单元,采用两个数码管显示时间,用三个按键分别控制计时器的计时开始、复位和暂停。
倒计时器初始状态显示“30”,当裁判员按下计时键,30秒倒计时开始,当计时器时间减到0时,计时器发出声光报警,提示裁判计时时间已到。
一、电路设计30秒倒计时器的电路主要由电源电路、单片机最小系统、按键输入、显示驱动电路、报警电路组成,30秒倒计时器控制电路如图1所示。
图1 30秒倒计时器电路原理图1、按键输入“30秒倒计时器”采用了三个按键来完成计数器的启动计数、复位、暂停/继续计数等功能。
(1)K1键:启动按钮(P3.2)。
按下K1键,计数器倒计时开始,数码管显示数字从30开始每秒递减计数,当递减到到零时,报警电路发出声、光报警信号。
当计数器处于暂停状态时按下K1键将回到计时状态。
(2)K2键:复位按钮(P3.3)。
按下K2键,不管计数器工作于什么状态,计数器立即复位到预置值“30” ,在报警状态时按下K2键还可取消报警。
(3)K3键:暂停/计时切换按钮(P3.4)。
当计数器处于计时状态时按下该键计数器暂停计时,数码管显示数字保持不变;当计数器处于暂停状态按下该键计数器将回到计时状态;初始状态时该键无效。
2、显示驱动电路“30秒倒计时器”用两个共阳数码管来显示时间,数码管显示方式为动态显示。
显示驱动电路中,数码管的段码引脚通过470欧的电阻接到单片机的P1口,两个片选引脚各通过一个9012连接到正5V电源,由P3.0和P3.1控制。
4、报警电路计时时间减到0,显示数码管显示“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,按下“复位键”可将“time”复位为30。
第三个全局变量是int变量“t”,记录响应定时中断0的次数。
根据初始化定义,定时器0以方式1工作,每1ms发出一次中断请求。
控制程序只开放了定时器0中断,因此不会有比定时器0中断更高级的中断被允许,所以每次请求都会立刻被响应。
响应后在中断服务程序中将全局变量“t”加1记录响应中断次数,每响应1000次即为1秒钟。
变量“t”初值为0,在中断服务程序中加1,当“t”为2000时由中断服务程序清0。
在按键驱动程序中,按下启动键、复位键、暂停/启动键时将“t”清0,目的是从0ms开始计时。
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=P3^0;sbit wei2=P3^1;(2)定义字形码LED显示数字0~9以及全灭的字形码表格放在数组zixing[]中。
字形码是固定的表格,定义时加上关键字“code” 表示该表格存放在程序存储器中。
unsigned char code zixing[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};(3)定义数码管LED1和LED2的显示变量为了增加驱动程序的可移植性,笔者为数码管LED1和LED2定义了显示变量。
显示变量就是本驱动程序的对外接口,外部程序只要改变显示变量的值就可改变数码管显示的数值。
定义方式如下:unsigned char led_str[2]={10,10};led_str[0]直接对应数码管LED1, led_str[1]直接对应数码管LED2。
本项目中由专门的子程序将全局变量time计算拆分成led_str[0]和led_str[1]。
void js(){led_str[1]=time/10%10;led_str[0]=time%10;}(4)数码管驱动程序数码管驱动程序“void chushi(char i)”在定时中断服务程序中被调用执行。
根据初始化程序的定义,定时中断服务程序每1ms 被执行一次。
定时中断服务程序中运用全局变量“t”记录进入该服务程序的次数,“t”计满2000由定时中断服务程序清零。
数码管驱动程序的参数“char i”是用来确定当前点亮的是LED1还是LED2,当参数为“0”时点亮LED1,参数为“1”时点亮LED2。
如果我们希望偶数次进入定时中断服务程序时点亮LED1,奇数次进入定时中断服务程序时点亮LED2,我们可以用程序调用语句“chushi(t%2);”轻松实现。
进入数码管驱动程序后首先调用子函数js(),计算当前的led_str[0]和led_str[1]。
接下来将两个数码管全部熄灭以防止余晖的出现。
最后点亮需要点亮的数码管并送出字型码。
驱动程序代码如下:void chushi(char i){js(); //计算显示变量duan=0xff; //去余晖wei1=i; wei2=!i; //确定片选duan=zixing[led_str[i]]; //送字型码}2、按键驱动程序按键驱动程序分为按键识别和按键功能执行两部分。
按键功能执行可在按键按下时或按键抬起后执行,文中将其设计在按键抬起后执行。
(1)定义按键I/O地址根据实际电路,三个按键(启动键、复位键、暂停/启动键)分别接在P3口的P3.2,P3.3和P3.4三个引脚上。
为了取键值方便还将P3口定义为“iokey”,程序中可作定义如下:#define iokey P3sbit key1=P3^2;sbit key2=P3^3;sbit key3=P3^4;(2)按键驱动流程按键识别的通用流程为:I/O口写“1”→判断有无键按下→延时去抖→确定键值→等待按键抬起→执行按键功能。
按键驱动程序中定义了两个静态变量“ts” 和“kv”,分别用来延时去抖和存放键值。
(3)延时去抖静态变量“ts”用来延时去抖。
按键驱动程序在定时中断服务程序中每1ms被执行一遍,每检测到有键按下“ts”加1,检测到无键按下“ts”清0。
按键连续按下20ms,则连续20次执行按键驱动程序时都检测到有键按下,此时静态变量“ts”累加到20,可确认按键按下有效。
为防止按键一直按着不放而使“ts”累加到溢出,确认有键按下后可使“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)执行按键功能按键抬起后第一次执行按键驱动程序时,静态变量“kv”任保持着按键按下时最后得到的键值,以该键值作为参数调用按键执行程序“actkey(kv);”即可执行按键功能。
调用后kv值立刻清0,确保按一次键执行一次按键功能。
驱动程序代码如下:void key(){static unsigned char kv=0;static unsigned char ts=0;key1=1;key2=1;key3=1;if(!(key1&key2&key3)){ts++;if(ts>=20)ts=20; //有键按下if(ts==20)kv=iokey|0xe3; //取键值}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){case 0xfb:act=1;t=0;break;case 0xf7:time=30;t=0; break;case 0xef:act=~act;t=0; break;}}四、结束语本文在编程过程中以面向对象的编程思路封装了两个LED 数码管和三个独立按键。
当其驱动程序在定时中断服务程序中被调用,编程者只要操作其接口:数组“led_str[2]”和函数“actkey(unsigned char k)”,无需直接对硬件进行编程即可改变功能,增强了软件的通用性和可移植性。