单片机课程设计论文AT89C51芯片高精度时钟设计

上传人:沈*** 文档编号:71154439 上传时间:2022-04-06 格式:DOC 页数:52 大小:217KB
收藏 版权申诉 举报 下载
单片机课程设计论文AT89C51芯片高精度时钟设计_第1页
第1页 / 共52页
单片机课程设计论文AT89C51芯片高精度时钟设计_第2页
第2页 / 共52页
单片机课程设计论文AT89C51芯片高精度时钟设计_第3页
第3页 / 共52页
资源描述:

《单片机课程设计论文AT89C51芯片高精度时钟设计》由会员分享,可在线阅读,更多相关《单片机课程设计论文AT89C51芯片高精度时钟设计(52页珍藏版)》请在装配图网上搜索。

1、广东海洋大学寸金学院单片机课程考察论文题目: AT89C51芯片高精度时钟设计 AT89C51high precision clock design 系 别: 信息技术系 专 业: 计算机科学与技术 年、班级: 姓 名: 学 号: 指导老师: 职 称: 讲师 日 期: 广东海洋大学寸金学院教务处目 录目 录1前 言4第一章 问题定义5第二章 可行性研究6第三章 需求分析8第四章 概要设计9第五章 详细设计10第七章 设计总结23致 谢24参考文献25附件代码26摘 要本设计使用以AT89C51芯片为核心,通过使用该单片机内部的定时/计数器、中断系统、以及外围按键,实现在LED数码管上显示日期、

2、时间、定时、闹铃,通过6个按键实现设置日期、进行调时、设定闹铃、倒计时等功能,在实现各功能时数码管进行相应显示,闹铃或定时时间到时蜂鸣器响,按下闹铃键或定时键时,声音停止。软件部分用汇编实现,分为显示、延迟、调时、闹铃、定时、调整日期等部分。通过软硬件结合达到最终目的。关键字:AT89C51,时钟,汇编语言Abstract This design uses AT89C51 chip as the core, through the use of the MCU internal timer / counter, interrupt system, as well as external key

3、s, to achieve in the LED digital tube display date, time, alarm clock, timer, through the6 keys to achieve set date, tune when, set the alarm, countdown function, in the implementation of the function of digital tube corresponding display, alarm or timing when the buzzer, press the alarm button or t

4、imed button, the sound stops. Software part of the assembly, into the display, delay, timing, alarm clock, timing, adjust the date such as part of. The combination of hardware and software to achieve the ultimate objective.Keywords:AT89C51,Clock,Assembly language前 言20世纪末,电子技术获得了飞速的发展,在其推动下,现代电子产品几乎渗

5、透了社会的各个领域,有力地推动了社会生产力的发展和社会信息化程度的提高,同时也使现代电子产品性能进一笔提高,产品更新换代的节奏也越来越快。单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机具有体积小、功能多、价格低廉、使用方便、系统设计灵活等优点。因此,它应用广泛前景美好,它的实用性大大地提高了我对毕业设计的兴趣。随着半导体技术的飞速发展,以及移动通信、网络技术、多媒体技术在嵌入式系统设计中的应用,单片机从4位、8位、16位到32位,其发展历程一直受到广大电子爱好者的极大关注。单片机功能越来越强大,价格却不断下降的优势无疑成为嵌入式系统方案

6、设计的首选,同时单片机应用领域的扩大也使得更多人加入到基于单片机系统的开发行列中,推动着单片机技术的创新进步。第一章 问题定义1.1开发背景时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间。忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。所以,要制作一个定时系统。随时提醒这些容易忘记时间的人。1.2实现目标数字电子钟的设计方法有多种,例如,可用中小规模集成电路组成电子钟, 也可以利用专用的电子钟芯片配以显示电路及其所需要的外围电路组成电子钟还可以利用单片机来实现电子钟等等。这些方法都各有特点, 其中,利用单片机实现的

7、电子钟具有编程灵活, 便于功能扩充, 精确度高等特点。基于以上分析,在此次设计中,我选择的是利用单片机制作电子钟。电子钟的设计本身包括程序的设计和硬件电路的设计。我的思路是,先进行电路的整体设计,再根据电路进行编程,在编程的过程中,对电路进行调试,以更好地配合程序。1.3实现意义数字钟是采用数字电路实现对时,分,秒,数字显示的计时装置,由于数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度,远远超过老式钟表,钟表的数字化给人们生产生活带来了极大的方便,而且大大地扩展了钟表的报时功能。也离不开电子钟的相关功能和原理,比如机械手的控制、家务的自动化、定时自动报警、按时自动打铃、时间程序

