1、毕业设计说明书数字电子钟的设计与实现专业自动化学生姓名班级B自动化学号0指导教师完成日期203年6月日盐城工学院本科生毕业设计说明书(2013)毕业设计说明书独创性声明本人声明所呈交的毕业设计说明书是本人在导师指导下进行的研究、设计工作后独立完成的。除了文中特别加以标注和致谢的地方外,说明书中不包含其他人己经发表或撰写过的研究成果。对本文的研究所做贡献集体和个人,均己在说明书中作了明确的说明并表示谢意。本人完全意识到本声明的法律后果由本人承担。毕业设计说明书作者签名: 日期: 年 月 日指导教师签名:日期: 年 月 日数字电子钟的设计与实现摘 要: 单片机的诞生是在20世纪70年代,因为它具有
2、极高的性价比,更为重要的是其应用领域非常广泛、而且发展速度也比较快,所以倍受广大专业人士的青睐。相对而言单片机的体积较小、而且非常轻、开发比较简单、价钱便宜、对环境基本上没什么过高的要求、更重要的是其具有较好的灵活性和稳定性,抗干扰的能力特别强。正因为单片机综合了上述所以有点,所以就目前国内而言,单片机已被各行各业所广泛应用,其比较突出的是在机电一体化设备、工业自动化控制、智能仪器仪表、电力电子、自动检测、家用电器等方面。在本次毕业设计中将通过对它全面的了解,以STC89C51芯片为主,再加上相关的实现电路,简单的设计了一个的数字电子钟,它是由4.5V直流电源供电,通过数码管将时间准确的显示出
3、来,通过相关的按键及时对时间进行调整。从而通过本次设计来提高学习、设计、开发软硬件的能力。关键词:单片机;STC89C51;电子时钟;数码管盐城工学院本科生毕业设计说明书(2013)Design and implementation of digital electronic clockAbstract: The SCM was born in the 1970s, because it has a very high price, the more important is its broad range of applications, and the development speed
4、is relatively fast, so much the majority of professionals of all ages. SCM relatively smaller, and very light, development of more simple, cheap, environmentally basically no excessive requirements, and more importantly, it has good flexibility and stability, the ability of anti-jamming special stro
5、ng. Because of a combination of the above so a bit microcontroller, so the current domestic purposes, SCM has been widely used by businesses, which are more prominent in mechatronics equipment, industrial automation and control, smart instrumentation, power electronics, automatic detection , househo
6、ld appliances and so on. SCM has many series, and 51 single-chip microcontroller is therefore the most representative one. In this graduation project will be through its comprehensive understanding to STC89C51 chip-based, coupled with the associated circuit implementation, the simple design of a dig
7、ital electronic clock, which is powered by a 4.5V DC power supply, through the digital the accurate time display, through the relevant key on the time to adjust time. Thus designed to improve through this study, design, development hardware and software capabilities.Keywords: Microcontroller; STC89C
8、51; Electronic clock; Digital pipe目 录1 概述11.1课题研究的背景及意义11.2课题设计内容21.3课题预期效果22 系统的总体方案设计32.1设计原理32.2具体模块33 系统的硬件设计与实现43.1控制模块43.2显示模块63.3复位模块73.4按键模块73.5 晶振模块83.6闹钟模块84 系统软件程序设计104.1 程序流程图105 系统调试145.1 软件调试145.2 硬件调试15总 结16参考文献17致 谢18附 录19附录1:程序清单19附录2:原理图28附录3:Proteus仿真图29附录4:实物图30附录5:PCB图31附录6:元器件目
9、录表321 概述1.1课题研究的背景及意义 由于单片机有着独一无二的性能,所以在各行各业都有着广泛的运用。单片机在控制、检测领域中的应用具有以下特点: 1)体积小、灵活性高、易于产品化。 2) 可靠性好,所能适应的温度范围比较宽。 3)有可拓展的功能,可以根据需要来设计各种规模的系统。 现如今,我们生活中的各个领域都出现了单片机,其所涉及到的已经不仅仅是电子方面了。数字电子钟的时、分、秒都是用更加直观的数字来表示的,与传统的指针式的钟表相比,它不仅走时准确、显示直观,而且它不需要用安装机械传动装置,故在许多方面都得到了广泛应用。伴随着物质生活水平的不断提高,在相当一部分地方都要用到数字电子钟。
10、而就目前国内市场而言,绝大多数的电子钟都是采用全硬件电路来实现,这种方法不仅使电路的结构变得非常复杂,而且会损耗很大的功率。因此有必要对数字电子钟进行改进。自电子计数器诞生以来,就已经成为人们日常生活中所必不可少的工具,但随着人们对科学技术的不断追求,对时间计量精度的要求也越来越严格,对其应用领域的需求也越来越广泛。那么本着以人为本的精神,我们怎样才能做到让数字电子钟更好的服务于大众呢?这就需要人们不断去探索创新,研发出新型的、更有精准的时钟。现如今,基本上所有精度高的计时工具都是采用的石英晶体振荡器,由于数字电子钟,石英表,石英钟等都是采用的石英技术,因此使用起来就比较方便,走势也比较稳定,
11、走时精度相当的高,也就没必要经常校时了1。数字电子钟是采用集成电路来进行计时的,用译码技术来代替普通的机械式传动,用数码管显示时间来代替指针显示时间,用这种技术不仅减小了计时误差,而且这种表具有秒、分、时的时间显示功能,甚至还可以对时钟和分钟进行调节,片选性能非常好2。在计算机系统中,电子计时器电路有着不可替代的地位,并且能够确保系统正常工作。在一个单片机应用系统中,时钟包括两层意思:第一,是指为了确保系统能够正常工作的基本振荡信号,主要由晶振和相关实现电路构成,振荡频率的大小决定了单片机系统的工作效率;第二,是指系统的标准定时时钟,也就是定时时间4,它主要有两种实现的方法:一是用软件实现,也
12、就是说用单片机内部自带的定时/计数器来实现,但使用此种方法时误差相对来说比较大,因此该方法主要用在针对时间精度要求不高的场合;二是用专门的时钟芯片实现,采用这种方法通常是在对时间精度要求很高的情况下,典型的时钟芯片有:DS1302,DS12887,X1203等。6本次设计主要采用单片机内部的定时/计数器来实现数字电子钟的方法,以单片机STC89C51芯片和数码管为核心,加上相关的实现电路,从而构成了一个单片机电子计时器。11.2课题设计内容微处理器的设计选择STC89C51;显示电路的设计选用数码显示,将数码显示与驱动集成在一块芯片上;调整时间的电路设计,则通过3个按钮来实现,SP1按钮用于选
13、择调时、调分还是调闹钟,SP2使数值加一,SP3使数值减一;硬件方面,同样需要用到一个按钮来设置闹铃时间以及停闹铃;还有一些其他控制电路如复位电路、时钟电路等。通过这些控制电路的连接构成了完整的电路3。本设计是制作一个具有现实时间和闹铃功能的数字电子钟,用数码管来显示时间,通过对多个按钮进行相关的操作,就可以对时、分进行加减一的调节,设闹钟以及复位。1.3课题预期效果LED显示器可准确显示00:00:0023:59:59,24小时制的时间计数。 并且通过对时、分两开关的即“S1”、“S2”、“S3”的调节,可分别实现调时调分调闹钟的功能。12 系统的总体方案设计2.1设计原理 STC89C51
14、8 位数码管显示器数码管段码驱动3个独立式按钮按 钮数码管位码驱动开关上电蜂鸣器图2.1 系统结构图通过对定时器设置一个50ms的脉冲来用以计数,设定一个有计数功能的单元地址20H,其单元内容为20。通过当20H中值减为0时秒加一。当秒、分值为60时,该位清零,且高位加一。时、分的调节是通过P3.2、P3.3、P3.4口三个按钮,分别对应S1、S2、S3实现的,S1为功能选择键:按一下调节小时,按两下调节分钟,按三下调节闹钟小时,按四下调节闹钟分钟,按五下开始工作;S2为数值加一按键;S3为数值减一键;初始化钟表时间为12:00:00;复位电路我们采用了上电复位的形式,设置了一个开关按钮。2.
15、2具体模块主控模块:其控制核心为STC89C51单片机,STC89C51可以完成待测信号的计数,译码,显示以及对分频比的控制。显示模块:显示电路采用LED1602数码显示器来动态显示,便于观测。按键模块:该设计需要校对时间,所以用三个按键来实现。晶振模块:该模块给单片机提供时钟频率。闹钟模块:当达到设定的时间是发出报警。3 系统的硬件设计与实现3.1控制模块3.1.1 STC89C51单片机介绍电子计时器计时应用单片机技术原理,由单片机芯片STC89C51作为核心控制器,STC89C51RC是采用8051核的ISP(In System Programming)在系统可编程芯片,最高工作时钟频率
16、为80MHz,片内含8K Bytes的可反复擦写1000次的Flash只读程序存储器,器件兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,具有在系统可编程(ISP)特性,配合PC端的控制程序即可将用户的程序代码下载进单片机内部,省去了购买通用编程器,而且速度更快。STC89C51系列单片机集合了8051的内核功能,具有机器周期、单时钟的功能,是一种运行速度快,功率消耗低的新型单片机。其特点有一下几点:l 工作电压:3.4V-5.5V (5V单片机)/ 2.0V-3.8V (3V 单片机l 实际工作频率可达48MHz.l 用户应用程序
17、空间12K / 10K / 8K / 6K / 4K / 2K字节l 片上集成512 字节RAMl 可通过串口(P3.0/P3.1)直接下载用户程序,数秒即可完成一片l EEPROM 功能l 看门狗l 时钟源:外部高精度晶体/ 时钟,内部R/C 振荡器。常温下内部R/C 振荡器频率为:5.2MHz 6.8MHz。l 有2个16 位定时器/ 计数器l STC89Cc516AD具有ADC功能。10 位精度ADC,共8 路l 通用异步串行口(UART)l SPI同步通信口,主模式/ 从模式l 工作温度范围:0 -75/ -40 -+853.1.2 STC89C51的引脚功能 STC89C51的引脚功
18、能如下:l VCC:供电电压。l GND:接地。l P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0既可以用于外部程序数据的存储器 ,也可以作为源码的输入端口。 l P1口:P1口本质上是一个8位的I/O口,l P2口:P1口本质上也是一个8位的I/O口,3l P3口作为STC89C51单片机的一个特殊功能口,具有多种功能,如下表所示:l P3.0 RXD(串行输入口)l P3.1 TXD(串行输出口)l P3.2 /INT0(外部中断0)l P3.3 /INT1(外部中断1)l P3.4 T0(记时器0外部输入)l P
19、3.5 T1(记时器1外部输入)l P3.6 /WR(外部数据存储器写选通)l P3.7 /RD(外部数据存储器读选通)l RST:复位输入。l ALE/PROG:如果对外部存储器进行访问,那么输出的电平将用于对地址字节的锁存。一般情况下,ALE端输出的为稳定的脉冲信号。l /PSEN:外部程序存储器的选通信号。l XTAL1:内部时钟电路和反向振荡放大器的输入端口。l XTAL2:来自反向振荡器的输出。图3.1STC89C51引脚图3.1.3 单片机引脚分配P0.0- P0.7和P2.2-P2.7用于数码显示;P2.0用于蜂鸣器闹钟报警;P3.2-P3.4用于按键;RST用于上电复位;XTA
20、L1、XTAL2用于晶振。本设计所用主控制模块如图所示。 图3.2设计主控模块3.2显示模块显示器由3个共阳两位LED数码管组成。共阳极数码管就是将所有发光二极管的阳极接到一起,形成只有一个公共阳极揭发,当需要用到共阳极数码管的时候应将公共极接+5V电压,如果有一个字段的发光二极管的阴极输入为低电平时,那么相应字段的二极管就点亮,当某一字段的阴极为高电平时,相应字段就不亮11。LED数码管是用好几个发光二极管封装而成的,从外表上看就像一个“8”字型的器件,内部引线已经连接完毕,而只是将它们的各个笔划引出来接成公共电极就行了。每个LED数码管总共有8个段数,其中7段用于对数字的显示,还有一段是用
21、于显示小数点的。12 图3.4 LED显示器的符号图3.3共阳极接线图本设计显示器由3个2位7段LED数码管组成。通过总线分别与单片机的P0.0-P0.7口和P2.2-P2.7口连接。其中P2.7-P2.6口显示时、P2.5-P2.4口显示分、P2.3-P2.2口显示秒。13如图3.4所示:图3.5显示电路3.3复位模块本设计采用自动上电复位,电路复位后P0P3口引脚全部表现为高电平,特殊功能寄存器和程序计数器将全部被清零。当复位脚由高电平变为低电平时,单片机将从ROM的00H处开始运行程序8。复位通常是由外部的复位电路来实现的。电路图如图所示: 图3.6复位电路3.4按键模块按键控制模块由3
22、个按键组成。系统通过扫描按键是否被按下,来设定各模块的工作情况,使计时器可以在按键的控制下,有序地进行工作。设计中每个按键实现各自的功能,操作方式十分简单9。如图所示:图3.7按键模块3.5 晶振模块晶振模块的组成只有两种元器件,一个晶振和两个电容,两个电容的与晶振相串联后连接到单片机上,并接地。要是单片机能够正常的工作,就必须要有晶振电路来给其提供时钟频率,而且随着该频率的不同单片机的工作速度也就不一样。 图3.8 晶振模块3.6闹钟模块闹钟模块是由一个PNP型的三极管,一个电阻和一个蜂鸣器组成的,三极管的发射极接电压,基极经电阻与单片机相连,集电极与蜂鸣器相连,而蜂鸣器的另一端接地。当单片
23、机P2.0引脚输出一个电平时,三极管导通,蜂鸣器报警,从而达到闹钟的功效。图3.9 闹钟模块本次设计的数字电子钟概括讲就包括以上六个基本模块,每个模块实现各自的功能,互不干扰。原理图见附录1,PCB图见附录4。314 系统软件程序设计4.1 程序流程图各个中断口的首地址是在程序运行后再设置的,紧接着中断被开启,中断开启后将比较设定时间与当时时间,倘若两项比较不一致,则显示时钟然后进行扫描,并程序继续往下执行14。倘若达到了闹钟设定数值,则向闹钟。当外部中断有相应时,闹钟就会停止。开 始显示时钟P3.2是否按下一次(调时)显示P3.2否按下两次(调分)显示闹铃比较处YNYN 结 束图4.1调时钟
24、流程图当P3.2按下一次调时;按下两次调分;在此基础上P3.3按下数值加一、按下P3.4数值减一,设定完成之后再显示。开 始 设置闹钟时间 显示原闹钟时间YP3.2按下三次?(调闹钟时)显示NYP3.2按下四次?(调闹钟分)显示N是否退出 回到闹铃比较处闹铃比较处结 束 图4.3 设闹钟流程图开始对闹钟时间进行调节,按P3.2三次和P3.3、P3.4分别对闹钟时钟加一或减一,按P3.2四次和P3.3、P3.4分别对闹钟分钟进行加一或减一设置,查看显示值,再判断是否退出回到闹铃比较处。开 始重置初值(20H)=0?秒单元加1秒单元=60?分单元加1,秒清零分单元=60?时单元加1,分清零时单元=
25、24?时分秒单元清零中断返回NYNYNYNY图4.4 主时钟计时流程图该程序是主时钟的中断服务程序,先要对其设定一个初始值,查看首地址中的值是否为零,如果为零,则秒单位自动加一,当秒为60时,则分就会自动加一15。当分为60时,时加一。当时为24时,对秒分时都清零。然后返回中断。秒信号发生器是整个系统的时基行,由晶振和分频器实现的,将标准秒信号送入“秒计数器”,秒计数器采用60进制计数器,每当累计60秒时发一个“分脉冲”信号,该信号作为分计数器的时钟脉冲。以此类推,分计数器与时计数器均采用同样的方式进行计数。5 系统调试数字电子钟的系统调试包括软件调试,硬件调试。硬件调试包括电源模块、显示模块
26、、按键模块等模块的调式,软件调试就是通过修改软件程序,使电子钟的功能完善,能满足课题的基本要求,并提高数字电子钟的精度。首先使用软件仿真,并不断的进行调试,直到仿真结果能满足设计的要求为止,当软件调试成功了,才开始硬件电路的调试,如此进行软硬件联合调试19。5.1 软件调试5.1.1 Proteus软件调试PROTEUS不仅综合了许多模块,而且包含了各种信号源、虚拟仪器等等。我们可以运用其来模拟各种电路的仿真运行20。比如说有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能21;它还包含了专门用来精确测量
27、与分析的高级仿真图表。它们构成了单片机系统设计与仿真的完整的虚拟实验室。根据课题系统设计要求,进行Keil和Proteus系统仿真,不断调试程序,直到符合功能要求。Proteus总体仿真图5-1所示。图5.1仿真图5.1.2 Keil软件调试首选在Keil软件中根据设计要求编好一个程序代码,确保编译没有错误后,再添加到PROTEUS仿真软件中的STC89C51芯片中,保存,运行,观察是否能得到想要的结果;如果不能,则回到Keil中重新改进程序,再编译、仿真,直至所有功能均可实现为止。 显示时钟功能,要能显示时、分、秒。清零功能,按下清零键当前时间从初始值走起。设置闹钟时间功能,分别按下S1键三
28、次和四次,进行调时和分的调节。闹铃功能,当达到了设定的闹钟时间后,蜂鸣器就会不断的发出声音。5.2 硬件调试软件系统测试能够正确的显示时间以及闹钟,然后把各模块组合在一起,就做成完整的数字电子钟,实物图附录3所示。经过不断的软硬件联合调试,修改程序和硬件连接,最终完成的作品就能实现数字电子钟设计所提出的功能。总 结毕业设计其实是一次综合性的实践,它将我们所学的各种知识综合运用到实践上,在整个设计过程中,我通过查阅资料来扩展所学的知识,并将它们串联在一起,进而加深对所学理论知识的理解,在此基础上锻炼了操作能力。通过本次毕业设计,获益良多。掌握了用C语言来编写程序,学会了使用Proteus和Kei
29、l软件来模拟单片机的仿真。此外,在收集、查阅、应用文献资料的过程中,学会了如何根据实际需要有选择有价值性的资料,从而来确定能满足系统要求的元件及型号。在整个设计过程中,将会遇到各种各样的问题,面对在设计过程中出现的大小问题,就需要有针对性的对问题进行分析,从而解决好每一个小问题,这样才能确保整个系统的正确性。第一,要查看是不是软件编程中出现了问题,如果连程序都没有完善好,那么,程序下载到硬件电路中,在实际操作的过程中就肯定会存在问题。找到问题所在后,自己解决不了的,可以找老师、同学一起讨论研究,不断地完善自己所设计的数字电子钟。总之,在理论与实践相结合的过程中,只有不断地思考和不断地动手实践,
30、才能减小理论与实践之间的距离,将理论知识充分的运用到实践中去。在毕业设计的过程中,我的能力在多方面都得到了提高,尤其在单片机软件编程及元器件的焊接制作方面受益匪浅。软件设计是个即灵活又细腻的工作,我要细心地去发现问题,解决问题,去不断完善,以此来培养我良好的逻辑思维能力以及分析问题,解决问题的能力。元器件焊接时,要求我在原理图完成后一定要进行电气检查,这样可以降低错误率,提高制作出来的单片机的成功率。经过此次毕业设计,我不仅对所学的知识有了更加深入的理解,而且还锻炼了自己的动手能力,这所以的一切将会为我今后的发展打下坚实的基础。参考文献1 卢胜利. 单片机原理与应用技术实践M. 北京:机械工业
31、出版社, 2009.2 李军. 51系列单片机高级实例开发指南M. 北京: 航空航天大学出版社, 2009. 3 丁向荣. STC系列增强型8051单片机原理与应用M. 北京: 电子工业出版社, 2011. 4 孙涵芳. MCS51/96系列单片机原理及应用M. 北京: 北京航空航天大学出版社, 2006.5 杨刚 龙海燕主编. 电子系统设计与实践(第2版)M. 北京: 北京电子工业出版社, 2009.6 周兴华. 手把手教你单片机M. 北京: 北京航空航天大学出版社, 2002.7 李林功. 单片机原理与应用M. 北京: 机械工业出版社, 2008.8 卫桦林. 数字电子技术基础M. 北京:
32、 高等教育出版社, 2009.9 贾立新. 数字电路M. 北京: 电子工业出版社, 2011.10 张庆双. 经典实用电路大全M. 北京: 机械工业出版社, 2008. 11 Russell L. Meade. 电子学基础电路和元器件M. 北京: 清华大学出版社, 2006. 12 康华光主编. 电子技术基础数字部分M. 北京: 北京高等教育出版社, 2006.13 黄智伟主编. 全国大学生电子设计竞赛训练教程M. 北京: 北京电子工业出版社, 2005.14 潭浩强. C程序设计M. 北京: 北京航空航天出版社, 2005.15 张晓光. 信号检测与控制技术M. 北京: 中国计量出版社, 2
33、008. 16 李立华. 模拟电子技术M. 北京: 电子工业出版社, 2008. 17 钱同惠. 数字信号处理M. 北京: 机械工业出版社, 2005. 18 杨清德. LED工程应用技术M. 北京: 人民邮电出版社, 2010. 19 邬芝权. 基于51系列单片机的LED显示屏开发技术(第2版) M. 北京: 北京航空航天大学出版社, 2011. 20 孙肖子. 模拟电子电路及技术基础M. 西安: 西安电子科技大学出版社, 2009.21 张凤蕊. Proteus 教程电子线路设计制版与仿真M. 北京: 清华大学出版社, 2008. 22 朱清慧. Proteus显示控制系统设计与实例M.
34、北京: 清华大学出版社, 2011.23 杜树春. 基于Proteus和Keil C51的单片机设计与仿真M. 北京: 电子工业出版社, 2012.24 徐爱钧. Keil cx51u7.0单片机高级语言编程与Uvision2应用实践M. 北京: 北京电子工业出版社, 2008.25 Andria N. A High Resolution Digital Frequency Meter for Low FrequenciesJ. IEEE Transactions on Instrumentation and Measurement, 1990, 39(4): 376 -382, 667. 致
35、 谢在这里我要感谢辅导老师的细心指导,她不仅教会了我们如何写论文,还教会了我们很多专业性的知识,让我们对所学的知识有了更加深入的了解,并且能够将所学知识运用到实际当中,这些都要感谢指导老师孜孜不倦的教导。在整个设计过程中,我们充分发挥了人的主观能动性,主动学习,学到了许多课本上没法学到的知识,按时按质的完成了作品,并且达到了预期的效果,完成了最初的设想。通过这次设计,认识到对电路的设计、布局要先有一个好的构思,才能使电路板美观。在程序编写中,刚开始由于思路不清晰,所以遇到了很多的问题,但经过静下心来思考,仔细查阅相关资料,重新整理思路,渐渐开始得心应手。在此次设计中,知道了无论做什么事要有一颗
36、平常的心,不要想着走捷径,一步一个脚印才是硬道理。通过这次设计,会让我以后的学习和办事变得更加有耐心、更加有条理、更加严谨。最后,再次要感谢我们的老师,是她教给了我们全面的基础知识,如果没有精湛的基础知识作为后盾,一切都是不可能的附 录附录1:程序清单#includesbit smg1=P27; /六位数码管声明sbit smg2=P26;sbit smg3=P25;sbit smg4=P24;sbit smg5=P23;sbit smg6=P22;sbit bell=P20;/蜂鸣器声明sbit k1=P32; /功能选择键,按一下调节小时,按两下调节分钟,按三下调节闹钟小时,按四下调节闹钟
37、分钟,按五下时钟开始工作sbit k2=P33;/数值加一按键sbit k3=P34; /数值减一按键char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e;/表:共阳数码管 0-9char z_shi=12,z_fen=0,z_miao=0; /钟表的时、分、秒位 ,初始化时间为12:00:00char n_shi=6,n_fen=30,n_miao=0; /闹钟的时、分、秒位 ,初始化闹钟为06:30:00char shi,fen,miao; /数码管的时、分、秒位
38、char a=0,n=0; /n代表k1按键被按下的次数,a代表定时计数器的数值void init();/声明定时器初始化函数void delay(int i);void display();void key();/按键void smg_z(); /数码管显示钟表时间的时、分、秒函数void smg_n(); /数码管显示闹钟的时、分、秒函数 void main()init();/中断初始化函数调用shi=z_shi;/数码管显示钟表时间的时、分、秒,初始化为钟表的时间12:00:00fen=z_fen;miao=z_miao; while(1)display();/数码管显示函数的调用key
39、();/按键控制函数bell=1;/正常情况关闭蜂鸣器if(z_shi=n_shi)&(z_fen=n_fen)&(z_miao/10=0)&(n_miao/10=0)/钟表时间与闹钟时间相同,蜂鸣器响bell=0;/蜂鸣器响delay(1000);/延时让蜂鸣器多响一会儿bell=1;/关闭蜂鸣器delay(1000); if(a=20)a=0;z_miao+;if(z_miao=60)z_miao=0;z_fen+;if(z_fen=60)z_fen=0;z_shi+;if(z_shi24)z_shi=1;void key()/按键控制函数if(k1=0)delay(3000);/消抖延时
40、if(k1=0)n+;if(n4)n=0;while(k1=0);if(n=1)TR0=0;/关闭定时器if(k2=0)delay(3000);if(k2=0)z_shi+;/钟表时间的小时加一if(z_shi24)z_shi=1;smg_z();/数码管显示钟表的时分秒while(k2=0);if(k3=0)delay(3000);if(k3=0)z_shi-;/钟表时间的小时减一if(z_shi1)z_shi=24;smg_z();/数码管显示钟表的时分秒while(k3=0);if(n=2)TR0=0;/关闭定时器if(k2=0)delay(3000);if(k2=0)z_fen+;/钟
41、表时间的分钟加一if(z_fen=60)z_fen=0;smg_z();/数码管显示钟表的时分秒while(k2=0);/等待松手if(k3=0)delay(3000);if(k3=0)z_fen-;/钟表时间的分钟减一if(z_fen24)n_shi=1;smg_n(); /数码管显示闹钟的时分秒while(k2=0);if(k3=0)delay(3000);if(k3=0)n_shi-;/闹钟的小时减一if(n_shi1)n_shi=24;smg_n(); /数码管显示闹钟的时分秒while(k3=0);if(n=4)TR0=1;if(k2=0)delay(3000);if(k2=0)n_fen+;/闹钟的分钟加一if(n_fen=60)n_fen=0;smg_n(); /数码管显示闹钟的时分秒while(k2=0