1、摘 要本次设计以AT89C52芯片为核心,辅以必要的外围电路,设计了一个简易的数字电子时钟,它由5V直流电源供电。在硬件方面,除了CPU外,使用两个四位一体的七段LED数码管和一个单独的共阳极数码管显示时、分、秒。四个简单的独立按键实现对时间的调整以及时钟/秒表功能的转换。软件方面采用C语言编程,使用keil软件进行编程与调试,使整个电子时钟能够完成时间的显示,调时,秒表,报时等功能。数字时钟是采用数字电路实现对“时”、“分”、“秒”数字显示的计时装置。数字时钟的精度、稳定度远远超过老式的机械时钟。在这次设计中,我们采用LED数码管分别显示时、分、秒,以24小时计时方式,根据数码管动态显示原理
2、来进行显示,用12MHz的晶振产生振荡脉冲,定时器计数。数字时钟体积小巧,价格低廉,时间精度高,使用方便,功能全,便于集成化而受广大消费的喜爱,因此得到了广泛的应用。关键词:单片机;数字电子时钟;LED;数码管ABSTRACTThis design with AT89C52 chip as the core, supplemented by the necessary peripheral circuit, design a simple digital electronic clock, it consists of 5 v dc power supply. In terms of hard
3、ware, in addition to the CPU, using two four one of the seven segment LED digital tube and a single anode digital tube display when, minutes and seconds. Four simple implementation independent buttons adjust your time as well as the conversion clock/stopwatch function. Software using C language prog
4、ramming, programming and debugging, using keil software to complete the whole electronic clock time, according to the adjustment, timing alarm clock, reset, etc. Digital Clock is a digital circuit implementation of the “when”, “minutes”, “seconds” the figures show the timing device. Digital clock pr
5、ecision, stability, far more than the old mechanical clock. In this design, we use LED digital display hours, minutes, seconds, to 24-hour time mode, according to digital control theory to dynamic display to display, use the 12MHz crystal oscillation pulse, the timer count.Digital clock is its compa
6、ct, low cost, travel time and high precision, easy to use, features and more, easy integration and loved by the general consumer, so widely used. Keywords: single chip; digital electronic clock;LED; digital tube 目 录 摘要 ABSTRACT 1 绪论11.1 研究的背景11.2 数字时钟的意义与应用12 整体设计方案3 2.1 设计要求3 2.2 整体方案的设计3 2.2.1 整体方
7、案的确定32.2.2 电路设计框图4 2.3 单片机的介绍43 数字时钟硬件电路设计7 3.1 最小系统的设计73.2 数码管显示电路的设计 103.2.1 单个数码管简介 103.2.2 四位一体数码管简介 103.3 蜂鸣器控制电路的设计 123.4 按键控制电路的设计 134 数字时钟的软件设计 164.1 主程序设计 17 4.2 数码管显示子程序设计 18 4.3 按键检测子程序设计 19 4.4 蜂鸣器报时子程序设计 205 数字时钟的仿真及制作 21 5.1 调试与仿真 215.2 仿真图缺陷分析 245.3 数字时钟的制作 25总结 28参考文献 29致谢 30附录 程序清单3
8、11 绪论1.1 研究的背景电子技术是十九世纪末、二十世纪初开始发展起来的新兴技术,二十世纪发展最迅速,应用最广泛,成为近代科学技术发展的一个重要标志。在其推动下,现代电子产品正在以前所未有的革新速度,向着功能多样化、体积最小化、功耗最低化的方向迅速发展,电子技术的发展有力的推动社会生产力的发展。单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。由于单片机集成度高、功能强、可靠性高、体积小、功耗低、使用方便、价格低廉等一系列优点,目前已经渗入到人们工作和生活的方方面面,单片机的应用领域已从面向工业控制、通讯、交通、智能仪表等迅速发展到家用消费产品、办公自动化、汽车电子
9、、PC机外围以及网络通讯等广大领域。单片机模块中最常见的是数字钟,数字时钟路技术实现时、分、秒与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。 1.2 数字时钟的意义与应用基于单片机的数字电子时钟是采用电子电路实现对时、分、秒进行数字显示的计时装置,广泛应用于个人家庭,室外广场,汽车站和火车站等公共场所,成为人们日
10、常生活中不可少的必需品。机械式钟表虽然也可以告知人们时间,也可以定时,显示日历。但是由于受到机械结构、动力和体积的限制,在功能、性能以及造价上都没办法与电子时钟相比。由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表原先的报时功能。诸如定时自动报警、0按时自动打铃、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。因此,更为先进的电子钟的研究有着良好的发展前景和市场潜力。数字钟已成为人们日常生活中:必不可少的必需品,广泛用于个人
11、家庭以及车站、码头、剧场、办公室等公共场所,给人们的生活、学习、工作、娱乐带来极大的方便。由于数字集成电路技术的发展和采用了先进的石英技术,使数字钟具有走时准确、性能稳定、携带方便等优点,它还用于计时、自动报时及自动控制等各个领域。2 整体设计方案2.1 设计要求(1)用六位LED数码管显示时、分、秒。(2)以24h(小时)计时方式。(3)白天整点报时,晚上22点后不报时。(4)可实现时分调整、秒表功能转换。(5)可实现时分调整、时钟功能转换。2.2 整体方案的设计2.2.1 方案的选择本次设计的方案有许多种,下面列出了三种方案:方案一:基于数字电路的数字钟。传统的数字钟以最为基本的数字电路来
12、实现的。其设计复杂,体积大,运行稳定性不好。所以不考虑。方案二:通过单片机AT89C52芯片为主控电路,由电源电路、单片机主控电路、按键控制电路和蜂鸣器等组成。本次设计就是通过单片机为主控电路,通过电路仿真而实现。使用Proteus 软件进行绘制仿真电路图,用Medwin软件进行编程与调试,即用汇编语言编写程序。方案三:通过单片机AT89C52芯片为主控电路,由电源电路、单片机主控电路、按键控制电路和蜂鸣器等组成。本次设计就是通过单片机为主控电路,通过电路仿真而实现。使用Proteus 软件进行绘制仿真电路图,用keil软件进行编程与调试,最终生成hex文件,传入单片机内部,从而实现仿真效果。
13、 即用C语言来编写程序,以实现最终的目标。通过比较各种方案的优缺点以及自己学习过的专业知识,最终确定按照第三种方案实施。第三种方案相比第一、第二种方案而言,不需要对单片机的各种指令以及不同存储器的寻址、寄存器分配等有所掌握,而只需用基本的C语言知识就可以实现设计的要求。所以此次设计采用第三种方案。2.2.2 电路设计框图根据本次设计的要求,在尽量要求准确精简的条件下设计了以下电路框图。本次设计包含有四个主要的部分:单片机的最小系统,即由单片机,时钟电路,复位电路组成;蜂鸣器控制电路;数码管显示电路和按键控制电路。其整体设计框图如下图2-2所示:按键控制电路数码管显示电路蜂鸣器控制电路时钟电路复
14、位电路AT89C52 单片机图2-1 整体设计框图2.3 单片机的介绍 单片机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。 单片机经过几代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。其发展趋势不外乎以下几个方面:1.多功能单片机中尽可能地把所需要的存储器和I/O口都集成在一块芯片上,使得单片机可以实现更多的功能。比如A/D、PWM、PCA(可编程计数器阵列)、WDT(监视定时器-看家狗)、高速I/O口及计数器的捕获/比较逻辑等。有的单片机针对某一个应用领域,集成
15、了相关的控制设备,以减少应用系统的芯片数量。例如,有的芯片以51内核为核心,集成了USB控制器、SMART CARD接口、MP3解码器、CAN或者I*I*C总线控制器等,LED、LCD或VFD显示驱动器也开始集成在8位单片机中。2.高效率和高性能为了提高执行速度和执行效率,单片机开始使用RISC、流水线和DSP的设计技术,使单片机的性能有了明显的提高,表现为:单片机的时钟频率得到提高;同样频率的单片机运行效率也有了很大的提升;由于集成度的提高,单片机的寻址能力、片内ROM(FLASH)和RAM的容量都突破了以往的数量和限制。 由于系统资源和系统复杂程度的增加,开始使用高级语言(如C语言)来开发
16、单片机的程序。使用高级语言可以降低开发 难度,缩短开发周期,增强软件的可读性和可移植性,便于改进和扩充功能。3.低电压和低功耗 单片机的嵌入式应用决定了低电压和低功耗的特性。由于CMOS等工艺的大量采用,很多单片机可以在更低的电压下工作(1.2V或0.9V),功耗已经降低到微安级。这些特性使得单片机系统可以在更小电源的支持下工作更长的时间。4.低价格 单片机应用面广,使用数量大,带来的直接好处就是成本的降低。目前世界各大公司为了提高竞争力,在提高单片机性能的同时,十分注意降低其产品的价格。综合考虑各种类型的单片机,本设计采用AT 公司的AT89C52类型的单片机,改单片机具有8K可擦除Flas
17、h 存储器,具有高性能和低功耗特性的8位CMOS微控制器;单片机内部Flash允许程序存储器具有可编程的功能,因此也可以也可以应用于常规编程器;在单芯片未处理器中,具有灵巧的的系统可编程Flash和8bitCPU,使AT89C52成为很多控制系统和嵌入式控制应用系统主流的控制芯片。52系列单片机具有以下标准功能:可擦除Flash存储空间为8kb,可用内部RAM存储空间具有256kb,同时具有32 位I/O 口线,片内具有数据指针2个,具有定时器三个计数器三个。除此之外,AT89C52具有可降至0Hz 静态逻辑操作,同时可使两种软件选择节电模式;在掉电保护工作方式下,振荡器将停止工作,并保存RA
18、M中的内容,单片机停止一切工作,除非等到下一个硬件或中断复位后才停止;在空闲工作模式下,CPU工作停止,同时允许中断、串口、定时器/计数器和RAM继续工作。该单片机的引脚图如图2-1所示:图2-2 AT89C52的引脚图它一共有40个引脚,引脚又分为四类。包括主电源引脚Vcc和Vss;时钟电路引脚XTAL1和XTAL2;控制信号引脚RST/VPD,ALE,PSEN,EA以及并行I/O口引脚P0,P1,P2和P3。P3口除可以作为通用的I/O口使用外,其主要的功能是它的第二功能。P3.0-P3.7对应的第二功能分别为:串行口输入,串行口输出,外部中断0输入,外部中断1输入,定时器0的外部输入,定
19、时器1的外部输入,外部数据存储器“写”信号输出和外部数据存储器“读”信号输出。 3 数字时钟硬件电路设计本次设计利用AT89C52的P0口来控制8位共阴极的数码管,由于P0口内部没有上拉电阻,为高阻状态,所以不能正常的输出高/低电平,因此P0口在使用时必须接上上拉电阻。利用两个型号为74HC573的锁存器来控制数码管的段选和位选,用P2.6和P2.7两个口来控制两个锁存器开/关状态。单片机的最小系统包含有晶振电路和上电复位电路,两者必不可少。根据设计的要求,采用两个四位一体的共阴极数码管和一个单独的共阳极数码管显示时钟和秒表功能。本设计可以只采用4个按键即可全部实现所要求的功能,因此采用独立按
20、键的形式。本设计还有整点报时的功能,故通过控制蜂鸣器来实现。3.1 最小系统设计单片机要正常运行,必须具备一定的硬件条件,其中最主要的就是三个基本条件:(1)电源正常(2)时钟正常(3)复位正常。1.时钟电路单片机时钟内部有一个高增益反向放大器,用于构成时钟震荡电路,XTAL1为该放大器的输入端,XTAL2为放大器的输出端,但要形成时钟还需附加其他的电路。(1)内部时钟方式利用单片机内部的高增益反相放大器,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路便产生自激振荡。定时元件一般采用石英晶体和电容组成的并联谐振回路。晶体可在1.212MHz之间任选,电容可在530pF之间选择,电容C
21、1和C2的大小可起频率微调的作用,电容大小要和晶体的容性负载阻抗相匹配,否则不易起振。(2)外部时钟方式外部时钟方式常用于多机系统,以便各个单片机能够同步工作。对外部振荡信号无特殊要求,但需保证脉冲宽度不小于20ns,且频率应低于单片机所支持的最高频率。本次设计采用内部时钟方式,单片机的内外部时钟电路如图3-1所示: 图3-1 内部和外部时钟电路图2.复位电路计算机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入,对于CHMOS单片机,RST引脚的内部有一个低拉电路。当振荡器起振后,只要
22、该引脚上出现2个机器周期以上的高电平时即可确保使器件复位。复位完成后,如果RST端继续保持高电平,单片机就一直处于复位状态,只有RST端恢复低电平后,单片机才能进入其他工作状态。RST端的外部复位电路有两种复位操作形式:上电自动复位和按键手动复位。(1)上电自动复位电路对于HMOS型单片机,只要在RST复位端接一个电容至VCC和一个电阻至VSS(地),就能实现上电自动复位。在加电瞬间,电容通过电阻充电,就在RST端出现一定宽度的高电平,只要高电平时间足够长,就可以使单片机有效复位。RST端在加电时应保持的高电平时间包括VCC的上升时间和振荡器起振的时间。VCC上升时间约为10ms,振荡器起振时
23、间和频率有关。10MHz时约为1ms.1MHz时约为10ms,所以一般为了可靠的复位,RST在上电时应保持20ms以上的高电平。当振荡频率为12MHz时,典型值为C=10Uf,R=8.2K。(2)按键手动复位按键手动复位有电平方式和脉冲方式两种。按键电平复位是通过使复位端经电阻与VCC接通而实现的;按键脉冲复位则是利用RC微分电路产生正脉冲来实现的。本次设计采用的是上电自动复位电路,其电路图如图3-2所示:图3-2 单片机上电自动复位电路图由时钟电路和复位电路组成的单片机的最小系统如图3-3所示:图3-3 单片机最小系统的结构图3.2 数码管显示电路的设计3.2.1 单个数码管简介LED数码显
24、示器是由发光二极管组成的,其内部结构如图3-2(c)所示。LED数码管有两种连接方式:(1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极,使用时公共阴极接地。每个发光二极管的阳极与输入端相连。如图3-2(a)所示:(2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极,使用时公共阳极接+5V,每个发光二极管的阴极通过电阻与输入端相连。如图3-2(b)所示:图3-4 共阴、阳极数码管原理图 本次设计使用的是共阳极数码管,共阳极数码管的所有阳极全部接在一起,电路连接时,公共端接高电平,因此我们要点亮的那个发光二极管就需要给阴极送低电平,此时显示数字的编码是相反关系,数码管内部发光二极管点亮
25、时,也需要5mA以上的电流,而且电流不可过大,否则会烧毁发光二极管。由于单片机的I/O口送不出如此大的电流,所以数码管与单片机连接时需要加驱动电路,可以用上拉电阻的方法或使用专门的数码管驱动芯片。3.2.2 四位一体数码管简介本次设计还用到了四位一体的数码管,用来显示时间。四位一体的数码管与单个的数码管有所不同。四位一体的数码管共有十二个引脚,每个引脚对应着相应的段选和位选,如下图3-5所示。af 对应的是数码管的段位,四个数码管所有的段位都连接在一起,即所有的a段连接在一起,所有的b段连接在一起,依次类推。另外标号为1,2,3,4的引脚对应的是相应的位选,即通过程序来控制哪一个或者那几个数码
26、管亮。图3-5 四位一体数码管引脚图 本次设计使用了两个四位一体的共阴极数码管和一个单独的共阳极数码管,显示电路显示模块需要实时显示当前的时间,即时、分、秒,因此需要6个数码管,另外设计两个数码管用来显示横,这样显示起来比较美观。LED显示器的显示控制方式按驱动方式可分成静态显示方式和动态显示方式两种。对于多位LED显示器,通常都是采用动态扫描的方法进行显示,时的十位和个位分别显示在第一个和第二个数码管,分的十位和个位分别显示在第四个和第五个数码管,秒的十位和个位分别显示在第七个和第八个数码管,其余两个数码管显示横线。由于本设计还要求时钟/秒表之间的相互转换,因此右边单独的数码管是用于时钟/秒
27、表功能转换的,其硬件连接方式如图3-3所示:图3-6数码管显示电路图3.3 蜂鸣器控制电路的设计本设计要求整点报时功能,故采用蜂鸣器来实现到了几点就响几下,本设计在早上六点到晚上二十二点之间报时,其余时间不报时。蜂鸣器有两种结构,有源型和无源型。这里的源不是指电源而是指振荡源。有源蜂鸣器内部带振荡源,所以只要一通电就会叫,而无源蜂鸣器内部不带振荡源,所以如果用直流信号驱动他时,无法令其鸣叫,必须用2kHZ5kHZ的方波信号去驱动他。而单片机I/O口输出的电流比较小,故要使用NPN型三极管来放大电流,以驱动蜂鸣器工作。其控制电路图如图3-7所示: 图3-7蜂鸣器控制电路3.4 按键控制电路的设计
28、键盘就是一组按键的集合,它是最常用的输入设备。操作员通过键盘可以输入数据或命令,实现简单的人机通信。计算机所用的键盘按其结构形式可分为编码键盘和非编码键盘。非编码键盘有两种形式:简单键盘和矩阵式键盘。1 简单键盘简单键盘一般直接用I/O口线外接按键构成。每个按键单独占用一根口线,I/O口线间的工作状态互不影响。当某一按键闭合时,对应口线输入为低电平,释放时为高电平。2 矩阵式键盘简单键盘电路的每个按键开关占一根I/O口线,当按键数目较多时,就要占用较多的I/O口资源,此时应该用矩阵式键盘电路。矩阵键盘有3X3 9个键,4X4 16个键等的矩阵键盘。其检测原理为:检测时,先送一列为低电平,其余几
29、列全为高电平,然后立即轮流检测一次各行是否有低电平,若检测到某一行为低电平,则我们便可确认当前被按下的键是哪一行那一列的。用同样的方法轮流送各列一次低电平,再轮流检测一次各行是否变为低电平,这样即可检测完所有的按键。当有键被按下时,便可判断出按下的键是哪一个键。本设计由于只需要用到四个按键就可以实现全部的功能,故采用四个独立的按键来控制时钟的调节和时钟/秒表的转换。设计的按键控制电路如下图所示:图3-8 数字时钟的按键控制电路按键实际就是一种常用的按钮开关,平时键的两个触电处于断开状态,按键被按下时两个触电闭合。由于键盘上的按键都是利用机械触点来实现健的闭合与释放。由于弹性作用的影响,机械触点
30、在闭合及断开的瞬间均有抖动过程,从而也使按键输入电压信号也出现抖动,抖动时间的长短与按键的机械特性相关,一般为510ms。为了保证系统对键的一次闭合仅做一次键输入处理,因此不需进行消抖处理。一般可用硬件或软件的方法来消抖,具体方法有:双稳态消抖电路;滤波消抖电路以及软件消抖。本设计使用的是软件消抖。所谓软件消抖,就是在第一次检测到有按键按下时先不动作,延时一段时间(一般为510ms),再次检测按键的状态,则确认真正有键按下,当检测到按键释放后也需要给510ms的延时。此次用到的四个独立按键有P2.0P2.3口控制,分别可记为K1K4。本次设计中K3键是调时间按键。若K3健被按下,当按K3按键按
31、一下时,从左数第一二位数码管即显示时位的两位数码管的小数点亮,即可以通过K1和K2来对时位进行加减的调整,K1对十位进行加操作,K2对十位进行减操作。同理,按K3健两下时对分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。若跳出时间的调节后,K4健被按下,则启动秒表功能。如果没有跳出对时间的调节,则无论怎样按K4健,秒表功能都无法启动。在秒表功能下,按K1按键,则秒表开始工作,再按K1则秒表停止计时;若按K2健,则秒表清零;如果再按K4健则跳出秒表,则转换为时钟工作状态。整个设计的硬件电路就由这几部分组成:一个单片机的最小系统,包括晶振电路和上电自动复位电路;一个数码管显示电路;一个蜂
32、鸣器控制电路和一个按键控制电路,构成了整体的设计电路。整体设计的电路图如图3-9所示。图3-9 数字时钟的总体设计电路4 数字时钟的软件设计本次设计所实现的要求有:用六位LED数码管显示时、分、秒;以24h(小时)计时方式;白天整点报时,晚上22点后不报时;可实现时分调整、秒表功能转换;可实现时分调整、时钟功能转换。根据设计要求,所编写的程序除了主程序外还包括的子程序有数码管显示子程序;按键检测子程序;蜂鸣器报时子程序还有中断函数。数码管显示子程序通过控制P0口以及两个锁存器向数码管分别输送断码和位码,来实现时钟和秒表的显示;按键检测子程序则是通过P2.0P2.3四个口来控制四个独立的按键,以
33、实现时钟的调整和时钟/秒表功能的转换;蜂鸣器报时子程序是通过控制P2.4口来实现整点报时。通过中断函数来精确定时。此次设计采用C语言来编程。C语言作为一种非常方便的语言而得到广泛的支持,很多硬件开发都要C语言编程,如各种单片机、DSP、ARM等。C语言程序本身不依赖于机器硬件系统,不需要对C语言程序做修改或者仅仅只是很简单的修改就可以将C语言程序从一个系统一直到另外一个完全不同的系统中。C语言不仅支持浮点运算还提供了很多数学函数,其开发的高效性在很大程度上缩短了开发的时间,程序的可维护性和可读性大大增加。对单片机使用C51编程跟汇编ASM-51编程相比有很多优点:1.汇编语言需要对单片机的指令
34、有一定的了解,而C语言则不需要有任何的了解就可以直接进行编程。2.程序的结构规范,函数可以分成不同的类型,使程序的结构简单明了。3.编译器自动管理不同存储器的寻址、寄存器分配及数据类型等。4.C语言库中有许多标准的子程序,其数据处理能力很强大,使用起来很方便。5.C语言具有很好的移植性,可以直接由一个系统移入另一个系统。C语言常用语法不多,尤其是单片机C语言常用语法更少,初学者没有必要再系统地将C语言重学一遍,只需要在实践中遇到难点时适当地查阅C语言书籍里的相关内容。C语言仅仅是一个开发工具,其本身并不难,难的是如何在将来开发庞大系统中灵活应用C语言的正确逻辑编写出结构完善的程序。综合以上C语
35、言的优点,故本次程序编写采用C语言编写。下面分别对主程序和相应的子程序做简要的介绍。4.1 主程序设计编写程序必须要理清思路,逻辑正确,而绘制流程图可以使程序的思路简单清晰,有利于编写程序。此次的数字电子钟设计的主程序流程图如图4-1所示。开始启动定时器时间显示按键检测图4-1 主程序流程图通电后,启动定时器,定时器的初值为50ms,计数20次为1秒,则数码管上相应的数值加一。按键检测是先检测是否有键被按下。若K3健被按下,当K3按一下时,从左数第一二位数码管即显示时位的两位数码管的小数点亮,即可以通过K1和K2来对时位进行加减的调整,K1对十位进行加操作,K2对十位进行减操作。同理,按K3健
36、两下时对分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。若跳出时间的调节后,K4健被按下,则启动秒表功能。如果没有跳出对时间的调节,则无论怎样按K4健,秒表功能都无法启动。在秒表功能下,按K1按键,则秒表开始工作,再按K1则秒表停止计时;若按K2健,则秒表清零;如果再按K4健则跳出秒表,则转换为时钟工作状态。如果显示时间在六点整到二十二点整时,则蜂鸣器开始报时,即到了几点就响几下,在其他的时间不报时。根据所要实现的功能,编写相应的子程序。4.2 数码管显示子程序设计数码管显示函数利用的是数码管的动态扫描,所谓动态扫描显示,即轮流向各位数码管送出字形码和相应的位选,利用发光管的余晖和人
37、眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示,而实际上多位数码管是一位一位轮流显示的,只是轮流的速度非常快,人眼已经无法分辨出来。本次的数码管显示函数也是利用这种发光管的余晖和人眼视觉暂留作用,利用单片机的P0口以及两个锁存器来向数码管的输送段选和位选数据,实现所要显示的时,分,秒。数码管显示子函数的流程图如图4-2所示:图4-2 数码管显示流程图4.3 按键检测子程序设计本次的设计遵循的按键检测原则是按键执行是先检测调时间的健是否被按下。若K3健被按下,当按K3按键按一下时,从左数第一二位数码管即显示时位的两位数码管的小数点亮,即可以通过K1和K2来对时位进行加减的调整,K1对十位进
38、行加操作,K2对十位进行减操作。同理,按K3健两下时对分位调整,按三下时对个位进行调整,按四下即跳出时间的调节。若跳出时间的调节后,K4健被按下,则启动秒表功能。如果没有跳出对时间的调节,则无论怎样按K4健,秒表功能都无法启动。在秒表功能下,按K1按键,则秒表开始工作,再按K1则秒表停止计时;若按K2健,则秒表清零;如果再按K4健则跳出秒表,则转换为时钟工作状态。其程序流程图如图4-3所示:图4-3 按键检测流程图4.4 蜂鸣器报时子程序设计本次设计的蜂鸣器报时函数虽然比较简单,但是在编写的过程中还是遇到了一些困难。就像程序中的注释一样,延时时间的长短决定了蜂鸣器的发声频率,也就是声音的长短。
39、通过不断的尝试,最终找到了比较满意的发声频率。蜂鸣器报时函数实现的是在早上六点到晚上二十二点之间整点报时,也就是几点响几下。蜂鸣器报时函数如下:void baoshi(int c) int x;uchar i;for(x=c;x0;x-)for(i=0;i80;i+) /延时时间,控制蜂鸣器发声频率 /报时时仍然显示时钟状态xianshi(shi,0xfd,0xfe);xianshi(fen,0xef,0xf7);xianshi(miao,0x7f,0xbf);bs=!bs; /整点到则蜂鸣器响除以上三个实现所需功能的函数外,还需要中断函数,初始化函数等。将所有满足要求的函数整合到一起,通过在
40、主函数中调用相应的子函数来实现设计要求。虽然编写的程序顺利的实现了所要求的功能,但自己认为还有一定的缺陷,那就是在秒表功能的状态下,无论按哪一个按键,在按住不放的情况下数码管不显示任何数据。通过多次的修改与调试也没能找到解决的方法,希望在以后的学习中能够找到解决方案。5 数字时钟的仿真与制作程序编写完后,必须进行调试。因为编写的过程中难免会出现一些小的错误,甚至是一些逻辑性的错误。只有在一步步的调试过程中逐步发现错误,并逐步改进,才能实现最终预定的功能。本次设计,采用Keil进行编译调试。在使用Keil软件之前,要保证在用户的计算机上装有一套稳定可靠地软件。本次毕业设计所使用的Keil版本为V
41、6.12。在学习中,我们应该采用边学边用的学习方法,而不是将某个软件的所有功能都讲解的非常仔细,很多不用的地方不用去研究,需要用到什么就学什么这样才能有效地理解它,记忆它,最终达到学以致用的目的。5.1调试与仿真新建一个工程,并设置相应的参数,选择相关的单片机型号。设置好一切相关的数据后,便可以将工程保存,并命名为qipeibiyesheji。然后在新建的工程中添加文件,将编写好的程序添加到新建的工程中。如下图5-1所示。图5-1 Keil中添加新文件然后对添加到工程中的文件进行编译,若出现错误则需要慢慢的调试,根据提示修改出现的错误,直到编译无误为止。编译无误后,需要生成Hex文件,如下图所
42、示。图5-2 编译生成Hex文件编译生成的Hex文件,最终需要导入到Proteus中进行仿真。Proteus软件现在对于自己来说最大的好处就是能够实现仿真,能够检查自己的程序到底有没有达到本次设计的要求。虽然Proteus也有很多不完善的地方,而且模拟和硬件实物是有差别的,但是只有经过了仿真这一步,才能对自己编的程序心里有底,才敢开始动手开始实物制作。在绘画Proteus仿真图的过程中也遇到过很多困难,首先遇到的困难就是相应元器件的查找。自己只知道最基本的单片机,锁存器等元器件如何添加,而数码管、晶振、对应的电容、电阻等都还不熟悉。因此只有自己上网查找资料现将所有需要用到的元器件添加到新建的工
43、程中,然后再来考虑连线所要注意的问题。绘画仿真图的过程虽然比较艰辛,而且比较考验人的耐性,尤其是出现的一点点错误都有可能实现不了仿真,只有通过自己慢慢检查,翻书,查阅相关的资料以及与同学老师交流查找错误,并及时纠正。虽然这个过程是痛苦的,但是当自己看到编写的程序在自己辛苦几天绘画出的仿真图中完整无误的实现了设计的要求时,那种兴奋感和成就感是多么的让人陶醉。与此同时,在画仿真图的过程中自己学到了很多知识,而且也把以前学的知识又巩固了一遍,并收集了很多关于画Proteus仿真图的资料。虽然自己只是懂Proteus的一点点,其功能的强大自己还没有完全领略,但我想这次单独完成仿真绘制的过程为自己以后研
44、究Proteus打下了很好的基础,做了一个完美的开始。下面是自己仿真的截图,分别为时钟和秒表两个状态。如图5-3所示,是时钟状态下的仿真图:图5-3 时钟状态下的仿真图由前面的按键电路的流程图可知通过按K1、K2、K3按键实现相应的时间调整。并且在六点和二十二点之间还会报时。通过按K4健实现秒表功能的转换。秒表状态下的仿真图如下图5-4所示:图5-4 秒表状态下的仿真图5.2 仿真图缺陷分析虽然自己绘制的仿真图能实现所有的设计功能,但仍然存在一些缺陷。综合自己的分析,其缺陷有以下几点:(1)在时钟与秒表转换的时候,按下K4健时,也就是处于秒表状态但没有启动秒表时,单个的共阳极数码管会有轻微的闪动,也就是不稳定,找了很久都没有发现原因。(2)在秒表状态下,无论按哪一个按键,在按下不放时,数码管就会出现不显示的现象。虽然按键按下的过程很短暂,如果不刻意去注意的话根本不会