8、自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、甚至各种定时电气的自动启用等,所有这些,都是以钟表数字化为基础的。而且是控制的核心部分。因此,研究数字钟及扩大其应用,有着非常现实的意义。第二章 可行性研究2.1经济可行性本次设计使用的单片机是51单片机,它体积小、重量轻、抗干扰能力强、环境要求不高、价格相对比较低廉、可靠性高、灵活性好、开发较为容易,广泛应用于智能生产和工业自动化上。2.2 操作可行性 51单片机通过软件编程,通过四个按键开关:一个用于功能选择、一个用于闹钟查看、另外两个为数值增多和减少,来实现参数设置和调节功能,到达设置的闹钟时间,由蜂鸣器发声,起报警作用。本次

9、设计的电子时钟,走时精度较高,可满足多种场合的应用需求。2.3技术可行性通过51单片机来设计电子时钟,采用K软件来进行编程,可以实现小时、分、秒和年、月、日的显示的功能。本次设计的电子时钟系统由时钟电路、显示电路、按键调整电路、定时报警电路四个部分组成。2.4法律可行性本系统所有技术资料都为合法。属于自主开发,开发过程中不存在知识产权问题,未抄袭任何网站,不存在侵犯版权问题。开发过程中未涉及任何法律责任。在开发的过程中并没有任何损害学生、集体和学校的行为,在此系统中并没有任何宣传国家法律不允许的内容,所以在老师、学校和法律上均得到有效的支持,在法律上有一定的保障。综上所述,从法律上都是完全可靠

10、的。2.5可行性分析结论通过上面从经济、操作、技术、法律等方面的分析,本时钟系统符合人们的需求,具有良好的发展空间,方便广大人们,因此,本系统在开发上完全可行。第三章 需求分析数字电子钟一个无处不在的电子产品,经过多年的发展技术已经相当成熟了。随着电子技术的产业结构调整,生产工艺的飞速发展,市场对智能电子时钟的需求也越来越大,而现今市场上多采用的普通电子表,不具备报时和闹钟的双重功能。以51单片机为核心控制部件制作的。可以实现对年、月、日、周、时、分、秒精确计时,闰年补偿,可计时至2100年。通过扩展还可以实现对电子钟所在地点的温度显示和智能闹钟功能,广泛用于车站、医院、机场、厕所等公共场所的

11、时间显示。该电子钟运用单片机进行设计制作,通过软件编程完成实时时间显示、按键调节时间,与数字电路电子钟相比具有设计电路简单、成本低的优点。与机械钟表和3V电源半机械表相比,数字电子钟具有时间精确度高、停电不用校准、较少汞的使用等优点。第四章 概要设计针对要实现的功能,拟采用AT89C51单片机进行设计,AT89C51 单片机是一款低功耗,高性能CMOS8位单片机,片内含4KB在线可编程的可反复擦写1000次的Flash只读程序存储器,器件采用高密度、非易失性存储技术制造,兼容标准MCS- 51指令系统及80C51引脚结构。这样,既能做到经济合理又能实现预期的功能。在程序方面,采用分块设计的方法

12、,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。程序可分为闹钟的声音程序、显示程序、闹钟显示程序、调时显示、定时程序。运用这种方法,关键在于各模块的兼容和配合,若各模块不匹配会出现意想不到的错误。本电子钟设计主要是依照图2.1中的流程做出来的,时间分配比较均匀。首先,在编程之前必须了解硬件结构尤其是各引脚的用法,以及内部寄存器、存储单元的用法,否则,编程无从下手,电路也无法设计。这是前期准备工作。第二部分是硬件部分:依据想要的功能分块设计设计,比如输入需要开关电路,输出需要显示驱动电路和数码管电路等。第三部分是软件部分:先学习理解汇编语言的编程方法再根据设计的硬件电路进行分块的编

13、程调试,最终完成程序设计。第四部分是软件画图部分:设计好电路后进行画图,包括电路图和仿真图的绘制。第五部分是软件仿真部分:软硬件设计好后将软件载入芯片中进行仿真,仿真无法完成时检查软件程序和硬件电路并进行修改直到仿真成功。第六部分是硬件实现部分:连接电路并导入程序检查电路,若与设计的完全一样一般能实现想要的功能。最后进行功能扩展,本设计加进了日期显示与调整功能。第五章 详细设计5.1开发及运行环境本次设计中用到的主要元件包括AT89C51单片机、74LS07芯片、以及数码管。5.2硬件电路设计5.2.1 AT89C51单片机该单片机功能强大,不仅能满足设计的需要,也可以在设计要求的基础上进行一

14、些扩展。单片机的结构如下:图5.2.1 单片机引脚图在使用时VCC接电源电压,GND接地。P0,P1,P2,P3可作为输入或输出端口,RST是复位输入,接复位电路。XTAL1和XTAL2接复位电路。这些可以在硬件设计部分体现出来。5.2.2 74LS07芯片74LS07是集电极开路六正相高压驱动器,1入2出,3进4出,5进6出,9进8出,11进10出,13进12出,7接地,14接高电平。74LS07引脚图:图5.2.2.1 74LS07引脚图74LS07逻辑图:图5.2.2.2 74LS07逻辑图5.2.3 LED数码管使用共阴极数码管时将6个数码管按相同功能连接起来,3与8相连,当选通端所接

