1、河南科技学院目录第1章 前言 1第2章 系统设计 1第3章 软件设计(图)8第4章 操作与调试10第5章 致谢 14附录一15push ACC17AJMP SHOW_221AJMP SHOW_322LJMP HOUR_OFF28CJNE R5,#32,DAY_OFF;益出28LJMP MIN_OFF28AJMP HOUR_OFF ; 转到时显28CJNE R5,#60,MIN_OFF;益处29k2: MOV A, #00H; 显示0 关29LJMP K1 ; 按了SB2、转开30POP PSW30READ:MOV A , P1;读取按键30DJNZ R4,dl130DEL:MOV R2, #0
2、FFH30DJNZ R0, DEL30MOV R6 , HOUR31第1章 前言单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显数
3、字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,同时引入一个内部充电电源在停止外部供电时,仍具有内部计时的功能。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点第2章 系统设计2.1 电路组成及工作原理本文数字时钟设计原理主要利用AT89C51单片机,由单片机的P0口控制数码管的位显示, P2口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入两个电源电路,一个是外部电源
4、系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的总电压。另一个是备用电源,当外部电源关断时由它提供工作电压使CPU继续工作,利用单片机的空闲方式降低功耗,数码管不显示但能使计时保持正常,不会造成掉电时计时清零的现象。针对内外两个电源情况又加入了MC34064电压检测电路,用于时实判断是哪各电源在工作。 整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出
5、一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。2.2 硬件部分2.2.1 单片机系统2.2.1.1 单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI
6、),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。 本文采用的单片机为AT89C51,AT89C51是一种低功耗、高性能的片内含有4K字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。它的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,
7、与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。2.2.2.2 AT89C51的主要性能参数:与MCS-51产品指令系统完全兼容4k 字节可重擦写FLASH闪速存储器1000次擦写周期全静态操作:0Hz24MHz三级加密程序存储器1288字节内部RAM32个可编程I/O口线2个16位定时/计数器6个中断源可编程串行URAR通道低功耗空闲和掉电模式 AT89C51提供以下标准功能:4k 字节FL
8、ASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。2.2.2 显示部分单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED(Light Emitting Diode);液晶显示器LCD(Liquid Crystal Display);近几年也有
9、配置CRT显示器的。而目前在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。2.2.2.1 LED显示结构与原理单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!这种显示器有共阴和共阳两种!发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。(如下图所示)一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段) a_g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为
10、了保护各段LED不被损坏,需外加限流电阻。由于共阴极连接需加驱动,故在这里我采用的是共阳阳极连接。以共阳极LED为例,各LED公共阳极K0接高电平,若向各控制端a,b,,g,dp顺次送入00011110信号,则该显示器显示“”字型。共阴极7段LED显示数字0 F、文字、符号及小数点的编码。 共阴极7 段LED显示字型编码表 显示字符 共阴极段选码 显示字符 共阴极段选码 0 3FH 5 6DH 1 06H 6 7DH 2 5BH 7 07H 3 4FH 8 7FH 4 66H 9 6FH “灭”(黑) 00H 2.2.2.2 LED显示器接口及显示方式 LED显示器有静态显示方式和动态显示方式
11、两种。静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。LED显示器工作于静态显示方式时,各位的共阴极接地;若为共阳极则接+5V电源。每位的段选线分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。正因为如此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。因此,在显示位数较多的情况下,一般都采用动态显示方式。由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相 同的字符。要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间
12、只使某一位显示字符。在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。 在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。而共阴(共阳)极公共端分别由相应的I/O口线控制,实现各位的分时选通。段选码,位选码每送入一次后延时1MS,因人的视觉暂留时间为0.1S(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描方式。2
13、.2.3 键盘工作模块 按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。 按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。 全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路。这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。非编码键盘只简单地
14、提供行和列的矩阵,其它工作均由软件完成。由于其经济实用,较多地应用于单片机系统中。在本套设计中由于只需要几个功能键,此时,可采用独立式按键结构2.2.3.1 独立式按键结构 独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如下图所示。独立式按键的典型 独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,采用。2.2.3.2 独立式按键的软件结构独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输
15、入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。2.2.4电压检测电路电路核心元件是MC34064,它具有电压检测功能。工作方式是低电平有效, 因此将其1脚与单片机的P1.7相接,2脚接VCC,3脚接地。当外部电源+5V供电时,P1.7为高电平送入累加器C,此时C=1调入显示,时钟进入正常的计时显示状态。当+5V没接入而采用备用电源工作时,P1.7为低电平送入累加器C,此时C=0单片机进入空闲方式,关断显示但内部计时仍在进行。这样就能很好地判断是外部+5V电源供电还是备用电池供电,根据CPU的工作状态进而实现时钟断电仍能计时,当重新接入+5V电源时实现计时显
16、示同步运行的功能。2.2.5备用电池功耗问题 在设计方案中采用+3.6V可充电电池作为备用电源,但若把电池直接并联在外部+5V电源引脚两端时,存在着电池功耗问题如:1.接入+5V时会对电池B1进行电流很大的强充电过程,这会直接影响电池的使用寿命。2.停止外部+5V供电时,此时外部电源等效于一个电压源,充电电池B1既要对CPU供电又要对电压源供电,这样会使电池电量消耗过大,使得电池供电效率大大降低。为解决上述问题,我们引入两个1N5819:1.若+5V接入时,一方面为显示部分和复位电路提供+5V 工作电压,另一方面通过V8、 R15对电池B1进行涓流充电,同时通过V7向CPU提供工作电压。从而很
17、好地解决电池充电时,电流过大影响电池使用寿命的问题。2.当外部+5V电源断开时,由电池B1经V7向CPU提供工作电压,同时由于V8截止故不会造成电池B1对外部的放电,从而提高了电池的供电效率,能够长时间地为CPU提供工作电压。2.2.6 直流稳压电源部分直流稳压电源是给电子设备提供稳定直流电压的电子电路。这次电路需要的是+5V直流电源。2.2.6.1 主要技术指标(1) 输入交流电压220V(5060Hz)。(2) 输出直流电压5V,输出电流1A。(3) 输入交流在220V上下波动10%时,输出电压相对变化量小于2%。(4) 输入电阻R00.1。(5) 输出最大波纹电压小于10Mv。2.2.6
18、.2 滤波电路 它的任务是将全滤波形的输出通过RC滤波网络以后变成更平坦的直流电压,减小脉动,提高整流的效果。这是整流管中通过的电流的瞬间值要比平均值大得多,特别在接通电源瞬间有相当大的冲击电流(即充电电流)通过整流管,这一点要引起注意。(1) 电源变压器它的任务是把电源电压220V变压到合适的大小。如果U2的值太大,会造成集成端稳压器7805的功豪大,温升高,且浪费电能。反之,如果U2的值小到一定程度,三端稳压器不能正常工作,失去稳压作用.因此U2的值应大小合适,这个值应该使三端稳压器在交流电网电压最低和输出电流最大时能正常工作。而且在正常稳压的前提下,它的压降尽可能小,以减小功耗。(2)
19、整流电路 它的任务是将正弦波变换成直流电压。这里一般采用桥式整流电路来实现,既可用四个二极管来组成,也可用整流桥堆来完成,只是参数一定要选择合理。(3) 稳压电路 要求输出恒定的直流电压,且要达到设计中所提出的要求。在此选用一片7805芯片来实现。2.2.7相关参数计算关于驱动电路中的限流电阻R,通常根据LED的工作电流计算而得到的。例如:(1.) R1=(VCC-V0)/I0 其中VCC=+5V, V0的压降为+1.4v, I0的工作电流为10mA 所以R1=(5V-1.4V)/10mA=360,要想得到10mA的工作电流必须使限流电阻大于360,故在电路中我选用了390的电阻。(2) 对于
20、连接位选显信号的电阻选用上,由Ic0.1 mA,根据R2=(VCC-Vbc)/Ib=(5v-0.7v)/0.1 mA=4.3k,若要Ib0.1 mA则必须使R24.3 k,因此选用了比较接近的4.7 k第3章 软件设计(图)3.1时钟主程序流程图3.2定时中断服务程序流程图3.3电路图第4章 操作与调试4.1 KEIL uVision3简介4.1.1 8051开发工具 KEIL C51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。C51已被完全集成到uVision3的集成开
21、发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uVision3 IDE可为它们提供单一而灵活的开发环境。 C51 V7版本是目前最高效、灵活的8051开发平台。它可以支持所有8051的衍生产品,也可以支持所有兼容的仿真器,同时支持其它第三方开发工具。因此,C51 V7版本无疑是8051开发用户的最佳选择。 4.1.2 uVision3集成开发环境 (1)、项目管理 工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。 一个单一的uVision3工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单
22、个文件。 uVision3包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定 微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器(math accelerator)的特 性。 uVision3可以为片外存储器产生必要的连接选项:确定起始地址和规模。 (2)、集成功能 uVision3的强大功能有助于用户按期完工。 1.集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。 2.文件寻找功能:在特定文件中执行全局
23、文件搜索。 3.工具菜单:允许在V3集成开发环境下启动用户功能。 4.可配置SVCS接口:提供对版本控制系统的入口。 5.PCLINT接口:对应用程序代码进行深层语法分析。 6.Infineon的EasyCase接口:集成块集代码产生。 7.Infineon的DAVE功能:协助用户的CPU和外部程序。DAVE工程可被直接输入uVision3。4.2 Proteus简介Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:实现了单片机仿真和SPICE电路仿真相结合。具
24、有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVisio
25、n3等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。本章介绍Proteus ISIS软件的工作环境和一些基本操作。4.2.1进入Proteus ISIS双击桌面上的ISIS 6 Professional图标或者单击屏幕左下方的“开始”“程序”“Proteus 6 Professional” “ISIS 6 Professional”,出现如图4.1所示屏幕,表明进入Proteus ISIS集成环境。图4.1 启动时的屏幕4.2.2 工作界面Proteus ISIS的工作界面是一种标准的Windows界面,如图4.2所示。包括:标题栏、
26、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图4.2 Proteus ISIS的工作界面4.3 软件调试软件调试的任务是利用ISIS开发工具进行在线仿真调试,发现和纠正程序错误,同时也能发现仿真结果故障。程序的调试应一个模块一个模块地进行,我们首先单独调试各功能子程序,检验程序是否能够实现预期的功能,接口电路的控制是否正常等;最后逐步将各子程序连接起来总调。联调需要注意的是,各程序模块间能否正确传递参数,特别要注意各子程序的现场保护与恢复。调试的基本步骤如下:(1)、修改显示缓冲区内容,屏蔽拆字程序,调试
27、动态扫描显示功能。例如将DISP0DISP5单元置为“012345”,应能在LCD上从左到右显示“012345”。若显示不正确,可在中断子程序相应位置设置断点调试检查。然后修改计时缓冲区内容,调用拆字程序,调试显示模块。 (2)、运行主程序调试模块,不按下任何键,检查是否能开始正确显示。若不能正确显示,则应在定时器中断服务子程序中设置断点,检查HOUR、MIN、SEC单元是否随断点运行而变化。然后屏蔽缓冲区初始化部分,用仿真器修改万年历显示缓冲区内容为2008年12月12日,运行主程序(调进位键),检验能否正确进位,以及试调时间看能否正确的进位。(3)、调试键盘扫描模块,先用延时5ms子程序代
28、替显示子程序延时消抖,在求取键号后设置断点,中断后观察A累加器中的键号是否正确;然后恢复用显示子程序延时消抖,检验与显示模块能否正确连接。(4)、调试时间设置模块。首先屏蔽COMB子程序,单独调试键盘设置模块,观察显示缓冲区DISP0DISP5单元的内容是否随键入的键号改变,以及键号能否在LCD上显示。然后屏蔽子程序,单独调试合字模块。(5)、运行主程序联调,检查能否用键盘修改当前万年历,时间,以及温度能否正确显示。1 开机时,显示12:00:00的时间开始计时;2 P0.0/AD0控制“秒”的调整,每按一次加1秒; 3 P0.1/AD1控制“分”的调整,每按一次加1分; 4 P0.2/AD2
29、控制“时”的调整,每按一次加1个小时; 第5章 致谢在设计过程中,通过针对性地查找资料,了解了些电子方面的资料,既增长了自己见识,补充最新的专业知识,又提高了自己的应用能力。这次对AT89C51有了一个全面的认识,在此基础上结合以前所学的专业知识,从而把我所学的知识贯穿到一起,对电子专业有了一个更全面的认识!总之这次毕业设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。最后,我要感谢付俊辉老师,在这次毕业设计中给了我许多的帮助。同时也感谢河南科技学院明天更美好!第6章 参考
30、文献【1】单片机原理与接口技术,余锡存主编,西安电子科技大学出版社,2001.7. 【2】MCS-51单片机原理与应用,蔡美琴主编,高等教育出版社,1992.8. 【3】单片机原理与应用技术,张友德、谢伟毅主编,机械工业出版社,2004.3. 【4】单片机原理接口与应用,黄遵熹主编,西北工业大学出版社,2002.5 【5】单片机原理与应用,刘华东主编,电子工业出版社,2003.8. 【6】刘文涛.MCS-51单片机培训教程(C51版).北京:电子工业出版社,2005. 【7】51系列单片机及C51程序设计,王建校、杨建国主编,科学出版社,2002.4. 【8】单片机原理与应用,朱月秀、濮阳槟、
31、骆经备主编,科学出版社,2004.3. 【9】新编单片机原理与应用,潘永雄主编,西安电子科技大学出版社,2003.2. 【10】单片机原理与应用,孙俊逸主编,清华大学出版社,2006.2. 【11】单片机原理与应用,李全利主编,清华大学出版社,2006.2. 【12】单片机原理及其接口技术第二版,胡汉才主编,清华大学出版社,2004.2. 【13】夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社, 2001. 【14】杨将新,李华军,刘东骏.单片机程序设计及应用.北京:电子工业出版社,2006. 【15】谢维成,杨加国.单片机原理与应用及C51程序设计.北京:清华大学出版社,20
32、06.附录一程序SEC EQU 32H ;秒即时时间伪指令MIN EQU 31H ;分HOUR EQU 30H ;时DAY EQU 35H ;日MON EQU 34H ;月YEAR EQU 33H ;年MIN_1 EQU 41H ;分定时器1 路、开存储单元HOUR_1 EQU 42H ;时DAY_1 EQU 43H ;MON_1 EQU 44H ;YEAR_1 EQU 45H ;MIN_11 EQU 40H ;分定时器1 路、关存储单元HOUR_11 EQU 46H ;时DAY_11 EQU 47H ;日MON_11 EQU 48H ;月YEAR_11 EQU 49H ;年;*ORG 000
33、0H ;复位起始位置ljmp MAINORG 0003H ;中断转换显示年月日、INT0LJMP SHOWORG 000BH ;计数中断T0、方式1LJMP TIMEORG 0013HLJMP CHANGE; 调整时间、定时、INT1(SB0 键);-主程序ORG 0030HMAIN:;-初始化付值MOV YEAR , #02MOV MON , #05MOV DAY , #01MOV HOUR , #00MOV MIN , #00MOV SEC , #00CLR 40H ;定时单元1 路清零CLR 41HCLR 42HCLR 43HCLR 44HCLR 45HCLR 46HCLR 47HCLR
34、 48HCLR 49H;-开中断MOV TMOD , #01H ;计数、模式1、T0MOV TL0, #0B0H ;100SM 计数定时MOV TH0, #3CH ;clr p3.0MOV 20H, #0AH ;10 次*100SMSETB PT0 ;T0 为最高级SETB TR0 ;允许计数SETB ET0 ;允许T0 中断SETB EX0 ;允许INT0 中断SETB EX1 ;允许INT1 中断SETB EA ;开总中断;-显示、定时器启动判断LOOP:MOV R1, #30H; 存储单元MOV R4, #01H; 位选通MOV R3, #03H; 三组显示NEXT:MOV A , R1
35、 ;MOV B , #10 ;将存储单元转换成两高低两组的BCD 码DIV ABSWAP AORL A, BMOV P0, A;输出MOV P2, R4INC R1 ;下一单元MOV A, R4 ;RL A ;位移MOV R4, ALCALL DE5SM ;延时0.5SMDJNZ R3, NEXT ;全扫描显示一偏;-判断定时输出(只编写了一路)CJNE R7, #88H,LOOP ;是8 则开,否则、定时已关、转;-开MOV A, YEARCJNE A, YEAR_1, LOOP_1;年比较,不等转关MOV A, MONCJNE A, MON_1, LOOP_1MOV A, DAYCJNE
36、A , DAY_1,LOOP_1MOV A, HOURCJNE A, HOUR_1,LOOP_1MOV A, MINCJNE A, MIN_1, LOOP_1CPL P3.0;-关LOOP_1:MOV A, YEARCJNE A, YEAR_11, LOOP;年比较MOV A, MONCJNE A, MON_11, LOOPMOV A, DAYCJNE A , DAY_11,LOOPMOV A, HOURCJNE A, HOUR_11,LOOPMOV A, MINCJNE A, MIN_11, LOOPCPL P3.0LJMP LOOP;-年月日显示中断子程序SHOW:PUSH PSWpush
37、 ACCPUSH BPUSH 01HPUSH 02HPUSH 03HPUSH 04HMOV R2, #0FFH ;中断扫描次数TURN: MOV R1 , #33HMOV R4 , #01HMOV R3 , #03HNEXT_1:MOV A, R1MOV B , #10DIV ABSWAP AORL A, BMOV P0, AMOV P2, R4INC R1RL AMOV R4 ,ALCALL DE5SMDJNZ R3, NEXT_1DJNZ R2, TURN ;反复显示一定时间后返回POP 04HPOP 03HPOP 02HPOP 01HPOP BPOP ACCPOP PSWRETI;-计数
38、中断服务子程序TIME:PUSH PSWPUSH ACCPUSH BPUSH 06HMOV TH0 , #3CH;重装计数MOV TL0 , #0BH;DJNZ 20H, OUT ;转到中断跳出pop 程序MOV 20H, #0AH ; 重装:100*10=1000;-进位程序INC SECMOV R6, SEC ;CJNE R6, #60, OUT;比较MOV SEC , #00 ;INC MINMOV R6, MINCJNE R6, #60, OUTMOV MIN , #00INC HOURMOV R6 , HOURCJNE R6 , #25 , OUTMOV HOUR ,#00INC D
39、AYMOV R5, MONCJNE R5, #1, MON_22;是否1 月、不是转2 月MOV R5, DAYCJNE R5, #32, OUT ; 本月是否益出INC MONMOV DAY,#1LJMP OUTOUT:POP 06HPOP BPOP ACCPOP PSWRETIMON_22:MOV R5, MONCJNE R5 , #2 , MON_33;是否2 月、不是转3 月MOV A, YEAR ;判断是否瑞年MOV B, #4DIV ABMOV A , BJNZ OUT_1;不是则转(A 不为零则转)MOV R5 ,DAYCJNE R5,#30, OUT;如是瑞年、判断是否到29
40、天INC MONMOV DAY ,#1LJMP OUTOUT_1:MOV R5, DAYCJNE R5, #29, OUT ;平年二月判断INC MONMOV DAY , #1LJMP OUTMON_33:MOV R5, MONCJNE R5, #3 , MON_44MOV R5, DAYCJNE R5 , #32, OUTINC MONMOV DAY , #1LJMP OUTMON_44:MOV R5, MONCJNE R5,#4, MON_55MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_55:MOV R5,MONCJN
41、E R5,#5, MON_66MOV R5,DAYCJNE R5,#32,OUTINC MONMOV DAY,#1LJMP OUTMON_66:MOV R5, MONCJNE R5,#6, MON_77MOV R5, DAYCJNE R5 ,#31,OUTINC MONMOV DAY , #1LJMP OUTMON_77:MOV R5, MONCJNE R5,#7, MON_88MOV R5, DAYCJNE R5,#32,L1INC MONMOV DAY , #1L1: LJMP OUTMON_88:MOV R5, MONCJNE R5,#8, MON_99MOV R5, DAYCJNE R
42、5 ,#32,L2INC MONMOV DAY , #1L2: LJMP OUTMON_99:MOV R5, MONCJNE R5,#9, MON_00MOV R5,DAYCJNE R5 ,#31,L3INC MONMOV DAY , #1L3: LJMP OUTMON_00:MOV R5, MONCJNE R5,#10, MON_AAMOV R5, DAYCJNE R5 ,#32,L4INC MONMOV DAY , #1L4: LJMP OUTMON_AA:MOV R5, MONCJNE R5,#11, MON_BBMOV R5,DAYCJNE R5,#31,L5INC MONMOV DA
43、Y , #1L5: LJMP OUTMON_BB:MOV R5, DAYCJNE R5 ,#32,L6INC YEARMOV MON, #1MOV DAY , #1L6:LJMP OUT;-校对时间、定时调整中断CHANGE : PUSH PSWPUSH ACCPUSH BPUSH 00Hmov p2,#00hSHOW_1:MOV A , #01H;显示1MOV P0, AMOV P2, #0FFH;三组数码管都显示1 路LCALL READ ;调用读p1 口键程序CJNE A, 01H, SHOW_1;去抖后比较LCALL DE250SM ; 延时250 秒CJNE A, #0FBH,ttT
44、1LJMP SB3_1ttT1: CJNE A, #0FEH,SHOW_1AJMP SHOW_2;-二组显示SHOW_2:MOV A, #02H; 显示2MOV P0, AMOV P2, #0FFH;LCALL READCJNE A, 01H, SHOW_2 ;去抖后比较LCALL DE250SM; 延时250 秒CJNE A, #0FBH,T2;不等转去判断此时SB3 按了没LJMP SB3_2T2: CJNE A, #0FEH, SHOW_2AJMP SHOW_3;_-三组显示SHOW_3:MOV A, #03H; 显示3MOV P0, AMOV P2, #0FFH;位码LCALL READCJNE A, 01H,SHOW_3;去抖后比较LCALL DE250SM;延时250 秒CJNE A, #0FBH, T3;不等转去判断此时SB3 按了没LJMP SB3_3T3: CJNE A, #0FEH, SHOW
版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。
Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1
陕公网安备 61072602000132号 违法和不良信息举报:0916-4228922