毕业设计(论文)-基于单片机的智能时钟设计.doc_第1页
毕业设计(论文)-基于单片机的智能时钟设计.doc_第2页
毕业设计(论文)-基于单片机的智能时钟设计.doc_第3页
毕业设计(论文)-基于单片机的智能时钟设计.doc_第4页
毕业设计(论文)-基于单片机的智能时钟设计.doc_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

点客源学生论文武汉科技大学中南分校本科毕业设计(论文)题目:基于单片机的智能时钟设 计学院: 信息工程学院专业: 自动化学号: 20074224204学生姓名: 指导教师: 二一 年 十一 月 二十四日 前 言- 6 -第1章 Proteus软件简介- 7 -第2章方案论证与设计- 8 -2.1数字时钟方案- 8 -2.2数码管显示方案- 8 -2.2.1硬件方案- 8 -第3章 硬件系统设计- 9 -3.1系统框图与说明- 9 -3.2模块设计- 10 -3.2.1电源部分- 10 -3.2.2复位电路- 10 -3.3.3晶振电路- 11 -3.3.4单片机系统电路- 11 -3.3.5数码管显示驱动电路- 13 -3.3.6整点报时电路设计- 15 -3.3.7按钮设置电路- 15 -4.1用Proteus软件设计智能时钟的仿真电路- 16 -4.2电路图绘制- 17 -第5章 软件系统设计- 21 -5.1主程序设计- 21 -5.1.1中断程序流程图- 21 -5.1.2时、分、秒按键判断和调时设置流程- 23 -5.1.3年、月、日按键判断和调时设置流程图- 24 -5.1.4显示时、分、秒子程序流程图- 25 -5.1.5显示年、月、日子程序流程图- 26 -5.2源程序- 27 -第6章 程序编写调试及智能时钟系统调试与仿真- 38 -6.1程序汇编软件Keil简介及操作方法- 38 -6.2时钟系统仿真- 43 -6.3时钟系统调试- 44 -第7章 总 结- 47 -致 谢- 47 -参考文献- 48 -摘 要本系统设计是基于ATMEL公司的AT89C51单片机开发平台实现一种高精度,智能化的时钟系统。AT89C51是一种带4K字节闪存可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory)的低电压、高性能CMOS 8位微处理器,采AT89C51单片机为控制核心,由单片机控制数码管的显示,,修改设置时间采用操作方便的键盘,整点报时系统使用无源蜂鸣器,通过调节输入方波的占功比,达到美妙旋律的声音实现报时的功能,整个系统设计比较完善,有显示时间日期、整点报时、时间日期调节设置的功能,除些之外还介绍了51单片机和汇编程序一些经验和方法,以便将51单片机的汇编程序经过局部的修改就可以移植到单片机上,实现不同的功能,节约重新开发的时间。最后总结了一些关于在做基于单片机的智能时钟所遇到的问题和困难,以及将AT89C51单片机与工业标准的MCS-51的各方面性能进行了比较,其最大的特点是只读存储器可以反复擦除,精简版本高效微控制器AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,也是它应用较为广泛的原因。关键词:AT89C51单片机;数码管;蜂鸣器Intelligent design based on single chip clockMeterZhouhengkunAbstractThe system design is based on ATMEL Corporation AT89C51 microcontroller development platform to achieve a high precision, intelligent clock system.AT89C51 is a flash with 4K bytes of erasable programmable read only memory (FPEROM-Flash Programmable and Erasable Read Only Memory), low voltage, high-performance CMOS 8-bit microprocessor, microcontroller AT89C51 adopted as the control center, by the MCU control the digital display of, modify, easy to operate, set the time using the keyboard, the whole point timekeeping system using passive buzzer, by adjusting the input square wave of the total power ratio, to achieve chime melodies sound features, the entire system more perfect, showing time and date, the whole point of time, adjust the setting time and date functions, in addition to those introduced in addition to 51 single-chip and assembly procedures and methods of some experience, so that after 51 MCU assembler can be transferred to local changes to the microcontroller, to achieve different functions, saving development time again. Concludes with a summary about doing intelligent microcontroller-based clock problems and difficulties encountered, and the AT89C51 microcontroller with industry-standard MCS-51 performance in all aspects were compared, the biggest feature is read-only memory can be repeated rubbing In addition, efficiently streamlined version of the microcontroller AT89C51 microcontroller for many embedded control system provides a high flexibility and low cost solution, but also because it is widely used.Key words: AT89C51 microcontroller; digital; buzzer前 言随着科学技术的发展和电子技术产业结构调整,单片机开始迅速发展,由于家用电器逐渐普及,市场对于智能时钟控制系统的需求也越来越大。单片机以其芯片集成度高、处理功能强、可靠性高等优点,成功应用于工业自动化、智能仪器仪表、家电产品等领域。近些年,人们对数字钟的要求也越来越高,传统的时钟已不能满足人们的需求。多功能数字钟不管在性能还是在样式上都发生了质的变化,有电子闹钟、数字闹钟等等。单片机在多功能数字钟中的应用已是非常普遍的,人们对数字钟的功能及工作顺序都非常熟悉。但是却很少知道它的内部结构以及工作原理。由单片机作为数字钟的核心控制器,可以通过它的时钟信号进行计时实现计时功能,将其时间数据经单片机输出,利用显示器显示出来。通过键盘可以进行定时、校时功能。输出设备显示器可以用液晶显示技术和数码管显示技术。单片机系统作为一种典型的嵌入式系统,其系统设计包括硬件设计和软件编程设计两个方面,其调试过程一般分为软件调试、硬件测试、系统调试,通常不用制作具体的电路板用单片机系统的虚拟仿真软件Proteus实现仿真功能。本文所述智能时钟设计主要指时钟显示、时间设置、整点报时等控制系统。本文采用AT89C51型单片机为核心实现智能时钟控制,至所以选择AT89C51型单片机而没有选择其他单片机主要原因在于AT89C51型单片机进入市场时间早、总线开放、仿真开发设备多、芯片及其开发设备价格低廉、速度较快、电磁兼容性较好的。AT89C51单片机与工业标准的MCS-51的各方面性能比较,其最大的特点是只读存储器可以反复擦除,是一种精简版本高效微控制器,AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。第1章 Proteus软件简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。可以实现数字电路,模拟电路及微控制器系统与外设的混合电路系统的电路仿真、软件仿真、系统协同仿真和pcb设计等功能,是目前唯一能够对各种处理器进行实时仿真和测试的EDA工具,微控制器系统相关仿真需建立编译和调试环境,一般可供选择的有Keil C51uVision和Wave6000软件,虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等芯片,同时支持PLM、汇编和C语言的程序设计。操作界面轻松易学,在调试程序和软件仿真方面有很强大的功能。通过动态器件实时看到运行后的输入、输出的效果,所以Proteus为我们建立了完备的电子设计开发环境。第2章方案论证与设计2.1数字时钟方案数字时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。方案二:本方案完全用软件仿真实现数字时钟。原理为:在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。基于硬件的考虑,本设计采用方案二完成数字时钟的功能2.2数码管显示方案 2.2.1硬件方案方案一:静态显示,静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制,静态显示时较小的电流能获得较高的亮度,且字符不闪烁。缺点是硬件电路比较复杂,成本较高。方案二:动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。动态显示的亮度比静态显示要差一些,所以在选择限流电阻时应略小于静态显示电路中的。 调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。从节省I/O口和降低能耗出发,本设计采用方案二。第3章 硬件系统设计3.1系统框图与说明控制部分单片机(AT89C51)复位电路蜂鸣器整点报时按键k1、k2、k3K4、k5电源部分,直流电5v段选8个七段共阴极数码管显示秒、分钟、小时日、月、年位选部分接p2口3.2模块设计3.2.1电源部分 图3-2如图3-2所示,从外部引入4.5V的直流电,为单片机、复位电路提供电源。3.2.2复位电路图3-3如图3-3所示,复位电路主要由型号为1N4148的二极管,型号为10UF/16V的电解电容,型号为104的瓷片电容,10K的电阻以及按键S1构成,S1接芯片的相应引脚RST,当开关按下时引脚RST为高电平1,断开时引脚为低电平0。3.3.3晶振电路C1,C2在是电时帮助晶振起振XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL1应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。3.3.4单片机系统电路单片机型号及引脚功能如图2所示,AT89C51有40引脚,双列直插(DIP)封装,所用引脚功能如下:1. VCC 运行时加5V2. GND 接地3. XTAL1 振荡器反相放大器及内部时钟发生器的输入端4. XTAL2 振荡器反相放大器的输出端5. RST 复位输入,高电平有效,在晶振工作时,在RST引脚上作用2个机器周期以上的高电平,将使单片机复位。WDT溢出将使该引脚输出高电平,设置SFT AUXR的DISRTO位(地址8EH)可打开或关闭该功能。DISRTO位缺省为RESET输出高电平打开状态。6. EA/VPP 片外程序存储器访问允许信号。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地),如果EA端为高电平(接Vcc端),CPU则执行内部程序存储器中的指令。7. P1口,P2口P1,P2是一组带内部上拉电阻的8位双向I/O口。运行时通过P1口控制驱动电路的工作,将数据送到数码管,显示相应的段码,为了达到减少功耗或满足端口对最大电流的限制,应加上一限流电阻。P2.0P2.7口控制数码管的位选,使六个数码管轮流显示数据,等于0时位选三极管导通,等于1 时位选三极管截止。8. 无自锁开关(S2P3.7)开关接相应引脚P3.7,当开关按下时,相应引脚为低电平0,断开时引脚为高电平1。3.3.5数码管显示驱动电路abcdegGNDfdpGNDabcefgddpabcdefgdpdpgfedcba5V(a)(b)共阴极共阳极 数码管点亮条件:段选和位选,结合下图图3-4 图3-5图3-5为位选电路,PNP型三极管的集电极接数码管的公共端,当P2口对应的引脚输出低电平时三极管导通,对应的数码管显示数据。这样,在同一时刻,多位LED中只有选通的那1位显示出字符,而其他5位则是熄灭的。同样,在下一时刻,只让下一位的位选线处于选通状态,而其他个位的位选线处于关闭状态,在段码线上输出将要显示字符的段码,则同一时刻,只有选通位显示出相应的字符,而其他各位则是熄灭的。如此循环下去,就可以使各位显示出将要显示的字符。虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED的余辉和人眼的视觉暂留作用,只要每位显示间隔足够短,则可以造成多位同时亮的假象,达到同时显示的效果。图3-4(a)图为数码管的引脚图,每位的段码线(a,b,c,d,e,f,g,dp)分别与1个8位的锁存器输出相连,由AT89S51控制组合09十个数据,如令其显示1则b,c引脚(即2,3引脚)送高电平,此时数码管显示1。由于各位的段码线并联,8位I/O口输出段码对各个显示位来说都是相同的。当数码管正常工作时必须接上拉电阻,数码管点亮一般要510mA的电流,po输出电流不到1mA,同时上拉电阻起到一个限流的作用。在多位LED显示时,为了简化电路,降低成本,节省系统资源,将所有的N位段选码并联在一起,由一片74HC595控制(见图2)。由于所有LED的段选码皆由一个74HC595并行输出口控制,因此,在每一瞬间,N位LED会显示相同的字符。想要每位显示不同的字符,就必须采用扫描的方法,即在每一瞬间只使用一位显示字符。在此瞬间,74HC595并行输出口输出相应字符段选码,而位选则控制I/O口在该显示位送入选通电平,以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。由于74HC595具有锁存功能,而且串行输入段选码需要一定时间,因此,不需要延时,即可形成视觉暂留效果。3.3.6整点报时电路设计 本电路采用无源蜂鸣器作为发声报时的声源,对P1.7口 延时翻转电平产生驱动波形对蜂鸣器进行驱动。通过改变延时时间进而改方波的占功比可以得到驱动蜂鸣器的方波信号。这样蜂鸣器报时时就可以听到不同音调的报时声。 3.3.7按钮设置电路按键按下时,由于抖动的问题,用延时的方法去除抖动,解决方案如下:有键按下吗?消抖,延时10ms有键按下吗?确认是哪一个键被按下第4章 原理图4.1用Proteus软件设计智能时钟的仿真电路关于Proteus工作界面Proteus软件在第一章1.2节已做详细介绍,下面介绍一下Proteus的编辑环境:启动Proteus IsIs,进入工作界面,如图4-1-1,包括标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择器窗口、图形编辑口。下面我会用photoshop将其工作界面详细介绍如下: 图4-1-1 Proteus的工作界面4.2电路图绘制1)新建文件:打开Proteus,点击File,在弹出的菜单中选择New design,在弹出的窗口中选择DEFAULT,如图4-2-1 图4-2-1 2)选择所需元器件:根据设计要求,点击对象选择按钮Pick Devices,在Keywords中输入所需元器件名,进行搜索查找,在Results栏列表项中,双击所需元器件,就可以将所选元器件添加到左则的元器件列表区,然后在列表区用鼠标单击左键,这样就可把所选元器件放入图形编辑窗口。如在Keywords中输入AT89C51,在Results栏双击它,就可将AT89C51添加到对象选择窗口,如图4-2-2,然后用同样的方法将所需元器件全部加入到图形编辑窗口。如图4-2-3,点击绘图工具栏中的添加电源和接地符号。图4-2-2本次设计所需用到的元器件如下:AT89C51 单片机7SEG-MPX8-CC-BLUE 八位八段共阴数码管SOUNDER 蜂鸣器CAP CAPACITOR电容BUTTON 按键CRYSTAL 晶振RES 3WATT3K3电阻 Power 电源Ground 接地图4-2-33)对整个元器件进行合理布局,进行连线,连接时当鼠标靠近一个的引脚时,跟着鼠标的指针就会出现一个X提示符,点击鼠标左键即可画线,遇到需要拐弯时点击一下即可,在终点再点击确认就可画出一段导线,重复上述工作进行连线,原理图的绘制就完成了,如图4-2-4。图4-2-44)对重复使用的元器件进行标注,在一些重要器件旁边附加文字说明(点击,在绘图区单击鼠标左键,会弹出一对话框,在String中输入相应的文字,设定Height和Global Style,可以完成其属性的设置),检查无误后,便完成了整个电路图的绘制,如图4-2-5。图4-2-55)绘制完成后点击保存,如图4-2-6图4-2-6 第5章 软件系统设计5.1主程序设计5.1.1中断程序流程图主程序开始程序初始化定时器装初值50ms,开中断秒寄存器单元清0秒值加1计数寄存单元清0判断秒满60?分值加1判断分满60?分寄存器单元清0时值加1判断时满24?时、分、秒寄存器单元清0天值赋1天值加1月值加1判断年满一世纪?年值加1月值赋1判断月12年寄存器单元清0中断返回开启整点报时判断天满该月的总天数?计数器加1,判断是否加到20次5.1.2时、分、秒按键判断和调时设置流程显示时分秒判断日期显示键是否按下?延时去抖动显示年月日判断秒设置键是否按下?判断分设置键是否按下?判断时设置键是否按下?判断秒设置键抬起?秒值加1判断秒满60?分值加1秒清0日设置键抬起后,判断有没有再次按下?分设置键抬起后,判断有没有再次按下?分是否满60?分清0时值加1时是否满60?时分秒清0时设置键抬起后,判断有没有再次按下?判断时键抬起?判断分键抬起?5.1.3年、月、日按键判断和调时设置流程图显示年月日判断时间显示键是否按下?延时去抖动显示时分秒判断日设置键是否按下?判断月设置键是否按下?判断年设置键是否按下?判断日设置键抬起?日值加1判断日满最大天数?月值加1日清0日设置键抬起后,判断有没有再次按下?月设置键抬起后,判断有没有再次按下?月是否13?给月赋1年值加1年是否到一世纪?年清0年设置键抬起后,判断有没有再次按下?判断年键抬起?判断年键抬起?5.1.4显示时、分、秒子程序流程图显示时分秒开秒十位位选秒/10对应地表地址中的数送p0使数码管显示延时开秒个位位选开分隔符位选送#40到p0延时延时秒%10对应地表地址中的数送p0使数码管显示开分十位位选分/10对应地表地址中的数送p0使数码管显示延时开分个位位选开分隔符位选送#40到p0延时延时分%10对应地表地址中的数送p0使数码管显示时/10对应地表地址中的数送p0使数码管显示延时开时个位位选延时时%10对应地表地址中的数送p0使数码管显示开时十位位选5.1.5显示年、月、日子程序流程图显示年月日开日十位位选日/10对应地表地址中的数送p0使数码管显示延时开日个位位选开分隔符位选送#40到p0延时延时日%10对应地表地址中的数送p0使数码管显示开月十位位选月/10对应地表地址中的数送p0使数码管显示延时开月个位位选开分隔符位选送#40到p0延时延时月%10对应地表地址中的数送p0使数码管显示年/10对应地表地址中的数送p0使数码管显示延时开年个位位选延时年%10对应地表地址中的数送p0使数码管显示开年十位位选5.2源程序包括主程序、中断子程序、显示子程序、判断按键和调时设置程序、等待按键抬起程序、报时子程序、延时子程序用单片机AT89C51设计一个多功能电子时钟能实现时分秒年月日显示,能整点报时,还有调整时间、日期的功能。单片机AT89C51的P0口接数码管的7段,P2口接数码管的位选。P1.0-P1.5接按键,P1.7接蜂鸣,数码管是一个八位一体共阴的,时间初始值1:59:55,日期初始值10年11月11号SET_1 BIT P1.0 ;秒、日控制键SET_2 BIT P1.1 ;分、月控制键SET_3 BIT P1.2 ;时、年控制键SET_4 BIT P1.3 ;切换时分秒显示SET_5 BIT P1.4 ;切换年月日显示SECOND EQU 30H ;秒寄储单元MINUTE EQU 31H ;分寄储单元HOUR EQU 32H ;时寄储单元DAY EQU 33H ;日寄储单元MONTH EQU 34H ;月寄储单元YEAR EQU 35H ;年寄储单元TCNT EQU 36H ;计数寄储单元YYY EQU 37H ;月天数比较单元 ORG 0000H AJMP TANG ORG 000BH LJMP INT_T0TANG: MOV DPTR,#TAB;把DPTR指针指向表格TAB的所在的地址,用于读数码管值表 MOV HOUR,#1 ;对时、分、秒、年、月、日初始化 MOV MINUTE,#59 MOV SECOND,#55 MOV DAY,#11 MOV MONTH,#11 MOV YEAR,#10 MOV TCNT,#0;计数器 MOV TMOD,#01H;设置定时器0模式1,模式1定时最大值65.536ms,而模式0最大8.192ms MOV TH0,#3CH;定时初值50s(65535-50000)/256商放高八位 MOV TL0,#0b0H;(65535-50000)%256余数放低八 MOV IE,#82H;中断允许寄存器IE,cpu开中断,T0 开中断 SETB TR0;启动定时器0;*;设置时分秒程序:;判断时分秒是否有控制键按下,是哪一个键按下,并调用显示时分秒;* A1: LCALL DISPLAY1;显示秒分时 JNB SET_5,A2;SET_5按下为低电平,为0,跳转,不按为1,顺序执行,即若日月年切换键没按下,顺序执行 JNB SET_1,S1;按下去跳转到s1 JNB SET_2,S2 JNB SET_3,S3 LJMP A1 S1: LCALL DELAY ;去抖动等待抬起 JB SET_1,A1;判断按键是否抬起,抬起秒就加1 INC SECOND ;秒值加1 MOV A,SECOND CJNE A,#60,timej0 ;判断是否加到60秒 MOV SECOND,#0 LJMP K1 S2: LCALL DELAY JB SET_2,A1 K1: INC MINUTE ;分钟值加1 MOV A,MINUTE CJNE A,#60,timej1 ;判断是否加到60分 MOV MINUTE,#0 LJMP K2 S3: LCALL DELAY JB SET_3,A1 K2: INC HOUR ;小时值加1 MOV A,HOUR CJNE A,#24,timeJ2;判断是否加到24小时 MOV HOUR,#0 MOV MINUTE,#0 MOV SECOND,#0 LJMP D LJMP A1;*;控制时分秒等待按键抬起;*timej0: JB SET_1,A1;没到60秒,判断K1键抬起?抬起进入A1判断按键有没有再次按下,若按下继续加1 LCALL DISPLAY1 SJMP timej0timej1: JB SET_2,A1 LCALL DISPLAY1 SJMP timej1timej2: JB SET_3,A1 LCALL DISPLAY1 SJMP timej2;*; 设置年月日程序:;判断年月日是否有控制键按下,是哪个按键按下,并调用显示年月日;*A2: LCALL DISPLAY2 JNB SET_4,A1 JNB SET_1,h1 JNB SET_2,h2 JNB SET_3,h3 LJMP A2 h1: LCALL DELAY ;去消抖 JB SET_1,A2 F: INC DAY ;日加一 MOV A,MONTH ADD A,#9 MOVC A,A+DPTR;DPTR占一个首地址了,十个数对应一个首地址+9个地址表地址加9以便找到对应月的天数 MOV YYY,A MOV A,DAY CJNE A,YYY,y0;判断天数,为真跳转,即显示天数达到该月满天数,就过一个月,到下一月 MOV DAY,#0 LJMP M1 D: LJMP Y3 h2: LCALL DELAY JB SET_2,A2 M1: INC MONTH ;月加一 MOV A,MONTH CJNE A,#13,Y1;判断是否加到12 MOV MONTH ,#1 LJMP M2 h3: LCALL DELAY JB SET_3,A2 M2: INC YEAR ;年加一 MOV A,YEAR CJNE A,#100,Y2;判断是否加到99 MOV YEAR,#0 LJMP A2;*;控制年月日等待按键抬起;*Y0: JB SET_1,A2;日抬起 LCALL DISPLAY2 SJMP Y0Y1: JB SET_2,A2;月抬起 LCALL DISPLAY2 SJMP Y1Y2: JB SET_3,A2;年抬起 LCALL DISPLAY2 SJMP Y2Y3: JB SET_3,A2;调整年等待键抬起并显示年 LCALL DELAY1 LCALL DELAY1 LCALL DISPLAY2 SJMP F;*;定时器中断服务程序,对秒,分钟,小时与日,月,年的计数;*INT_T0: MOV TH0,#3ch MOV TL0,#0b0h INC TCNT MOV A,TCNT CJNE A,#20,RETUNE ;计时1秒 INC SECOND MOV TCNT,#0 MOV A,MINUTESEC: MOV A,SECOND CJNE A,#60,RETUNE INC MINUTE MOV SECOND,#0 MOV A,MINUTE CJNE A,#60,RETUNELCALL BS ;调用整点报时LCALL BS LCALL DELAY1 LCALL BSLCALL BSLCALL BS LCALL DELAY1LCALL BSLCALL BSLCALL BS LCALL DELAY1 LCALL BSLCALL BS LCALL DELAY1 INC HOUR MOV MINUTE ,#0 MOV A,HOUR CJNE A,#24,RETUNE INC DAY MOV HOUR,#0 MOV MINUTE,#0 MOV SECOND,#0 MOV A,MONTH ADD A,#9 MOVC A,A+DPTR MOV YYY,A;对应month的天数给 MOV A,DAY CJNE A,YYY,RETUNE INC MONTH MOV DAY,#1 MOV A,MONTH CJNE A,#13,RETUNE INC YEAR MOV MONTH,#1 MOV A,YEAR CJNE A,#99,RETUNE MOV YEAR,#0 MOV TCNT,#0RETUNE:RETI;用于中断服务子程序的末尾,中断返回;*;秒时分、年月日显示控制子程序;*DISPLAY1: MOV A,SECOND ;显示秒 MOV B,#10 DIV AB;A除以B,商 放A中,余数放中 MOV p2,#0FDh;数码管位选 ,使第2个数码管亮 MOVC A,A+DPTR;若A中存的商为2,A+DPTR就是把DPTR对应的TAB表首地址+表序号2,这样就可读出对应数码管表中的值06H,也就是数字2 MOV P0,A;通过p0控制数码管输出秒十位数字 LCALL DELAY MOV A,B MOV p2,#0FEh; MOVC A,A+DPTR MOV P0,A;通过p0控制数码管输出秒个位数字 LCALL DELAY MOV p2,#0FBh;数码管位选 ,为该数码管亮做准备 MOV P0,#40H ;显示分隔符,数字中间一横亮,数码管abcdefg.当g亮时为-,即01000000为40H显示分隔符 LCALL DELAY MOV A,MINUTE ;显示分钟 MOV B,#10 DIV AB MOV p2,#0EFh MOVC A,A+DPTR MOV P0,A;通过p0控制数码管输出分十位数字 LCALL DELAY MOV A,B MOV p2,#0F7h MOVC A,A+DPTR MOV P0,A LCALL DELAYMOV p2,#0DFh MOV P0,#40H ;显示分隔符 LCALL DELAY MOV A,HOUR ;显示小时 MOV B,#10 DIV AB MOV p2,#7Fh MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV A,BMOV p2,#0BFh MOVC A,A+DPTR MOV P0,A LCALL DELAY RETDISPLAY2: MOV A,DAY ;显示日 MOV B,#10 DIV ABMOV p2,#0FDh MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV A,B MOV p2,#0FEh MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV p2,#0FBh MOV P0,#40H ;显示分隔符 LCALL DELAY MOV A,MONTH ;显示月 MOV B,#10 DIV ABMOV p2,#0EFh MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV A,B MOV p2,#0F7h MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV p2,#0DFh MOV P0,#40H ;显示分隔符 LCALL DELAY MOV A,YEAR ;显示年 MOV B,#10 DIV AB MOV p2,#7Fh MOVC A,A+DPTR MOV P0,A LCALL DELAY MOV A,B MOV p2,#0BFh MOVC A,A+DPTR MOV P0,A LCALL DELAY RETTAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;0,1,2,3,4,5,6,7,8,9 DB 20H,1EH,20H,1FH,20H,1FH,20H,20H,1FH,20H,1FH,20H;对应(1月,2月,3月,4月,5月,6月,7月,8月,9月,10月,11月,12月)的天数;*;整点报时服务程序;*BS:MOV R4,#100 SETB P1.7BS1: LCALL DELAY2 CPL P1.7 DEC R4 CJNE R4,#0,BS1 CLR P1.7

温馨提示

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

评论

0/150

提交评论