15、管脚为低电平时该数码管选通。单片机的P2口作为选通端,连接各数码管的3、8引脚轮流显示,连接时要加7407和上拉电阻。gfabeddpc87109612345abcdefg单片机的P1口作为功能段,通高电平的引脚会使相应段亮起,同样的也要与7407和电阻连接使用。图5.2.3 数码管5.3电路设计5.3.1 输入在电子钟的输入部分,设置相应的置数功能,通过外部设备的输入,如按键,实现时间的修改。除此之外,调整闹铃、定时、日期时也需要按键进行输入。在选用输入端口时,将P3引脚与按键相连进行输入。设计的输入部分如下:图5.3.1 输入部分5.3.2 输出在实际电路中采用单个数码管相连进行显示,先把

16、数码管的1、2、4、5、6、7、9、10对应相连,然后把各晶体管的3和8引脚各自相连,P1.6P1.0分别接ag,P2作为选通端P2.0P2.5分别从左到右接各数码管的3、8端。采用动态显示, 即一位一位地轮流点亮各位显示器18,因此P2.0P2.5轮流置0。持续时间为1ms。该部分电路图如下所示:图5.3.2 显示部分5.4程序设计5.4.1 延迟程序在动态扫描时,必然用到延迟程序,这里使用延迟1ms的程序,此程序需要反复调用。D_1MS:MOV R7,#2D_5:MOV R2,#250DJNZ R2,$DJNZ R7,D_5RET5.4.2 主程序主程序主要对按键进行扫描,以及判断定时和闹

17、铃时间是否已到,若到则调用声音程序,该段程序如下:MAIN:JNB P3.0,DATETZ;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ1;按下1键时,显示时间,并可调时JNB P3.2,NLTZ1;按下2键进行闹铃设置JNB P3.3,DSTZ;按下3键进行定时设置ACALL DISP;MOV A, HOUR;SUBB A, 38H;JZ FEN;AJMP DSPD2;FEN:MOV A, MINUTE;SUBB A, 37H;JZ SHENGYIN1;DSPD2:MOV A, R4;JZ S_PD;AJMP MAIN;S_PD:MOV A, R3;JZ SHENGYIN

18、1;AJMP MAIN;5.4.3 显示程序6个晶体管轮流进行显示,分别显示1ms,这依赖的是人们视觉的惰性,该段程序如下:DISP:;走时的显示程序,包括调时时的显示MOV DPTR,#LEDTABMOV A,SECONDMOV B,#10DIV AB;A存十位B存个位MOVC A,A+DPTRMOV P1,ACLR SEC_SACALL D_1MS;显示秒十位SETB SEC_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR SEC_GACALL D_1MS;显示秒个位SETB SEC_G5.4.4 中断服务子程序中断服务程序中,总体思路是:由于初值是3CB0H,所以装满定

19、时器需要50ms的时间,从而20次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。包括日期显示的功能也是如此。另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。再显示走时部分。5.4.5 闹铃程序和定时程序这两段程序分别包含了各自的显示、调整程序。程序思路是对照,走时部分的程序,进行编写,包括显示程序,与显示时间的程序是相似的,闹铃和定时的调整程序与走时调整程序相似。第六章 测试6.1

20、测试的必要性6.1.1目的程序写完以后必须进行调试,以验证程序是否正确。在程序调试时,出现了很多问题,比如跳转距离过长、打错字母、逻辑有错等,发现问题后,利用两天时间进行了改正,但即使编译通过,最后也不一定能够实现功能。以为程序的调试只能检查出语法错误,而不能检查出逻辑的错误。要真正把程序写对,要通过仿真发现并且改正错误。6.1.2测试软件Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。用过汇编语言后再使用C来开发,体会更加深刻。Keil C51软件提供丰富的库函数

21、和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。Keil C51软件是一个基于32位Windows环境的应用程序,支持C语言和汇编语言编程,其6.0以上的版本将编译和仿真软件统一为Vision(通常称为V2)。Keil提供包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,由以下几部分组成:Vision IDE集成开发环境C51编译器、A51汇编器、LIB51库管理器、BL51连

22、接/定位器、OH51目标文件生成器以及 Monitor-51、RTX51实时操作系统。6.1.3仿真软件PROTEUS软件是目前世界上最先进、最完整的嵌入式系统设计与仿真平台,可以实现数字电路、模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和PCB设计等功能,是目前唯一能够对各种处理器进行实时仿真、调试与测试的EDA工具。微控制器系统相关的仿真需建立编译和调试环境,可选择MedWin V3 软件。该软件支持众多不同公司的芯片,集编辑、编译和程序仿真等于一体,同时还支汇编和C语言的程序设计。Proteus的界面友好易学,在调试程序、软件仿真方面有很强大的功能。 其革

