倒计时定时器
- 格式:doc
- 大小:37.00 KB
- 文档页数:5
倒计时定时器设计倒计时定时器是一种常见的计时器类型,经常被用于倒计时活动、比赛等场景中。
它可以根据预设的时间间隔和倒计时时间,实时更新倒计时进度,并在时间结束时触发相应的动作或事件。
在本篇文章中,我们将讨论倒计时定时器的设计与实现。
一、倒计时定时器的功能需求在确定设计倒计时定时器时,我们首先需要明确其功能需求。
下面是一些常见的功能需求:1.设置倒计时时间:用户可以设置倒计时的时间,即预设的时间长度。
2.显示倒计时进度:定时器应该实时显示倒计时的进度,包括倒计时的剩余时间、百分比、进度条等。
3.声音提示功能:用户可以选择在倒计时结束时,通过声音提示来提醒。
4.后台运行功能:定时器可以在后台运行,即使用户切换到其他应用,也能继续计时。
5.自定义样式:用户可以根据自己的喜好,选择不同的样式来显示倒计时页面。
二、倒计时定时器的设计思路在确定功能需求之后,我们可以开始设计倒计时定时器的架构。
以下是一些设计思路:1.数据模型设计:倒计时定时器需要一个数据模型来保存倒计时的相关信息,包括倒计时的起始时间、目标时间、剩余时间等。
2.UI设计:倒计时定时器需要一个用户界面来显示倒计时的进度和其他相关信息。
用户可以通过界面设置倒计时的时间和其他参数。
3.定时器机制:定时器机制可以使用系统提供的定时器API,或者使用线程等其他方式来实现。
定时器应该能够根据设定的时间间隔,实时更新倒计时的进度。
4.声音提示功能:声音提示功能可以使用系统提供的音频API来实现。
在倒计时结束时,播放预设的声音文件。
5.后台运行功能:后台运行功能可以使用系统提供的后台任务API来实现。
在用户切换到其他应用时,定时器可以继续计时,并在合适的时机发送通知。
6.自定义样式:自定义样式可以使用系统提供的界面定制API来实现。
用户可以选择不同的主题、颜色等来定制界面。
三、倒计时定时器的具体实现以下是一个简单的倒计时定时器的实现示例:1.数据模型设计:```javascriptclass Timerconstructor(totalTime)this.totalTime = totalTime; // 倒计时的总时间this.startTime = new Date(; // 倒计时的起始时间}getRemainingTimconst currentTime = new Date(;const elapsedTime = currentTime - this.startTime;const remainingTime = this.totalTime - elapsedTime;return remainingTime;}```2.UI设计:```html<div id="progress-bar"></div><button id="start-button">Start</button><button id="stop-button">Stop</button></div>```3.定时器机制:```javascriptfunction updateTimeconst remainingSeconds = Math.floor(remainingTime / 1000);const progressBar = document.getElementById('progress-bar');if (remainingTime <= 0)clearInterval(interval);playSound(;}function startTimeinterval = setInterval(updateTimer, 100);document.getElementById('start-button').addEventListener('click', startTimer);```4.声音提示功能:```javascriptfunction playSounconst audio = new Audio('sound.mp3');audio.play(;```5.后台运行功能:```javascriptfunction sendNotificatioconst notification = new Notification('Timer Ended', });if (Notification.permission === 'granted')sendNotification(;} else if (Notification.permission !== 'denied')Notification.requestPermission.then(permission =>if (permission === 'granted')sendNotification(;}});```6.自定义样式:```cssbackground-color: white;padding: 20px;font-size: 24px;margin-bottom: 10px;#progress-barbackground-color: blue;height: 10px;margin-bottom: 10px;#start-button, #stop-buttonbackground-color: green;color: white;border: none;padding: 10px 20px;margin-right: 10px;```以上是一个简单的倒计时定时器的设计与实现示例。
单片机课程设计摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动传统控制检测日新月益更新。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用,仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
At89s52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。
使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
模拟多通道压力系统是利用压力传感器采集当前压力并放映在显示器上,它可以分析压力过量程,并发出报警。
并采用电子秤原理可根据输入单价准确的计算出物体的金额。
本篇论文讨论了简单的倒计时器的设计与制作,对于倒计时器中的LED数码显示器来说,我为了简化线路、降低成本,采用以软件为主的接口方法,即不使用专门的硬件译码器,而采用软件程序进行译码。
关键词:AT89C51 LED数码管显示器晶体振荡器目录摘要 (I)第一章概述 (1)1.1 课程设计目的 (1)1.2 总体设计 (1)第二章硬件电路 (2)2.1各个元件介绍 (2)2.1.1 AT89C51的芯片概述 (2)2.1.2 LED数码管显示器概述 (3)2.2 其他元器件介绍及参数选择 (6)2.2.1 单片机的最小系统与复位电路 (6)2.2.2显示电路的设计 (7)第三章软件部分 (9)3.1 相关软件介绍 (9)3.1.1 Keil C软件 (9)3.1.2 Proteus软件 (9)3.2 软件设计 (10)3.2.1 程序框图如图 (10)3.2 .2 软件程序 (11)第四章软件调试 (14)4.1 系统调试工具keil c51 (14)4.2 PROTEUS仿真 (14)第五章电路焊接与调试 (17)5.1 电路板的焊接 (17)总结 (19)参考文献 (20)致谢 (21)第一章 概述1.1 课程设计目的 课程设计是单片机课程教学的最后一个环节,是对学生进行全面的系统的训练。
单片机课程设计报告(电气工程学院)设计题目:倒计时计时器设计专业班级:指导教师:学生姓名:设计地点:第二实验楼设计日期: 2016.6.12—2016。
6.19设计任务书目录摘要 (1)第一章设计方案 (1)1.1 设计任务书分析 (1)1。
2 设计思路 (1)1。
3 设计方案 (1)第二章硬件设计 (3)2.1 功能模块设计 (3)2.2 芯片介绍 (3)第三章程序设计 (5)3.1 程序设计思路 (5)3.2 程序设计工具简介 (5)3。
3 程序流程框图 (5)第四章系统调试 (6)4。
1 调试思路 (6)4.2 调试方法及过程 (6)4。
3 问题及解决措施 (6)第五章总结 (7)5.1硬件 (7)5。
2 程序 (7)心得体会 (8)参考文献 (9)附录一电路原理图 (10)附录二源程序清单 (11)倒计时计数器设计摘要近年来随着计算机在社会领域的渗透,单片机的应用正在不断地走向深入,同时带动着传统控制检测日新月异的更新。
由于单片机具有体积小、易于产品化、面向控制、集成度高、功能强、可靠性高、价格低等特点,其在工业控制、机电一体化、智能仪表、通信等诸多领域中得到了广泛的应用。
在实时检测和自动控制的单片机应用系统中,单片机往往是作为一个核心部件来使用。
但是仅单片机方面知识是不够的,还应根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。
本课程设计针对倒计时系统的设计的需求,介绍了STC15F204EA单片机和数码显示管的部分基本原理,如STC15单片机元件和四位数码显示管在电路板上焊接,电路原理图的介绍,以及写定时器程序等等。
通过Keils软件撰写倒计时定时器程序并且用Proteus仿真电路的绘制并仿真成功,之后把程序输入到单片机中,再做最后的调试工作。
关键词:STC15F204EA单片机;Keils软件;Proteus仿真软件。
In recent years, with the penetration of computer in the social field, SCM applications are constantly go, drive the traditional control detection update changing at the same time。
倒计时定时器电路设计倒计时定时器电路是一个常用的电子电路,在各种应用场景中被广泛使用。
例如,在厨房,我们可以使用倒计时定时器电路来实现烹饪定时;在赛车场上,我们可以使用倒计时定时器电路来准确计时比赛时间等等。
下面是一个关于倒计时定时器电路设计的详细说明:首先,我们需要确定时间范围。
根据实际需求,我们可以选择不同的计时范围,如分钟、小时、天等。
不同的时间范围对应着不同的计数器位数,即需要不同数量的计数器。
例如,如果我们需要设计一个分钟级别的倒计时定时器,那么我们需要使用至少6位的计数器,以便表示60分钟。
其次,我们需要确定时间单位。
在设计倒计时定时器电路时,我们需要确定最小的时间单位,即每次计数的时间间隔。
常见的时间间隔有秒、分、时等。
根据实际需求选择最小时间单位。
然后,我们需要选择适当的计数器和显示单元。
计数器是用来计数的关键元件,可以通过不同的计数器实现不同范围和位数的倒计时。
常见的计数器有二进制加法计数器(如74LS191)、二进制表计数器(如74LS193)等。
显示单元可以是数码管,也可以是液晶显示屏等。
接下来,我们需要设计时钟信号源。
时钟信号源可以是晶振电路,也可以是晶振模块,甚至我们可以利用其他电路的时钟来作为时钟信号源。
设计时钟信号源时,需要确定时钟频率,即每秒或每分钟的脉冲数。
根据时钟频率和时间单位选择相应的频率分频电路,以便生成具有所需时间间隔的时钟信号源。
最后,我们需要设计控制逻辑。
控制逻辑用于控制计数器,根据时钟信号源的脉冲将计数器递减。
当计数器减至0时,需要触发警报或其他操作。
控制逻辑可以使用逻辑门、可编程逻辑器件等来实现。
在设计倒计时定时器电路时,还需要考虑一些额外的功能,如暂停、重置、显示等。
这些功能可以通过增加额外的开关、按钮、显示芯片等元件来实现。
总结起来,倒计时定时器电路设计的关键是确定时间范围、时间单位、计数器和显示单元的选择,设计适当的时钟信号源和控制逻辑。
在设计过程中,需要充分考虑实际需求和制约条件,并结合相应的电子元件来实现倒计时定时器电路。
倒计时定时器设计倒计时定时器是一种常见的计时工具,用来精确计算和显示倒计时的时间。
它被广泛应用在各种场合,如考试倒计时、比赛倒计时、产品推广倒计时等等。
在设计倒计时定时器时,需要考虑以下几个方面:确定计时方式、计时精度、用户界面和功能设计。
以下是一个关于设计倒计时定时器的细致说明,总计1200字。
首先,确定计时方式是设计倒计时定时器的第一步。
常见的计时方式有两种:秒数计时和时间点计时。
秒数计时是指以秒数为单位进行计时,例如倒计时30秒。
在这种计时方式下,用户只需要输入需要倒计时的总时长,系统将自动显示倒计时的剩余秒数。
可以使用计时器对象或定时器线程来实现这种计时方式。
时间点计时是指以特定的时间点为截止时间进行计时,例如倒计时至2024年1月1日。
在这种计时方式下,用户需要输入截止日期和时间。
系统将计算当前时间到截止时间的时间差,并显示剩余的天、小时、分钟和秒数。
可以使用日期时间函数和定时器对象来实现这种计时方式。
其次,计时精度是设计倒计时定时器的另一个要考虑的因素。
计时精度决定了计时器的准确程度,通常有毫秒级和秒级两种选择。
毫秒级计时器具有更高的计时精度,可以实现更精确的倒计时。
但是,毫秒级计时器的实现较为复杂,需要使用更精细的计时机制,可能会占用较多的系统资源。
秒级计时器相对简单一些,可以使用系统提供的定时器函数或对象实现。
虽然计时精度相对较低,但对大多数倒计时场景来说已足够满足需求。
再次,用户界面设计是设计倒计时定时器的另一个重要方面。
一个好的用户界面可以提高用户的使用体验,降低误操作的可能性。
首先,应该提供一个易于设置倒计时时间的输入框或选择器,允许用户输入或选择需要倒计时的时长。
对于时间点计时方式,可以提供日期选择器和时间选择器来选择截止日期和时间。
其次,应该提供一个清晰明了的倒计时显示区域,显示剩余的天、小时、分钟和秒数。
可以使用数字显示或者进度条等形式来展示。
另外,可以提供启动、暂停和重置按钮,以便用户可以根据需要进行操作。
辽宁师范大学《数字电路》课程设计(09级本科)题目:定时器1 学院:物理与电子技术学院专业:电子信息工程班级:班级学号: 14 姓名:张宁指导教师:赵静邱红张卓完成日期:2011 年 10 月 27 日一.设计内容及要求10秒的倒计时定时器,倒计时要求用数码显示,当定时到1秒时,有声音提示,提示声音为秒,当倒计时到0时停止计数二.总体方案设计由设计内容及要求,我设计了一个以NE555构成的多谐振荡电路,来发出一秒间隔的脉冲;用74LS192进行倒计时,通过74LS47连接一个数码显示器;由74LS192发出的高低电平经过逻辑电路变化,连接74LS121来控制蜂鸣器在1秒时响。
三.单元模块设计.1.以NE555构成的多谐振荡器图1 图二NE555的震荡器在本电路中的周期T=C(R1+R2)=1S图三。
图三为多谐振荡电路R1和R2,C的值确保震荡周期为1秒,图三的右下角为复位电路,与下一部分一同介绍。
2.倒计时电路图四图五由74LS192的真值表图四可以看出,若想让元件工作在减计数状态MR,PL非,CPu的值必须分别为0,1,1。
由要求可以看出,192的初始必须是九,所以加了一个复位电路,确保初始值是9.计数器输入端P0,1,2,3对应接高低低高电平。
Q0,Q1,Q2,Q3为计数器输出端接到74LS47上。
NE555的3号管脚与74LS192的4浩管脚相连。
一秒发出一个脉冲,74LS192开始倒计时。
图六4.逻辑电路逻辑电路的作用在于将74LS192输出为一,即Q3Q2Q1Q0=0001时输给报警电路一个负脉冲。
图七图八图九图九管脚功能描述:管脚3(A1)、4(A2)是负边沿触发的输入端;管脚5(B)是同相施密特触发器的输入端,对于慢变化的边沿也有效;管脚10(C ext)和管脚11(R ext/C ext)接外部电容(C x),电容范围在10pF~10μF之间;管脚9(R int)一般与管脚14(V CC,接+5V)相连接;如果管脚11为外部定时电阻端时,应该将管脚9开路,把外接电阻(R x)接在管脚11和管脚14之间,电阻的范围在2~40kΩ之间。
倒计时器⼀、设计任务利⽤单⽚机的定时器/计数器的定时和计数,⽤ LED数码管显⽰计时的时间,某键按下去时;再按⼀下停⽌计时;另⼀键按下去时间清零。
⼆、设计⽅案及⼯作原理⽅案设计:1.有复位的功能。
2.有设置的功能。
3.有定时和计时切换的功能。
4.计时范围0~99.99秒。
5.定时范围0~99分。
⼯作原理:⽤8051芯⽚制作⼀个具⽤倒计时和秒表功能的器件,外接晶振。
当倒计时时,送⼀个数,从这个数⼀直计到0蜂鸣器响。
正计时,0.01秒计满9向0.1秒进⼀,0.1秒计满9向秒个位进⼀,秒个位计满9向秒⼗位进⼀,秒⼗位计满9结束运⾏。
⽬录第⼀章、系统设计要求和解决⽅案第⼆章、硬件实现第三章、软件实现第四章、实现的功能第五章、缺点及可能的解决⽅法第六章、⼼得体会附录⼀、参考⽂献附录⼆、硬件原理图附录三、程序流程图第⼀章系统设计要求和解决⽅案系统设计要求:利⽤单⽚机的定时器/计数器的定时和计数,⽤ LED数码显⽰计时的时间,某键按下去时;再按⼀下停⽌计时;另⼀键按下去时间清零。
解决⽅案:初始化为何种状态,开关是否按下,显⽰是定时状态还是计时状态。
若为定时状态,。
⽤四个共阴数码管LED显⽰起显⽰时间,采⽤动态显⽰的⽅法,P2.4、P2.5、P2.6、P2.7作为位选信号,P0⼝输出选段码。
键盘为独⽴式按键,分别接在P3.2、P3.3、P3.4、P3.5上。
K1为设置/启动功能键。
按下时,系统进⼊时间设置;再按下,系统启动。
K2为倒计时时间⼗位数设定键,按下时⼗位数字在0到9的范围。
K3倒计时个位数设定键,按下时,个位数字在0到9的范围。
K4为复位键。
K5为定时与计时的切换键,按下切换到计时状态,不按为定时状态。
P3.5连接发光⼆极管状态指⽰,系统时间设为定时状态熄灭,倒计时状态闪烁。
P3.6输出控制信号驱动蜂鸣器,倒计时时间到,蜂鸣器响。
开始正计时,正计时结束,蜂鸣器再响,程序结束。
第⼆章硬件实现⽤8051芯⽚制作⼀个具⽤倒计时和秒表功能的器件,外接晶振。
一.设计任务和要求倒计时计时器的用途很广泛。
它可以用做定时,控制被定时的电器的工作状态,实现定时开或者定时关,最长定时时间为999分钟。
它还可以用做倒计时记数,最长记时时间为999秒,有三位数码管显示记数状态。
用三个可预置数的减计数器组成三个二-十进制减计数器。
用三个译码器和三个LED数码显示器,COMSS电路组成秒/分选择器。
另外有控制电路,控制器随着计数器计数的状态发生改变,计时期间,用电气开关断开。
当计时完毕时,用电气开关闭合。
(1)用三个可预置数的减计数器组成三个二-十进制减计数器。
(2)用三个译码器和三个LED数码显示器,COMSS电路组成秒/分选择器。
二.设计的作用与目的(1) 实现定时开或者定时关,最长定时时间为999分钟。
(2)用做倒计时记数,最长记时时间为999秒。
1三.倒计时计时器的设计1.倒计时计时器系统概述用时钟脉冲发生器来产生频率为1Hz的脉冲,即输出周期为1秒的方波脉冲,将该方波脉冲信号送到计数器74LS192的CP减计数脉冲端,再通过译码器74LS48把输入的8421BCD码经过内部作和电路“翻译”成七段(a,b,c,d,e,f,g)输出,显示十进制数,或者将该方波脉冲信号送到减法计数器CD40110的CP减计数脉冲端,通过计数器把8421BCD码经过内部作和电路“翻译”成七段(a,b,c,d,e,f,g)输出,显示十进制数,然后在适当的位置设置开关或控制电路即可实现计数器的直接清零,启动和暂停/连续、译码显示电路的显示。
在74LS192输入端设置4个开关,通过开关的高低电平状态从而实现999秒内任意时间的倒计时。
在电路中加入停止器使其倒计时到000时停止计时并且蜂鸣器响。
系统设计框图如图12图1系统设计框图2. 555定时器制成多谐振荡器多谐振荡器是一种自激振荡器,接通电源后不需外加触发便能产生矩形脉冲。
我们用555定时器构成多谐振荡器的原理很简单,只要将施密特触发器的反相输出端经RC积分电路接回输入端即可。
一.实验目的理解倒计时器工作原理,实现以中小规模集成电路设计计时器的方法,它是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
它是由时钟脉冲产生电路、计数电路、译码驱动及显示电路、报时电路及电源电路组成。
时钟脉冲采用555定时器构成多谐振荡电路产生,通过EDA软件Multisim10绘制了电子电路仿真原理图,并进行仿真,同时用万能板焊接制作了硬件实现电路。
二.系统原理框图图1系统原理框图一.1秒脉冲发生器:秒脉冲信号发生器需要产生一定精度和幅度的矩形波信号。
实现这样矩形波的方法很多,可以由非门和石英振荡器构成,可由单稳态电路构成,可以由施密特触发器构成,也可以由555点哭构成等。
不同的电路队矩形波频率的精度要求不同,由此可以选用不同电路结构的脉冲信号发生器。
本实验中由于脉冲信号作为计数器的计时脉冲,其精度直接影响计数器的精度,因此要求脉冲信号有比较高的精度。
一般情况下,要做出一个精度比较高的频率很低的振荡器有一定的难度工程上解决这一问题的办法就是先做一个频率比较高的矩形波震荡器,然后将其输出信号通过计数器进行多级分项,就可以得到频率比较低精度比较高的脉冲信号发生器,其精度取决于振荡器的精度和分级项数。
2.30秒减法计数器: 30秒减法计数器采用74LS192设计,74LS192是十进制同步加法|减法计数器,采用8421BCD码编码,具有直接清零异步置数功能。
3.控制电路按照系统的要求,电路应该完成以下4个功能;1)当操作直接清零按键时,要求计数器清零。
2)当启动按键闭合时,控制电路应封锁时钟信号CP(秒脉冲信号),同时计数器完成置数功能,显示器显示30秒字样。
当启动按键释放时,计数器开始减法计数。
3)当暂停连续开关处于暂停状态时,控制电路封锁计数脉冲,计数器停止计数,显示器显示原来的数,而且保持不变,当暂停连续开关处于连续状态时,计数器正常计数,另外,外部操作开关都应该采取消抖措施,以防止机械抖动造成电路工作不稳定。
倒计时器的设计前言电子课程设计是电子技术学习中非常重要的一个环节,是将理论知识和实践能力相统一的一个环节,是真正锻炼学生能力的一个环节。
在许多领域中计时器均得到普遍应用,诸如在体育比赛,定时报警器、游戏中的倒时器,交通信号灯、红绿灯、行人灯、交通纤毫控制机,还可以用来做为各种药丸、药片,胶囊在指定时间提醒用药等等,由此可见计时器在现代社会的应用是相当普遍的。
计时器是采用数字电路实现的数字显示计时装置。
本系统由振荡器,计数器,译码器,LED显示器组成。
采用74LS系列中小规模集成芯片。
计时器是用数字集成电路做成的现代计时器,与传统的机械钟相比,它具有走时准确、显示直观、无机械传动装置等优点。
而且钟表的数字化给人们生产生活带来了极大的方便。
本设计主要能完成一下功能:显示59秒倒计时功能;系统设置外部操作开关,控制计时器的启动和暂停/继续功能;计时器为59秒递减计时其计时间隔为1秒;计时器递减计时到“00”同时报警电路发出声音报警,延时5秒等。
整个电路的设计借助于Multisim仿真软件以及数字电路相关理论知识,并在Multisim 下设计和进行仿真,得到了预期的结果。
一.设计要求1.设计一个有“秒”(59秒)显示且倒计时功能计数器2.用小规模集成电子钟,有启动,暂停,继续计时功能3.倒计时完成后具有声音报警功能。
4.画出框图和逻辑电路图、写出设计总结报告二、设计目的:在学完了《数字电子技术》课程的基本理论后,能够综合运用所学知识设计和制作实际需要的简单电子电路,系统地进行电子电路的工程实践训练,锻炼动手能力,培养工程师的基本技能,提高分析问题解决问题的能力。
理解倒计时器工作原理,实现以中小规模集成电路设计计时器的方法,它是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。
它是由时钟脉冲产生电路、计数电路、译码驱动及显示电路、报时电路及电源电路组成。
时钟脉冲采用555定时器构成多谐振荡电路产生,通过Multisim绘制了电子电路仿真原理图,并进行仿真,同时用万能板焊接制作了硬件实现电路。
/*************************************
要求是能进行9999秒倒计时
用C语言实现
*************************************/
#include<at89X51.h>
#define uchar unsigned char
#define uint unsigned int
uchar num_qian,num_bai,num_shi,num_ge;//定义千位,百位,十位,个位。
uint time;//要显示的时间0~9999
uint tcnt;//计时单元
//*****************//
//以下是端口定义
//*****************//
sbit key_qian=P1^0;//按键"千加1"
sbit key_bai =P1^2;//按键"百加1"
sbit key_shi =P1^4;//按键"十加1"
sbit key_ge =P1^6;//按键"个加1"
sbit laba =P3^1;//喇叭
void delay(unsigned int z)//Z毫秒延时子函数
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//*****************//
//以下是七段数码管驱动程序
//*****************//
/**************************************************
** 功能描述: 中断接受字符串驱动程序
**占用引脚资源P30
**占用系统资源串口中断;中断向量4
***************************************************/
#define DUAN P0
#define WEI P2
unsigned char code dispcode[]=
{
0x3F,/*0*/
0x06,/*1*/
0x5B,/*2*/
0x4F,/*3*/
0x66,/*4*/
0x6D,/*5*/
0x7D,/*6*/
0x07,/*7*/
0x7F,/*8*/
0x6F,/*9*/
}; //共阴段码表
//0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,NULL,-
uchar code dispbitcode[]=
{0xef,0xdf,0xbf,0x7f}; //共阴位码表
uchar dispbuf[4],dispcount;//开辟四个显示缓冲区
void ledinit()/***初始化子函数,定时器0刷新显示内容***/ {
TMOD|=0x01; // 定时器0方式1
TH0=(65536-5000)/256; //定时器16位模式
TL0=(65536-5000)%256; //溢出时间:5ms
TR0=1; //开启定时器0
ET0=1; //使能定时器0
EA=1; //系统使能
}
void leddisp()//固定显示某些数字
{
dispbuf[0]=time/1000;
dispbuf[1]=time%1000/100;
dispbuf[2]=time%100/10;
dispbuf[3]=time%10;
}
void keytest()//按键检测程序
{
if(!key_qian)//如果千位按键
{
delay(5);//5毫秒延时去抖
if(!key_qian)//如果千位按键的确按下了
{
num_qian++;//千位数字加一
while(!key_qian);//等待按键松开
}
time+=num_qian*1000;//千位数字加1
}
if(!key_bai)//如果百位按键
{
delay(5);//5毫秒延时去抖
if(!key_bai)//如果百位按键的确按下了
{
num_bai++;//百位数字加一
while(!key_bai);//等待按键松开
}
time+=num_bai*100;//百位数字加1
}
if(!key_shi)//如果十位按键
{
delay(5);//5毫秒延时去抖
if(!key_shi)//如果十位按键的确按下了
{
num_shi++;//千位数字加一
while(!key_shi);//等待按键松开
}
time+=num_shi*10;//十位数字加1
}
if(!key_ge)//如果千位按键
{
delay(5);//5毫秒延时去抖
if(!key_ge)//如果个位按键的确按下了
{
num_qian++;//千位数字加一
while(!key_ge);//等待按键松开
}
time+=num_ge;//个位数字加1
}
}
void main()//主程序
{
ledinit();//数码管中断初始化,定时器0刷新显示内容
while(1)//大循环
{
if((!key_qian)||(!key_bai)||(!key_shi)||(!key_ge))//如果四个按键中的任何一个被按下
keytest();//执行按键检测程序
leddisp();//不断的刷新显示内容
}
}
//*************************************************
//以下是定时器0刷新数码管显示内容驱动程序
//*************************************************
/**************************************************
** 功能描述: 七段数码管驱动程序
**占用引脚资源: 数码管段选,数码管位选
**占用系统资源T0
***************************************************/
void t0(void) interrupt 1 //using 0
{
TH0=(65536-5000)/256; //5ms中断
TL0=(65536-5000)%256; //16位定时器模式
WEI=0xff;//关位选
DUAN=dispcode[dispbuf[dispcount]]; //段选
WEI=dispbitcode[dispcount]; //开位选
dispcount++;
if(dispcount==5)
dispcount=0;
tcnt++; //计数个数加一
if(tcnt==5*200)//满足1S了
{
tcnt=0;//计数个数归零
time--;//时间减一
if(time==0)//时间
while(1);
}
if(time<10)//时间小于10
laba=~laba;//声音报警
}
这是9999秒倒计时的。