单片机新颖60秒LED旋转电子钟.doc_第1页
单片机新颖60秒LED旋转电子钟.doc_第2页
单片机新颖60秒LED旋转电子钟.doc_第3页
单片机新颖60秒LED旋转电子钟.doc_第4页
单片机新颖60秒LED旋转电子钟.doc_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

数理与信息工程学院单片机原理及应用期末课程设计新颖60秒LED旋转电子钟 数理与信息工程学院单片机原理及应用期末课程设计 题 目: 新颖60秒LED旋转电子钟 专 业: 班 级: 计算机091班 姓 名: 学 号: 指导老师: 成 绩: ( 2010.6 )目 录第1节 引 言31.1 LED旋转电子钟概述31.2本次设计的要求31.3系统主要功能3第2节 系统硬件设计52.1 系统设计框架及实现52.11 系统原理图52.1.2系统设计框图62.2系统硬件组成62.2.1 AT89C2051单片机及其引脚说明62.2.2 60秒旋转译码驱动原理72.2.3时分显示部件9第3节 系统的软件设计113.1系统主程序设计113.2 中断程序设计123.3程序清单13结 束 语28参考文献29新颖60秒LED旋转电子钟第1节 引 言 近年来,随着我国科技的不断发展,我国经济发展的支柱产业电子产业获得长足发展,近年来各种电子产品琳琅满目,随处可见,随着电子产品的更新速度的加快,各种功能强大,款式新颖的电子产品不断问世。电子时钟便是这一发展趋势中的代表,各种功能的电子时钟应有尽有,且功能不断更新。目前市场上出现的电子钟,一般都以LED数码管显示时分秒,与传统的以指针显示秒的方式不同,违背了人们传统的习惯,而且这类电子钟一般时采用大型的显示器,且外观设计欠美观,很少能进去百姓家庭。此外,无论时机械钟、石英钟、还是电子钟,都存在着时间误差的问题。本实验设计的LED显示器件显示的电子时钟,可以有效的克服时钟存在误差的问题,在夜间不必照明就可以看到时间,且以60只发光管实现秒显示,接进传统的秒针显示秒的形式,用户更容易接受,而且美观大方。1.1 LED旋转电子钟概述 随着时代的进步和发展,单片机技术已经普及到我们生活,工作,科研,各个领域,已经成为一种比较成熟的技术,本文将介绍一种基于单片机控制的LED旋转电子钟。本设计以单片机89C2051为控制核心,由实时时钟模块、电源模块、人机接口模块、60秒旋转译码驱动模块等部分组成。其中实时时钟采用DS12887可实现年月日时分秒等时间信息的采集和闹钟功能。温度检测模块由DS18B20集成温度传感器对现场环境温度进行实时检测。人机接口模块由3个键盘和4个LED数码管组成,可实现时间显示、闹钟设置、时间校对等功能。60秒旋转译码驱动模块是由60个发光二级管组成,模拟“秒针”的行走。1.2本次设计的要求(1)用4只LED数码管输出显示时和分。(2)可通过按键设置闹钟的功能,且停闹无须手工操作。(3)可同过按键设置分校时。(4)月计时误差小于45秒(5)用60只LED发光管旋转显示,模拟“秒针”行走。1.3系统主要功能 本设计完成了以下功能: (1)4只LED数码管显示当前时分(2)每隔一秒周边的60只LED发光管旋转一格。 (3)当发生停电的时候,由后备电池供电,系统进入低功耗状态,所有显示部件停止显示,当恢复供电后,系统自动恢复工作状态,不影响计时。 第2节 系统硬件设计2.1 系统设计框架及实现2.11 系统原理图图2-1 电子钟系统原理图2.1.2系统设计框图电子钟的原理框图如图2-2所示。它由以下几个部件组成:单片机89C2051、电源、时分显示部件、60秒旋转译码驱动电路。时分显示采用动态扫描,以降低对单片机端口数的要求,同时也降低系统的功耗。时分显示模块、60秒旋转译码驱动电路以及显示驱动都通过89C2051的I/O口控制。电源部分:电源部分有二部分组成。一部分是由220V的市电通过变压、整流稳压来得到+5V电压,维持系统的正常工作;另一部分是由3V的电池供电,以保证停电时正常走时。正常情况下电池是不提供电能的,以保证电池的寿命。具体电路参见“新颖的60秒旋转电子钟参考电路原理图”。 图2-2 电子钟系统设计框图2.2系统硬件组成2.2.1 AT89C2051单片机及其引脚说明AT89C2051单片机是51系列单片机的一个成员,是8051单片机的简化版。内部自带2K字节可编程FLASH存储器的低电压、高性能COMS八位微处理器,与Intel MCS-51系列单片机的指令和输出管脚相兼容。由于将多功能八位CPU和闪速存储器结合在单个芯片中,因此,AT89C2051构成的单片机系统是具有结构最简单、造价最低廉、效率最高的微控制系统,省去了外部的RAM、ROM和接口器件,减少了硬件开销,节省了成本,提高了系统的性价比。AT89C2051是一个有20个引脚的芯片,引脚配置如图3所示。与8051相比,AT89C2051减少了两个对外端口(即P0、P2口),使它最大可能地减少了对外引脚下,因而芯片尺寸有所减小。AT89C2051芯片的20个引脚功能为: 图2-3 AT89C2051引脚配置 图2-4 CD4017引脚图VCC 电源电压。GND 接地。RST 复位输入。当RST变为高电平并保持2个机器周期时,所有I/O引脚复位至“1”。XTAL1 反向振荡放大器的输入及内部时钟工作电路的输入。XTAL2 来自反向振荡放大器的输出。P1口 8位双向I/O口。引脚P1.2P1.7提供内部上拉,当作为输入并被外部下拉为低电平时,它们将输出电流,这是因内部上拉的缘故。P1.0和P1.1需要外部上拉,可用作片内精确模拟比较器的正向输入(AIN0)和反向输入(AIN1),P1口输出缓冲器能接收20mA电流,并能直接驱动LED显示器;P1口引脚写入“1” 后,可用作输入。在闪速编程与编程校验期间,P1口也可接收编码数据。P3口 引脚P3.0P3.5与P3.7为7个带内部上拉的双向I/0引脚。P3.6在内部已与片内比较器输出相连,不能作为通用I/O引脚访问。P3口的输出缓冲器能接收20mA的灌电流;P3口写入“1”后,内部上拉,可用输入。P3口也可用作特殊功能口,其功能见表1。P3口同时也可为闪速存储器编程和编程校验接收控制信号。表2-1 P3口特殊功能P3口引脚特殊功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2(外部中断0)P3.3(外部中断1)P3.4T0(定时器0外部输入)P3.5T1(定时器1外部输入)2.2.2 60秒旋转译码驱动原理按常规传统设计,需60进制译码驱动电路才能实现60秒旋转译码驱动,若用六片十进制计数译码器构成六十进制计数译码电路,则电路连线多(需要120根连线),硬件电路庞大,开销大。为此,我们巧妙地采用了两片CD4017进行六十进制计数译码,实现60秒旋转译码驱动。既减少了电路的复杂程度又可降低了成本。图4为CD4017功能引脚图,图5为其时序图。图2-5 CD4017时序图CD4017集成电路是十进制计数/时序译码器,共有10个译码输出Q0Q9;每个译码输出通常处于低电平,且在时钟脉冲由低到高的上升沿输出高电平;每个高电平输出维持1个时钟周期;每输入10个时钟脉冲,输出一个进位脉冲,因此进位输出信号可作为下一级计数器的时钟信号。在清零输入端(R)加高电平或正脉冲时,只有输出端Q0为高电平,其余各输出端均为低电平“0”。为实现对发光二极管的驱动,将每一个译码输出端口接一只发光二极管,并将二极管串联限流电阻后接地。当译码端口Q0Q9中任一端口为高电平,则对应的发光二极管点亮,如图6(左)所示。仔细考查CD4017的功能,可发现其10个输出的高电平是相互排斥的,即任一时刻只有一只发光二极管点亮,因此可将图6(左)电路进一步简化为如图6(右)所示,从而简化电路设计。图2-6 CD4017控制发光二极管原理图在本电子钟设计中,每秒点亮一个发光二极管,循环点亮一周共需60个发光二极管,若用上述的6片CD4017实现驱动,显然电路复杂。为此我们选用两片CD4017和一片6反相器,采用“纵横双译码”技术,巧妙地实现60秒旋转译码驱动,其中一片接成10进制,一片接成6进制,实现610=60的功能,具体连接方法如图7所示。图2-7 发光二极管“纵横双译码”循环点亮LED原理图将周期为1秒的输入脉冲作为其中一片CD4017的时钟脉冲,而此片的级联进位输出端(QC)作为另一片的时钟输入,并将Q6与复位端相连。在两片译码输出端交叉点上接入发光二极管,构成610矩阵。根据CD4017时序特点,在初始状态,作为高位(纵)的CD4017译码器输出端口Q0处于高平,经反相器反相后为低电平。当作为低位(横)的CD4017译码器输出端口Q0Q9依次输出高电平后,则对应的二极管LD1LD10依次点亮;此后由于QC端的进位,高位CD4017译码输出端口Q1输出高电平,反相后输出低电平,当低位的CD4017译码输出端口Q0Q9依次输出高电平后,二极管LD11LD20依次点亮。如此往复,直至高位Q6向复位端输入高电平,CD4017复位,60秒循环点亮重新开始。2.2.3时分显示部件由于系统要显示的内容较简单,显示量不多,所以选用数码管既方便又经济。LED有共阴极和共阳极两种。如图8所示。二极管的阴极连接在一起,通常此公共阴极接地,而共阳极则将发光二极管的阳极连接在一起,接入+5V的电压。一位显示器由8个发光二极管组成,其中7个发光二极管构成字型“8”的各个笔划(段)ag,另一个小数点为dp发光二极管。当在某段发光二极管施加一定的正向电压时,该段笔划即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。图2-8 LED数码管结构原理图众所周知,LED显示数码管通常由硬件7段译码集成电路,完成从数字到显示码的译码驱动。本系统采用软件译码,以减小体积,降低成本和功耗,软件译码的另一优势还在于比硬件译码有更大的灵活性。所谓软件译码,即由单片机软件完成从数字到显示码的转换。从LED数码管结构原理可知,为了显示字符,要为LED显示数码管提供显示段码,组成一个“8”字形字符的7段,再加上1个小数点位,共计8段,因此提供给LED数码管的显示段码为1个字节。各段码位与显示段的对应关系如表2。表2-2 各段码位的对应关系段码位D7D6D5D4D3D2D1D0显示段dpgfedcba需说明的是当用数据口连接LED数码管adp引脚时,不同的连接方法,各段码位与显示段有不同的对应关系。通常数据口的D0位与a段连接,D1位与b段连接,D7位与dp段连接,如表2所示,表3为用于LED数码管显示的十六进制数和空白字符与P的显示段码。表2-3 LED显示段码字型共阳极段码共阴极段码字型共阳极段码共阴极段码0C0H3FH990H6FH1F9H06HA88H77H2A4H5BHB83H7CH3BOH4FHCC6H39H499H66HDA1H5EH592H6DHE86H79H682H7DHF84H71H7F8H07H空白FFH00H880H7FHP8CH73H注:(1)本表所列各字符的显示段码均为小数点不亮的情况。 (2)“空白”字符即没有任何显示。根据AT89C2051单片机灌电流能力强,拉电流能力弱的特点,我们选用共阳数码管。将AT89C2051的P1.0P1.7分别与共阳数码管的ag及dp相连,高电平的位对应的LED数码管的段暗,低电平的位对应的LED数码管的段亮,这样,当P0口输出不同的段码,就可以控制数码管显示不同的字符。例如:当P0口输出的段码为1100 0000,数码管显示的字符为0。数码管显示器有二种工作方式,即静态显示方式和动态扫描显示方式。为节省端口及降低功耗,本系统采用动态扫描显示方式。动态扫描显示方式需解决多位LED数码管的“段控”和“位控”问题,本电路的“段控”(即要显示的段码的控制)通过P0口实现;而每一位的公共端,即LED数码管的“位控”,则由P3口控制。这种连接方式由于多位字段线连在一起,因此,要想显示不同的内容,必然要采取轮流显示的方式,即在某一瞬间,只让其中的某一位的字位线处于选通状态,其它各位的字位线处于断开状态,同时字段线上输出这一位相应要显示字符的字段码。在这一瞬时,只有这一位在显示,其他几位则暗。在本系统中,字位线的选通与否是通过PNP三极管的导通与截止来控制,即三极管处于“开关”状态。系统的时分显示部件由4只7段共阳LED数码管构成,前两只用于时的显示,后两只用于分的显示。值得一提的是,在设计中需要实现时与分之间的两个闪烁点,为此,将第三只LED数码管倒置摆放,这样就形成了两个很自然的闪烁点。与此同时,为了能使两点显示能够形象的表示时钟“秒”的变化,设计时,将两个点由P1.7单独控制,每隔一秒使P1.7发送一个正脉冲,从而实现了两个点的闪烁显示,闪烁周期为一秒。第3节 系统的软件设计本系统的软件系统主要可分为主程序和定时器中断程序两大模块。在程序过程中,加入了抗干扰措施。 3.1系统主程序设计主程序的功能是完成系统的初始化,在显示时间之前,对系统是否停电状态进行检测;若停电,将系统进入低功耗状态,用电池电压维持单片机计时工作,但此时不显示时间,用节省用电;若不停电,则将时分发送显示。程序流程如图3-1所示。图3-1 系统主程序流程图3.2 中断程序设计中断程序(如图10所示)完成时间计数,时间调整,误差消除等功能。中断采用AT89C2051内部T0中断实现,定时时间为125ms,当时间到达125ms8,即1分钟时,分计数缓冲器MINBUFFER增加1,到达1小时,则时计数缓冲器HOURBUFFER增加1,并将分、时的个位、十位放入显示缓冲器。当分计数缓冲器和时计数缓冲器分别到达60min、24h时,则对它们清零,以便从新计数。在中断设计中,还通过软件实现了累计误差消除功能,使整个系统时间的精确度得到保证。图3-2 定时中断程序3.3程序清单DP BIT 24H.3 ;定义半秒闪烁位单元 SECOND EQU 31H ; 定义计数单元 MBUF EQU 32H ; 定义分计数单元 HBUF EQU 33H ; 定义时计数单元 MBUF0 EQU 34H ; 定义分个位计数存储单元 MBUF1 EQU 35H ; 定义分十位计数存储单元 HBUF0 EQU 36H ; 定义时个位计数存储单元 HBUF1 EQU 37H ; 定义时十位计数存储单元 DMBF0 EQU 40H ; 定义分个位显示缓冲单元 DMBF1 EQU 41H ; 定义分十位显示缓冲单元 DHBF0 EQU 42H ; 定义时个位显示缓冲单元 DHBF1 EQU 43H ; 定义时十位显示缓冲单元 AMBF10 EQU 44H ; 定义定闹 1 分个位缓冲单元 AMBF11 EQU 45H ; 定义定闹 1 分十位缓冲单元 AHBF10 EQU 46H ; 定义定闹 1 时个位缓冲单元 AHBF11 EQU 47H ; 定义定闹 1 时十位缓冲单元 AMBF1 EQU 48H ; 定义定闹1分计数单元 AHBF1 EQU 49H ; 定义定闹1时计数单元 AMBF20 EQU 4AH ; 定义定闹 2 分个位缓冲单元 AMBF21 EQU 4BH ; 定义定闹 2 分十位缓冲单元 AHBF20 EQU 4CH ; 定义定闹 2 时个位缓冲单元 AHBF21 EQU 4DH ; 定义定闹 2 时十位缓冲单元 AMBF2 EQU 4EH ; 定义定闹2分计数单元 AHBF2 EQU 4FH ; 定义定闹2时计数单元 ORG 0000H LJMP MAIN ORG 000BH MOV TL0, #0DCH ; 125 毫秒定时器初值低 8 位 MOV TH0, #0BH ; 125毫秒定时器初值高 8 位 LJMP INTTOMAIN: MOV SP, #6FH MOV R2, #08H ; 定时器1 秒中断次数 MOV R4, #08H ; 快校时定时计数,8X125ms 后快校时 MOV SECOND, #3CH ; 秒计数单元 MOV MBUF0, #0 ; 分个位计数存储单元 0 初值 MOV MBUF1, #0 ; 分十位计数存储单元 1 初值 MOV HBUF0, #0 ; 时个位计数存储单元 0 初值 MOV HBUF1, #2 ; 时十位计数存储单元 1 初值 MOV MBUF, #00H ; 分计数存储单元 初值 MOV HBUF, #20H ; 时计数存储单元 初值 MOV AMBF10, #1 ; 定闹1 分个位计数存储单元 0 初值 MOV AMBF11, #5 ; 定闹1 分十位计数存储单元 1 初值 MOV AHBF10, #0 ; 定闹1 时个位计数存储单元 0 初值 MOV AHBF11, #2 ; 定闹1 时十位计数存储单元 1 初值 MOV AMBF1, #51H ; 定闹 1 分计数存储单元 初值 MOV AHBF1, #20H ; 定闹 1 时计数存储单元 初值 MOV AMBF20, #3 ; 定闹2 分个位计数存储单元 0 初值 MOV AMBF21, #5 ; 定闹2 分十位计数存储单元 1 初值 MOV AHBF20, #0 ; 定闹2 时个位计数存储单元 0 初值 MOV AHBF21, #2 ; 定闹2 时十位计数存储单元 1 初值 MOV AMBF2, #53H ; 定闹2 分计数存储单元 初值 MOV AHBF2, #20H ; 定闹 2 时计数存储单元 初值 MOV IE, #10000010B ; 允许定时器0 中断 MOV TMOD, #00100001B ; T0 方式1 MOV TL0, R5 ; 125 毫秒定时器初值低 8 位 MOV TH0, #0BH ; 125 毫秒定时器初值高 8 位 MOV IP, #00000010B ; 定时器0 高优先级 SETB TR0 ; 启动 T0 计时 LOOP: MOV R4, #08 ; 喂狗 MOV A, HBUF ; 取时整点 SUBB A, #7 JC LOOP1 ; 判断是否早 7时前 MOV A, HBUF ; 早7 时前-晚22 时后为夜间 SUBB A, #22H JNC LOOP1 ; 判断是否晚 22 时后 ACALL DISP AJMP ALARM1 LOOP1: ACALL NDISP ; 是夜间,调用夜间显示子程序 ALARM1: MOV A, AHBF1 ; 判定闹 1 CJNE A, HBUF, ALARM2 ; 判定闹1的小时是否与系统时间相等? MOV A, AMBF1 CJNE A, MBUF, ALARM2 ; 判定闹1的分是否与系统时间相等? MOV C, DP MOV P3.3, C ; 蜂鸣器响半秒,停半秒 MOV A, SECOND ; 定闹1 分钟 JNZ LOOP ALARM2: MOV A, AHBF2 CJNE A, HBUF, LOOP2 ; 判定闹2的时是否与系统时间相等? MOV A, AMBF2 CJNE A, MBUF, LOOP2 ; 判定闹2的分是否与系统时间相等? MOV C, DP MOV C, DP MOV P3.3, C ; 蜂鸣器响半秒,停半秒 MOV A, SECOND ; 定闹1 分钟 JNZ LOOP LOOP2: JB P3.2, LOOP7 ; 判断校时键是否按下? LOOP3: ACALL DISP ; 用于长时间按键时的显示 MOV A, R4 ; 有校时键按下 CJNE A, #00H, LOOP6 ; 校时键按下有 1 秒吗? LOOP4: ACALL ADD1 ; 校时键按下有 1 秒,则快调 MOV R1, #40 LOOP5: ACALL DISP DJNZ R1, LOOP5 JNB P3.2, LOOP4 ; 校时键未放开,继续快调 AJMP LOOP7 ; LOOP6: JNB P3.2, LOOP3 ; 校时键按下不到 1秒,返回再判 ACALL ADD1 ; 单次慢调 MOV TL0, R5 ; 校时结束,秒初值置 0 MOV TH0, #0BH MOV SECOND, #00 LOOP7: JB P3.3, LOOP ALAM11: ACALL ADSP1 ; 用于设置定闹 1 时,长时间按键的显示 MOV A, R4 ; 有定闹1 键按下 CJNE A, #00H, ALAM16 ; 定闹1键按下有 1秒吗? ALAM12: ACALL AAD1 ; 定闹1键按下有 1秒,则快调 MOV R1, #50 ALAM13: ACALL ADSP1 DJNZ R1, ALAM13 JNB P3.3, ALAM12 MOV R1, #10 ; 定闹1 快调结束,闪烁显示定闹时间 8 秒 ALAM14: MOV R3, #40 ALAM15: ACALL ADSP1 DJNZ R3, ALAM15 ACALL D400MS DJNZ R1, ALAM14 AJMP AGAIN ALAM16: NOP JNB P3.3, ALAM11 ; 定闹1键按下不到 1 秒,返回再判 ALAM17: ACALL AAD1 ; 定闹1单次慢调 MOV R1, #10 ; 定闹1慢调结束,闪烁显示定闹时间 12 秒 ALAM18: MOV R3, #40 ALAM19: ACALL ADSP1 DJNZ R3, ALAM19 ACALL D400MS DJNZ R1, ALAM18 AGAIN: JB P3.3, RETUN ; 返回主程序 MOV R4, #08 ALAM21: ACALL ADSP2 ; 用于设置定闹 2 时,长时间按键的显示 MOV A, R4 ; 有定闹2 键按下 CJNE A, #00H, ALAM26 ; 定闹2键按下有 1秒吗? ALAM22: ACALL AAD2 ; 定闹2键按下有 1秒,则快调 MOV R1, #50 ALAM23: ACALL ADSP2 DJNZ R1, ALAM23 JNB P3.3, ALAM22 MOV R1, #10 ; 定闹2 快调结束,闪烁显示定闹时间 9 秒 ALAM24: MOV R3, #40 ALAM25: DJNZ R3, ALAM25 ACALL D400MS DJNZ R1, ALAM24 AJMP LOOP ALAM26: JNB P3.3, ALAM21 ; 定闹2键按下不到 1 秒,返回再判 ALAM27: ACALL AAD2 ; 定闹2单次慢调 MOV R1, #10 ; 定闹2 慢调结束,显示定闹时间 9 秒 ALAM28: MOV R3, #40 ALAM29: ACALL ADSP2 DJNZ R3, ALAM29 ACALL D400MS DJNZ R1, ALAM28 RETUN: AJMP LOOP ; 返回主程序 INTTO: PUSH ACC PUSH PSW DEC R4 MOV A,SECOND CJNE A,#28H,INT01 MOV R5,#0DBH INT01: DJNZ R2, INT02 ; 1 秒计数 MOV R2, #08H CPL DP ; 小数点半秒闪烁 ACALL BEEP ; 1 秒到, 发“笛嗒”声和 LED 旋转脉冲 DJNZ SECOND, OUTT0 MOV SECOND, #3CH ; 1 分到 ACALL ADD1 ; 分十进制加 1子程序 INT02: MOV A, R2 CJNE A, #04H, OUTT0 ; 判断是否半秒 CPL DP ; 是半秒,秒闪动一次 OUTT0: POP PSW POP ACC RETI ADD1: MOV A, MBUF ; 分加1 子程序, ADD A, #01 ; 分十进制加 1 DA A MOV MBUF, A ANL A, #0FH MOV MBUF0, A MOV A, MBUF SWAP A ANL A, #0FH MOV MBUF1, A MOV A, MBUF CJNE A, #60H, ADDOUT MOV MBUF0, #0 MOV MBUF1, #0 MOV MBUF, #0 MOV A, HBUF ADD A, #01 ; 时十进制加1 DA A MOV HBUF, A ANL A, #0FH MOV HBUF0, A MOV A, HBUF SWAP A ANL A, #0FH MOV HBUF1, A MOV A, HBUF CJNE A, #24H, ADDOUT MOV HBUF0, #0 MOV HBUF1, #0 MOV HBUF, #0 ADDOUT: RET AAD1: MOV A, AMBF1 ; 定闹 1,分加1 子程序, ADD A, #01 DA A MOV AMBF1, A ANL A, #0FH MOV AMBF10, A MOV A, AMBF1 SWAP A ANL A, #0FH MOV AMBF11, A MOV A, AMBF1 CJNE A, #60H, AAD1OT MOV AMBF10, #0 MOV AMBF11, #0 MOV AMBF1, #0 MOV A, AHBF1 ADD A, #01 DA A MOV AHBF1, A ANL A, #0FH MOV AHBF10, A MOV A, AHBF1 SWAP A ANL A, #0FH MOV AHBF11, A MOV A , AHBF1 CJNE A, #24H, AAD1OT MOV AHBF10, #0 MOV AHBF11, #0 MOV AHBF1, #0 AAD1OT: RET AAD2: MOV A, AMBF2 ; 定闹2 分加 1 子程序, ADD A, #01 DA A MOV AMBF2, A ANL A, #0FH MOV AMBF20, A MOV A, AMBF2 SWAP A ANL A, #0FH MOV AMBF21, A MOV A, AMBF2 CJNE A, 60H, AAD2OT MOV AMBF20, #0 MOV AMBF21, #0 MOV AMBF2, #0 MOV A, AHBF2 ADD A, #01 DA A MOV AHBF2, A ANL A, #0FH MOV AHBF20, A MOV A, AHBF2 SWAP A ANL A, #0FH MOV AHBF21, A MOV A, AHBF2 CJNE A, #24H, AAD2OT MOV AHBF20, #0 MOV AHBF21, #0 MOV AHBF2, #0 AAD2OT: RET DSPM0: MOVC A, A+DPTR ; 白天分个位显示子程序 SETB ACC.7 MOV P1, A CLR P3.5 ACALL DY1MS SETB P3.5 ACALL DY1MS RET DSPM1: MOVC A, A+DPTR ; 白天分十位显示子程序 MOV C, DP MOV ACC.7, C MOV P1, A CLR P3.4 ACALL DY1MS SETB P3.4 ACALL DY1MS RET DSPH0: MOVC A, A+DPTR ; 白天时个位显示子程序 MOV C, DP MOV ACC.7, C MOV P1, A CLR P3.1 ACALL DY1MS SETB P3.1 ACALL DY1MS RET DSPH1: MOVC A, A+DPTR ; 白天时十位显示子程序 SETB ACC.7 MOV P1, A CLR P3.0 ACALL DY1MS SETB P3.0 ACALL DY1MS RET DISP: NOP MOV DPTR , #TAB1 ; 显示子程序,指向个位顺置管段码表首地址 MOV A, MBUF0 ; 取分个位 ACALL DSPM0 ; 调用分个位显示子程序 MOV DPTR, #TAB2 MOV A, MBUF1 ; 取分十位 ACALL DSPM1 ; 调用分十位显示子程序 MOV DPTR, #TAB1 MOV A, HBUF0 ; 取时个位 ACALL DSPH0 ; 调用时个位显示子程序 MOV DPTR, #TAB1 MOV A, HBUF1 ; 取时十位 ANL A, #0FFH JNZ DISP1 MOV A, #0AH DISP1: ACALL DSPH1 ; 调用时十位显示子程序 RET NDPM0: MOVC A, A+DPTR ; 夜间分个位显示子程序 SETB ACC.7 MOV P1, A CLR P3.5 ACALL DY1MS SETB P3.5 ACALL DY2MS RET NDPM1: MOVC A, A+DPTR ; 夜间分十位显示子程序 MOV C, DP MOV ACC.7,C MOV P1, A CLR P3.4 ACALL DY1MS SETB P3.4 ACALL DY2MS RET NDPH0: MOVC A, A+DPTR ; 夜间时个位显示子程序 MOV C, DP MOV ACC.7,C MOV P1, A CLR P3.1 ACALL DY1MS SETB P3.1 ACALL DY2MS RET NDPH1: MOVC A, A+DPTR ; 夜间

温馨提示

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

评论

0/150

提交评论