23、命性的功能是:将电路仿真和微处理器仿真进行协同,直接在基于原理图的虚拟原型上进行处理器编程调试,并进行功能验证,通过动态器件如电机、LED、LCD、开关等,实时看到运行后的输入、输出的效果。Proteus为我们建立了完备的电子设计开发环境。6.2仿真过程在使用Proteus进行仿真时,绘制结果如下:图6.2.1 仿真图在绘制仿真图之后,要向单片机装入程序,从而使单片机开始工作并带动整个电路工作,装入过程为:点击单片机,选择所编译程序的输出hex文件,确定即可。此时单片机会按照程序所设定的功能进行工作。图6.2 走时状态下的仿真结果6.3日历在加入其它功能时,我想到了很多可能达到的功能,比如加入

24、备用电源、夜间亮灯功能、多个闹铃的功能、显示日期功能等。然后我进行了理论上的验证,加入备用电源可避免因停电而造成的电路全部失灵,但受到实验条件的影响未选择对这个功能进行实现。夜间亮灯功能对程序要求不高,但在电路中要加入传感器,把光的照度测出来后,低于某一值时,灯亮,从而使得夜间时也能看到时间显示,虽然程序简单,但由于要加入传感器,容易受到干扰,各项工作投入时间较长,考虑到时间有限,也没有采纳这个方案。闹铃的功能和日期的功能的实现都是比较容易的,做了权衡之后我选择了后者,因为日期功能主要涉及算法和程序的跳转、调用等,更能加深对单片机的认识和理解。在设计的开始阶段,我主要考虑了日期的逻辑算法。首先

25、,要考虑年份是不是闰年,闰年的判断方法是:将年份除以100,若能整除,则将年份除以400,若还能整除,则为闰年,若不能,则为平年;若不能被100整除,则判断是否能被4整除,若能,则为闰年,若不能则为平年。只有2月与平、闰年相关,因此在闰年和平年的子程序中,要判断是不是2月,若是则在相应的年中进行日期的增加,若不是则转入平时的月份。其中1、3、5、7、8、10、12月是每月31天,4、6、9、11月为每月30天。在电路方面有两种方法:(1)可以增加6个数码管用来显示日期,但这样显然电路更复杂;(2)用按键的输入决定6个数码管显示日期还是时间,这种情况下,只需加一个按键即可,不用增加数码管。最终的

26、按键控制为:按下1键时,显示日期,并且用4、5、6键分别调整年、月、日;按下2键时,进行走时和时间调整;3键位闹铃键;4键为定时键。这样实现功能的好处是:(1)电路简单,若同时显示日期和时间,则需要的引脚很多,需要加入译码器对引脚进行扩展。采用按键决定显示时间或日期的方法避免了这个问题;(2)节约空间,节约成本。6.4设计过程中遇到的问题及其解决方案在电子钟设计中程序比较长,遇到了各种各样的问题,比如跳转距离过长出现语法错误。因此修改程序的时间很长,有语法错误,也有仿真时功能无法实现的问题,在此不能一一说明,只能对个别问题加以阐述。由于在走时调整、闹铃调整及定时设定时,按下键时每0.2秒步进1

27、,这就需要每0.2秒对按键输入进行一次扫描,因此开始时,我用的是延迟0.2秒再返回按键扫描程序的方法,但是可以想到,进行单纯的延迟时,不会有显示,在仿真时功能没有实现。后来我采用的是反复调用若干次显示程序以实现延迟,较好地解决了这个问题。虽然现在回过头来发现这个问题很简单,但当时是百思不得其解。我从中学到:任何简单的事情都会有出错的可能,有些时候人的思路中的一些错误是自己难以发现的,在工作和生活中要多对自己的想法提出质疑。不光是这种明显的问题很多,有些细微的问题也一样出现了,但解决起来并不容易。在最后的硬件实现阶段发现蜂鸣器不响,此时连接方法是蜂鸣器直接连接在了P0.7引脚。考虑到单片机的输出

28、电流比较小,虽然P0.7引脚的电平已经达到2V以上,也无法驱动蜂鸣器。于是我设想加上驱动电路。作此修改之后,蜂鸣器发出响声,但是又遇到了新的问题:蜂鸣器无法停止响声!看上去这个问题很简单,只要有停止闹铃的按键输入时,在程序中加一句将P0.7置零的语句就可以了。但事实并不是这么简单。通过苦思冥想,发现在主程序中,对“定时时间是否已到”是不断进行扫描的,而倒计时是在中断服务子程序中进行的,当倒计时为0分0秒时,主程序判断出来后会不停地调用声音程序。蜂鸣器响声不停是不可避免的,因为R3和R4是在中断程序中变化的,随着时间的推移必然都为0,在此情况下即使按下了声音停止键,由于程序跳回主程序,又会不断地

29、调用声音程序。基于这个想法要达到的效果是:按下声音停止键之后,不再进行定时时间是否为0的判断。要实现这个想法就要引入新的参数,这里,试用3CH作为判断的因子。当点击定时开始后,将3CH赋值为1,在主程序中判断3CH如果不为0,就进行倒计时是否到0的判断。蜂鸣器响后,点击3键时,将3CH赋值为0,这样在主程序中就不进行这个判断,因此蜂鸣器就不会响。当然这个解决问题的过程不是一下子解决的在这个过程中,我进行了相当多的尝试和摸索,最终找到了这个解决途径。这个问题解决后,发现闹铃也有相同的问题,声音会持续一分钟,在此期间即使按下停止键,声音也不会停。发现这个问题后,可以看出,这个问题解决起来比上个问题

30、要简单得多,因为闹钟程序没有涉及到中断服务子程序。因此考虑按下停止键时,修改判断所用的参数比如38H,即在clr P0.7的同时加一句DEC 38H,当再进行判断时,蜂鸣器就不会再响了。第七章 设计总结本文介绍的是利用AT89C51单片机设计电子钟。并详细说明了软件和硬件设计方法及仿真。在设计过程中可以看出,汇编语言有着其独特的魅力,它简单易学,语法错误容易纠正;用单片机实现电子钟的设计是比较方便和易于实现的。通过电子钟的设计和制作,加深了对单片机的理解,能够更熟练地应用单片机实现预期的功能,对今后的工作有很大的帮助。电子钟各项功能的实现,为自动控制的实现打下了理论基础,获得了实现方法。在今后

31、的其他工作中,也可以把这次设计中的收获运用进去,这是我此次毕业设计得到的最大财富。致 谢在这次论文完成过程中,得到了很多人的帮助与支持。首先,最感谢的是我的指导老师叶伟慧老师,她平时对教学的认真和细心真的深深地打动了我,使我面对困难也不畏惧,在此致上最真挚的谢意。单片机设计是我大学学习生活的一项重要学习任务,是对我大学三年学习的综合考核。而也为了使我的综合素质技能可以有一个很大的提高,在为期两个多月的设计过程中,我不仅较为系统的复习了以前学的知识,而且又学习了许多新知识,使我的知识结构更加系统化,也更加完善。同时,也提高了我独立分析问题、解决问题的能力。这次的论文设计总结是在我的指导老师叶伟慧

32、老师亲切关怀和悉心指导下完成的。老师给予了我耐心指导与细心关怀,叶伟慧老师有严肃的科学态度,严谨的治学精神和精益求精的工作作风,这些都是我所需要学习的,感谢叶伟慧老师给予了我这样一个学习机会,谢谢! 感谢与我并肩作战的舍友与同学们,感谢关心我支持我的朋友们,感谢学校领导、老师们,感谢你们给予我的帮助与关怀;感谢寸金学院,特别感谢09计算机科学与技术1班多年来为我提供的良好学习环境,谢谢。参考文献1 郭天祥,新概念51单片机c语言教程.北京:电子工业出版社,2009.2 杨拴科, 模拟电子技术基础. 北京:高等教育出版社, 2003.3 付家才,单片机控制工程实践技术M. 北京:化学工业出版社,

33、2004.3.4 李光才,楼然笛.单片机课程设计实例指导. 北京:北京航空航天大学出版社,2009.95 张伟,王力,赵晶,ProtelDXP 入门与提高.北京:人民邮电出版社, 2003.2.6 张毅坤. 单片微型计算机原理及应用,西安电子科技大学出版社 1998 .7.7 余锡存 曹国华.单片机原理及接口技术M.陕西:西安电子科技大学出版社,2000.7.8 雷丽文 等.微机原理与接口技术M.北京:电子工业出版社,1997.2.9 王毅单片机器件应用手册人民邮电出版社,1994.10 张琳娜,刘武发传感检测技术及应用中国计量出版社,1999.11 王小科 吕双C#从入门到精通北京、清华大学

34、出版社、2008.12 廖德荣 自动控制温度的方法北京航空航天大学出版社 2006.2. 13 李军 检测技术及仪表 中国轻工业出版社 2008.7 第二版. 14 孙亮 杨鹏 自动控制原理 北京工业大学出版社 2006.5 第二版15 刘守义 钟苏 数字电子技术 西安电子科技大学出版社 2003.6 第二版.附件代码整体电路图完成程序:HOU_S BIT P2.0;第一个数码管HOU_G BIT P2.1;第二个数码管MIN_S BIT P2.2;第三个数码管MIN_G BIT P2.3;第四个数码管SEC_S BIT P2.4;第五个数码管SEC_G BIT P2.5;第六个数码管DAY

35、EQU 39H;日期MONTH EQU 3AH;月份YEAR EQU 3BH;年份SECOND EQU 30H;秒MINUTE EQU 31H;分HOUR EQU 32H;时TIM_1 EQU 33H;TIM_2 EQU 34H;ORG 0000HLJMP CHUSHIORG 000BHLJMP TIMER0ORG 30HCHUSHI:;初始化MOV SECOND,#0;MOV MINUTE,#0;MOV HOUR,#0;时间的初值为000000MOV DAY,#1;MOV MONTH,#1;MOV YEAR,#1;日期的初值为000000SETB HOU_S;SETB HOU_G;SETB

36、MIN_S;SETB MIN_G;SETB SEC_S;SETB SEC_G;初始状态为1,都不显示MOV R0,#0;MOV R1,#12;闹铃初始化MOV R3,#0;MOV R4,#1;存储定时时间,点击定时开始后,从所存时间开始倒计时MOV R5,#0;MOV R6,#0;设定定时时间所用寄存器MOV 38H,#12;MOV 37H,#0;存储所定闹铃,以便判断是否闹铃时间到CLR P0.7;MOV TIM_1,#10;执行完后经历0.5秒MOV TIM_2,#2;执行完后经历1秒ANL TMOD,#0F0HORL TMOD,#01H;定时器0为模式1MOV TH0,#03CHMOV

37、TL0,#0B0H;装入初值SETB ET0;SETB TR0;SETB EA;允许中断MAIN:JNB P3.0,DATETZ;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ1;按下1键时,显示时间,并可调时JNB P3.2,NLTZ1;按下2键进行闹铃设置JNB P3.3,DSTZ;按下3键进行定时设置ACALL DISP;调用显示程序FMQPD:;判断定时是否到零、闹铃时间是否已到MOV A,HOUR;SUBB A,38H;JZ FEN;判断时是否到闹铃所定时间,若到,则对分进行判断,若不到,则对定时进行判断AJMP DSPDKQFEN:MOV A,MINUTE;SUB

38、B A,37H;JZ SHENGYIN1;时和分都到闹铃时间则蜂鸣器响DSPDKQ:;判断是否应该进行定时时间的判断MOV A,3CH;3CH是引入的判断因子,当其为0时不对定时时间是否到0进行判断,从而不开启蜂鸣器JNZ DSPD2;当3CH不是0时,跳转到定时判断程序AJMP MAINDSPD2:MOV A,R4;JZ S_PD;AJMP MAIN;S_PD:MOV A,R3;JZ SHENGYIN1;AJMP MAIN;DSTZ:AJMP DSTZ1;DATETZ:AJMP DATETZ1;SHENGYIN1:MOV 3CH,#1SETB P0.7AJMP MAINZSTZ1:MOV 3

39、5H,#60;MOV 36H,#10;ZSTZ2:ACALL DISP;DJNZ 35H,ZSTZ2;JNB P3.0,DATETZ;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ1;按下1键时,显示时间,并可调时JNB P3.2,NLTZ1;按下2键进行闹铃设置JNB P3.3,DSTZ;按下3键进行定时设置JNB P3.4,H_T;JNB P3.5,M_T;DJNZ 36H,ZSTZ2;AJMP MAIN;H_T:ACALL DISP;INC HOUR;MOV A,HOUR;CJNE A,#24,ZSTZ1;MOV HOUR,#0;AJMP ZSTZ1;M_T:ACALL

40、 DISP;INC MINUTE;MOV A,MINUTE;CJNE A,#60,ZSTZ1;MOV MINUTE,#0;AJMP ZSTZ1;NLTZ1:CLR P0.7;DEC 38HMOV 35H,#100;MOV 36H,#10;NLTZ2:ACALL ONE;ACALL TWO;DJNZ 35H,NLTZ2;JNB P3.0,DATETZ;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ1;按下1键时,显示时间,并可调时JNB P3.2,NLTZ1;按下2键进行闹铃设置JNB P3.3,DSTZ;按下3键进行定时设置JNB P3.4,NLXS2;JNB P3.5,NL

41、XS1;DJNZ 36H,NLTZ2;AJMP MAIN;NLXS1:MOV DPTR,#LEDTAB;MOV 35H,#100;MOV 36H,#10;INC R0;MOV 37H,R0;CJNE R0,#60,NLTZ2;MOV R0,#0;MOV 37H,R0;AJMP NLTZ2;ONE:MOV DPTR,#LEDTAB;MOV A,R0;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR MIN_S;ACALL D_1MS;SETB MIN_S;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR MIN_G;ACALL D_1MS

42、;SETB MIN_G;RET;NLXS2:MOV DPTR,#LEDTAB;MOV 35H,#60;MOV 36H,#10;INC R1;MOV 38H,R1;CJNE R1,#24,NLTZ2;MOV R1,#0;MOV 38H,R1;AJMP NLTZ2;TWO:MOV DPTR,#LEDTAB;MOV A,R1;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR HOU_S;ACALL D_1MS;SETB HOU_S;MOV DPTR,#LEDTAB;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR HOU_G;ACALL D_

43、1MS;SETB HOU_G;RET;DSTZ1:MOV 3CH,#0CLR P0.7;MOV 35H,#100;MOV 36H,#10;JNB P3.3,DSTZ1;DSTZ2:ACALL DS_S;ACALL DS_M;DJNZ 35H,DSTZ2;JNB P3.0,DATETZ3;按下0键时,显示日期并可对日期进行调整JNB P3.1,ZSTZ;按下1键时,显示时间,并可调时JNB P3.2,NLTZ;按下2键进行闹铃设置JNB P3.4,DSXS1;JNB P3.5,DSXS2;JNB P3.3,DSKS1;DJNZ 36H,DSTZ2;AJMP MAIN;DATETZ3:AJMP D

44、ATETZZSTZ:AJMP ZSTZ1NLTZ:AJMP NLTZ1DSXS1:MOV 35H,#100;MOV 36H,#10;INC R6;CJNE R6,#60,DSTZ2;MOV R6,#0;AJMP DSTZ2;DS_M:;MOV DPTR,#LEDTAB;MOV A,R6;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR MIN_S;ACALL D_1MS;SETB MIN_S;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR MIN_G;ACALL D_1MS;SETB MIN_G;RET;DSXS2:MOV 35H,#

45、100;MOV 36H,#10;INC R5;CJNE R5,#60,DSTZ2;MOV R5,#0;AJMP DSTZ2;DS_S:MOV DPTR,#LEDTAB;MOV A,R5;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR SEC_S;ACALL D_1MS;SETB SEC_S;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR SEC_G;ACALL D_1MS;SETB SEC_G;RET;DSKS1:MOV 3CH,#1MOV A,R5;MOV R3,A;MOV A,R6;MOV R4,A;DSKS2:MOV DPTR

46、,#LEDTAB;MOV A,R3;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR SEC_S;ACALL D_1MS;SETB SEC_S;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR SEC_G;ACALL D_1MS;SETB SEC_G;MOV A,R4;MOV B,#10;DIV AB;MOVC A,A+DPTR;MOV P1,A;CLR MIN_S;ACALL D_1MS;SETB MIN_S;MOV A,B;MOVC A,A+DPTR;MOV P1,A;CLR MIN_G;ACALL D_1MS;SETB MIN_G

47、;JNB P3.0,MAIN2;JNB P3.1,MAIN2;DSPD:;MOV A,R4;JZ PANDUAN_S;AJMP DSKS2;PANDUAN_S:;MOV A,R3;JZ SHENGYIN;AJMP DSKS2;MAIN2:LJMP MAIN;SHENGYIN:MOV 3CH,#1SETB P0.7AJMP MAINRETI_11:;由于程序较长,此处加一个返回程序,避免跳转距离过长POP PSW;POP ACC;RETI;中断服务程序TIMER0:PUSH ACC;PUSH PSW;MOV A,#0B0H;ADD A,TL0;MOV TL0,A;MOV TH0,#03CH;DJ

48、NZ TIM_1,RETI_11;MOV TIM_1,#10;DJNZ TIM_2,RETI_11;MOV TIM_2,#2;INC SECOND;MOV A,SECOND;CJNE R3,#0,RETI_2;MOV R3,#60;DEC R4;RETI_2:DEC R3;CJNE A,#60,RETI_11;MOV SECOND,#0;INC MINUTE;MOV A,MINUTE;RETI_3:CJNE A,#60,RETI_11;MOV MINUTE,#0;MOV SECOND,#0;INC HOUR;MOV A,HOUR;CJNE A,#24,RETI_11;MOV HOUR,#0;M

49、OV MINUTE,#0;MOV SECOND,#0;T_YEARPD:MOV A,YEAR;MOV B,#100;DIV AB;MOV A,B;JZ T_YEARPD2;看年份是否能被100整除,若能,再进行额外判断MOV A,YEAR;不能被100整除,则判断是否能被4整除MOV B,#4;DIV AB;MOV A,B;JZ T_RUNYEAR;若年份能被4整除则跳转到闰年部分T_PINGYEAR:;年份不能被4整除则为平年MOV A,MONTH;CJNE A,#2,T_PINGMONTH;若不是2月,则跳转到平时的月份进行判断INC DAY;MOV A,DAY;CJNE A,#29,RE

50、TI_11;MOV DAY,#1;INC MONTH;MOV A,MONTH;CJNE A,#13,RETI_11;MOV MONTH,#1;INC YEAR;AJMP RETI_1;返回T_YEARPD2:;能被100整除的情况下,的额外判断MOV A,YEAR;MOV B,#100;DIV AB;MOV B,#4DIV ABJNZ T_PINGYEAR;若不能被400整除则为平年T_RUNYEAR:;闰年的情况MOV A,MONTH;CJNE A,#2,T_PINGMONTH;看是不是2月INC DAY;MOV A,DAY;CJNE A,#30,RETI_1;MOV DAY,#1;INC

51、MONTH;MOV A,MONTH;CJNE A,#13,RETI_1;MOV MONTH,#1;INC YEAR;AJMP RETI_1;T_PINGMONTH:MOV A,MONTHADD A,#2SUBB A,#3;判断是不是一月JZ T_DAY31;若是一月调用一个月31天的程序段MOV A,MONTH;SUBB A,#3;JZ T_DAY31;MOV A,MONTH;SUBB A,#4;JZ T_DAY30;调用一个月30天的程序段MOV A,MONTHSUBB A,#5JZ T_DAY31MOV A,MONTHSUBB A,#6JZ T_DAY30MOV A,MONTHSUBB A

52、,#7JZ T_DAY31MOV A,MONTHSUBB A,#8JZ T_DAY31MOV A,MONTHSUBB A,#9JZ T_DAY30MOV A,MONTHSUBB A,#10JZ T_DAY31MOV A,MONTHSUBB A,#11JZ T_DAY30MOV A,MONTHSUBB A,#12JZ T_DAY31RETI_1:POP PSWPOP ACCRETI;中断返回T_DAY31:;当一个月为31天时的日期计算方法INC DAYMOV A,DAYCJNE A,#32,RETI_1MOV DAY,#1INC MONTHMOV A,MONTHCJNE A,#13,RETI_

53、1MOV MONTH,#1INC YEARAJMP RETI_1T_DAY30:;当一个月为30天时的日期计算方法INC DAYMOV A,DAYCJNE A,#31,RETI_1MOV DAY,#1INC MONTHMOV A,MONTHCJNE A,#13,RETI_1MOV MONTH,#1INC YEARAJMP RETI_1DISP:;走时的显示程序,包括调时时的显示MOV DPTR,#LEDTABMOV A,SECONDMOV B,#10DIV AB;A存十位B存个位MOVC A,A+DPTRMOV P1,ACLR SEC_SACALL D_1MS;显示秒十位SETB SEC_SM

54、OV A,BMOVC A,A+DPTRMOV P1,ACLR SEC_GACALL D_1MS;显示秒个位SETB SEC_GMOV A,MINUTEMOV B,#10DIV ABMOVC A,A+DPTRMOV P1,ACLR MIN_SACALL D_1MSSETB MIN_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR MIN_GACALL D_1MSSETB MIN_GMOV A,HOURMOV B,#10DIV ABMOV DPTR,#LEDTABMOVC A,A+DPTRMOV P1,ACLR HOU_SACALL D_1MSSETB HOU_SMOV A,BMO

55、VC A,A+DPTRMOV P1,ACLR HOU_GACALL D_1MSSETB HOU_GRETDATEDISP:;日期的显示程序,包括日期调整时的显示MOV DPTR,#LEDTABMOV A,DAYMOV B,#10DIV AB;A存十位B存个位MOVC A,A+DPTRMOV P1,ACLR SEC_SACALL D_1MSSETB SEC_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR SEC_GACALL D_1MSSETB SEC_GMOV A,MONTHMOV B,#10DIV ABMOVC A,A+DPTRMOV P1,ACLR MIN_SACALL

56、D_1MSSETB MIN_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR MIN_GACALL D_1MSSETB MIN_GMOV A,YEARMOV B,#100DIV ABMOV A,BMOV B,#10DIV ABMOVC A,A+DPTRMOV P1,ACLR HOU_SACALL D_1MSSETB HOU_SMOV A,BMOVC A,A+DPTRMOV P1,ACLR HOU_GACALL D_1MSSETB HOU_GRETDATETZ1:;日期调整程序MOV 35H,#100DATETZ2:ACALL DATEDISPDJNZ 35H,DATETZ2JN

57、B P3.3,YEAR_TJNB P3.4,MONTH_TJNB P3.5,DAY_TJNB P3.1,MAIN3AJMP DATETZ1MAIN3:AJMP MAINYEAR_T:;年的调整很容易;直接加1ACALL DATEDISPINC YEARAJMP DATETZ1MONTH_T:;月的调整也很容易,加到13时月变为1ACALL DATEDISPINC MONTHMOV A,MONTHCJNE A,#13,DATETZ1MOV MONTH,#1AJMP DATETZ1DAY_T:;日期的调整需要判断是不是闰年,还要判断当月具体是哪个月YEARPD:MOV A,YEARMOV B,#1

58、00DIV ABMOV A,BJZ YEARPD2;看年份是否能被100整除,若能,再进行额外判断MOV A,YEAR;不能被100整除,则判断是否能被4整除MOV B,#4DIV ABMOV A,BJZ RUNYEAR;若年份能被4整除则跳转到闰年部分PINGYEAR:;年份不能被4整除则为平年MOV A,MONTHCJNE A,#2,PINGMONTH;若不是2月,则跳转到平时的月份进行判断INC DAYMOV A,DAYCLR CSUBB A,#29JC DATETZ1MOV DAY,#1AJMP DATETZ1;返回扫描YEARPD2:;能被100整除的情况下,的额外判断MOV A,YEARMOV B,#100DIV ABMOV B,#4DIV ABJNZ PINGYEAR;若不能被400整除则为平年RUNYEA

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!