+发表新主题
hifanping 发布于2007-5-23 11:36 136 次浏览 1 位用户参与讨论
跳转到指定楼层
基于单片机的实时时钟  
摘要:
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。
    现今,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LED显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。本文利用单片机实现数字时钟计时功能的主要内容,其中AT89C51是核心元件同时采用数码管动态显示“时”,“分”,“秒”的现代计时装置。与传统机械表相比,它具有走时精确,显示直观等特点。它的计时周期为24小时,显满刻度为“23时59分59秒”,另外具有校时功能,断电后有记忆功能,恢复供电时可实现计时同步等特点。
本文主要介绍用单片机内部的定时/计数器来实现电子时钟的方法,本设计由单片机AT89C51芯片和LED数码管为核心,辅以必要的电路,构成了一个单片机电子时钟
 
关键词:C51单片机   动态显示   键盘输入  电压检测  电池功耗

















目录

第1章  前言    4
第2章 系统设计    4
2.1   电路组成及工作原理    4
2.2    硬件部分    5
2.2.1   单片机系统    5
2.2.1.1    5
2.2.2.2   AT89C51的主要性能参数    5
2.2.2  显示部分    6
2.2.2.1   LED显示结构与原理    6
2.2.2.2   LED显示器接口及显示方式    7
2.2.3   键盘工作模块    8
2.2.3.1   独立式按键结构    9
2.2.3.2   独立式按键的软件结构    9
2.2.4  电压检测电路    9
2.2.5  备用电池功耗问题    10
2.2.6  直流稳压电源部分    10
2.2.6.1   主要技术指标    11
2.2.6.2    滤波电路    11
2.2.7   相关参数计算    12
第3章 软件设计(图)    13
3.1    13
3.2    13
3.3    13
第4章 系统调试    17
4.1  硬件调试    17
4.2  软件调试    17
4.3  时钟计时检测    17
第5章   致谢    18
第6章   参考文献    19
附录(一)    20
附录(二)    29




第1章  前言
单片机自20世纪70年代问世以来,以其极高的性能价格比,受到人们的重视和关注,应用很广、发展很快。单片机体积小、重量轻、抗干扰能力强、环境要求不高、价格低廉、可靠性高、灵活性好、开发较为容易。由于具有上述优点,在我国,单片机已广泛地应用在工业自动化控制、自动检测、智能仪器仪表、家用电器、电力电子、机电一体化设备等各个方面,而51单片机是各单片机中最为典型和最有代表性的一种。这次毕业设计通过对它的学习、应用,以AT89S51芯片为核心,辅以必要的电路,设计了一个简易的电子时钟,它由直流电源供电,通过数码管能够准确显
数字时钟是现代社会应用广泛的计时工具,在航天、电子等科研单位,工厂、医院、学校等企事业单位,各种体育赛事及至我们每个人的日常生活中都发挥着重要的作用。本系统是基于AT89C51单片机设计的一个具有六位LED显示的数字时实时钟,采用独立式按键进行时间调整,同时引入一个内部充电电源在停止外部供电时,仍具有内部计时的功能。该系统同时具有硬件设计简单、工作稳定性高、价格低廉等优点
第2章 系统设计
2.1   电路组成及工作原理
本文数字时钟设计原理主要利用AT89C51单片机,由单片机的P0口控制数码管的位显示, P2口控制数码管的段显示,P1口与按键相接用于时间的校正。在设计中引入两个电源电路,一个是外部电源系统产生+5V电压,用于给CPU及显示电路提供工作电压,这是数字时钟正常工作时的总电压。另一个是备用电源,当外部电源关断时由它提供工作电压使CPU继续工作,利用单片机的空闲方式降低功耗,数码管不显示但能使计时保持正常,不会造成掉电时计时清零的现象。针对内外两个电源情况又加入了MC34064电压检测电路,用于时实判断是哪各电源在工作。
整个系统工作时,秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,将标准秒信号送入“秒计数器”,“秒计数器”采用60进制计数器,每累计60秒发出一个“分脉冲”信号,该信号将作为“分计数器”的时钟脉冲。“分计数器”也采用60进制计数器,每累计60分钟,发出一个“时脉冲”信号,该信号将被送到“时计数器”。“时计数器”采用24进制计时器,可实现对一天24小时的累计。显示电路将“时”、“分”、“秒”计数器的输出,通过六个七段LED显示器显示出来。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。

2.2    硬件部分
2.2.1  单片机系统
2.2.1.1   单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(如算术运算,逻辑运算、数据传送、中断处理)的微处理器(CPU),随机存取数据存储器(RAM),只读程序存储器(ROM),输入输出电路(I/O口),可能还包括定时计数器,串行通信口(SCI),显示驱动电路(LCD或LED驱动电路),脉宽调制电路(PWM),模拟多路转换器及A/D转换器等电路集成到一块单块芯片上,构成一个最小然而完善的计算机系统。这些电路能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。
本文采用的单片机为AT89C51,AT89C51是一种低功耗、高性能的片内含有4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。它的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
2.2.2.2   AT89C51的主要性能参数:
与MCS-51产品指令系统完全兼容
4k 字节可重擦写FLASH闪速存储器
1000次擦写周期
全静态操作:0Hz—24MHz
三级加密程序存储器
128×8字节内部RAM
32个可编程I/O口线
2个16位定时/计数器
6个中断源
可编程串行URAR通道
低功耗空闲和掉电模式
AT89C51提供以下标准功能:4k 字节FLASH闪速存储器,128字节内部RAM,32个I/O口线,2个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51降至0Hz的静态逻辑操作,并支持两种可选的节电工作模式。空闲方式体制CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器体制工作并禁止其他所有不见工作直到下一个硬件复位。
2.2.2  显示部分
单片机应用系统中使用的显示器主要有发光二极管显示器,简称LED(Light Emitting Diode);液晶显示器LCD(Liquid  Crystal  Display);近几年也有配置CRT显示器的。而目前在单片机系统中,通常用LED数码显示器来显示各种数字或符号。由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。
2.2.2.1   LED显示结构与原理
单片机中通常用七段LED构成字型“8”,另外,还有一个小数点发光二极管以显示小数位!这种显示器有共阴和共阳两种!发光二极管的阳极连在一起的(公共端)称为共阳极显示器,阴极连在一起的称为共阴极显示器。(如下图所示)
一位显示器由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个笔划(段)
a_g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段笔画即亮;不加电压则暗。为了保护各段LED不被损坏,需外加限流电阻。

由于共阴极连接需加驱动,故在这里我采用的是共阳阳极连接。
以共阳极LED为例,如图(b)所示,各LED公共阳极K0接高电平,若向各控制端a,b, ┄,g,dp顺次送入00011110信号,则该显示器显示“⒎”字型。
共阴极7段LED显示数字0 ~ F、文字、符号及小数点的编码(a段为最地位,dp点为最高位)如(图2-1)所示。
                     共阴极7 段LED显示字型编码表
   显示字符    共阴极段选码    显示字符    共阴极段选码
      0           3FH          5           6DH
      1           06H          6           7DH
      2           5BH          7           07H
      3           4FH          8           7FH
      4           66H          9           6FH
    “灭”(黑)           00H        
图2-1
2.2.2.2   LED显示器接口及显示方式
LED显示器有静态显示方式和动态显示方式两种。静态显示就是当显示器显示某个字符时,相应的段恒定的导通或截止,直到显示另一个字符为止。LED显示器工作于静态显示方式时,各位的共阴极接地;若为共阳极则接+5V电源。每位的段选线分别与一个8位锁存器的输出口相连,显示器中的各位相互独立,而且各位的显示字符一经确定,相应锁存的输出将维持不变。
正因为如此,静态显示器的亮度较高。这种显示方式编程容易,管理也较简单,但占用I/O口线资源较多。因此,在显示位数较多的情况下,一般都采用动态显示方式。
由于所有6位段皆由一个I/O口控制,因此,在每一瞬间,6位LED会显示相 同的字符。要想每位显示不同的字符,就必须采用扫描方法流点亮各位LED,即在每一瞬间只使某一位显示字符。在此瞬间,段选控制I/O口输出相应字符段选码(字型码),而位选则控制I/O口在该显示位送入选通电平(因为LED为共阴,故应送低电平),以保证该位显示相应字符。如此轮流,使每位分时显示该位应显示字符。例如,要求显示“LL0-20”时,I/O1和I/O2轮流送入段选码、位选码
                     

图2-2
在多位LED显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8位I/O口控制。而共阴(共阳)极公共端分别由相应的I/O口线控制,实现各位的分时选通。
段选码,位选码每送入一次后延时1MS,因人的视觉暂留时间为0.1S(100MS),所以每位显示的时间不能超过20MS,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。这种方式称为软件扫描方式。
2.2.3   键盘工作模块
     按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。
按键按照接口原理可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的定义与识别。
    全编码键盘能够由硬件逻辑自动提供与键对应的编码,此外,一般还具有去抖动和多键、窜键保护电路。这种键盘使用方便,但需要较多的硬件,价格较贵,一般的单片机应用系统较少采用。非编码键盘只简单地提供行和列的矩阵,其它工作均由软件完成。由于其经济实用,较多地应用于单片机系统中。在本套设计中由于只需要几个功能键,此时,可采用独立式按键结构
2.2.3.1    独立式按键结构
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如(图3.1)所示。
     独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,采用。

图2.1  独立式按键电路
2.2.3.2   独立式按键的软件结构
独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。图3.1中的I/O口采用P1口。

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电源时实现计时显示同步运行的功能。

2.2.5备用电池功耗问题
     在设计方案中采用+3.6V可充电电池作为备用电源,但若把电池直接并联在外部+5V电源引脚两端时,存在着电池功耗问题如:1.接入+5V时会对电池B1进行电流很大的强充电过程,这会直接影响电池的使用寿命。2.停止外部+5V供电时,此时外部电源等效于一个电压源,充电电池B1既要对CPU供电又要对电压源供电,这样会使电池电量消耗过大,使得电池供电效率大大降低。
为解决上述问题,我们引入两个1N5819如图所示:1.若+5V接入时,一方面为显示部分和复位电路提供+5V 工作电压,另一方面通过V8、 R15对电池B1进行涓流充电,同时通过V7向CPU提供工作电压。从而很好地解决电池充电时,电流过大影响电池使用寿命的问题。2.当外部+5V电源断开时,由电池B1经V7向CPU提供工作电压,同时由于V8截止故不会造成电池B1对外部的放电,从而提高了电池的供电效率,能够长时间地为CPU提供工作电压。如(图5-1)


图5-1
2.2.6 直流稳压电源部分
直流稳压电源是给电子设备提供稳定直流电压的电子电路。这次电路需要的是+5V直流电源。
6.1设计分析
   本电源设计可采用集成三端稳压器构成,只要加上一些外围元件即可实现。其框图和电路分别示于图2-1和图2-2所示。

图6-1  直流稳压电源框图
2.2.6.1   主要技术指标
(1)    输入交流电压220V(50~60Hz)。
(2)    输出直流电压5V,输出电流1A。
(3)    输入交流在220V上下波动10%时,输出电压相对变化量小于2%。
(4)    输入电阻R0<0.1Ω。
(5)    输出最大波纹电压小于10Mv。

                                    图6-2
2.2.6.2 滤波电路
  它的任务是将全滤波形的输出通过RC滤波网络以后变成更平坦的直流电压,减小脉动,提高整流的效果。这是整流管中通过的电流的瞬间值要比平均值大得多,特别在接通电源瞬间有相当大的冲击电流(即充电电流)通过整流管,这一点要引起注意。
(1)    电源变压器
它的任务是把电源电压220V变压到合适的大小。如果U2的值太大,会造成集成端稳压器7805的功豪大,温升高,且浪费电能。反之,如果U2的值小到一定程度,三端稳压器不能正常工作,失去稳压作用.因此U2的值应大小合适,这个值应该使三端稳压器在交流电网电压最低和输出电流最大时能正常工作。而且在正常稳压的前提下,它的压降尽可能小,以减小功耗。
(2)    整流电路
  它的任务是将正弦波变换成直流电压。这里一般采用桥式整流电路来实现,既可用四个二极管来组成,也可用整流桥堆来完成,只是参数一定要选择合理。
(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)   对于连接位选显信号的电阻选用上,由Ic<100Ib,I0=10mA,得Ib>0.1 mA,根据R2=(VCC-Vbc)/Ib=(5v-0.7v)/0.1 mA=4.3kΩ,若要Ib>0.1 mA则必须使R2>4.3 kΩ,因此选用了比较接近的4.7 kΩ




























第3章 软件设计(图)
3.1时钟主程序流程图1
3.2键盘中断处理程序流程图2
3.3定时中断服务程序流程图3




第4章 系统调试
4.1  硬件调试:主要检查了电路板有无虚焊、短路、连线是否正常,尤其是单片机的各使能端的接线,I/O接口连线是否有误。由于我们采用了六个数码管并联接入P2口的段选端,因此接线较多,经常容易出现管脚间短路现象。这是硬件设计不足之处,今后将注意元件的选配使设计更简洁实用。

4.2  软件调试:在LCA51仿真机上,对定时中断程序、显示子程序、按键中断子程序进行了分段调试,结果功能正常。

4.3  时钟计时检测:通过与其它计时器对比观察发现数字时钟走时过快,检查定时中断程序发现T0的初始值设定有误,因此重新设置:
根据T0选择工作模式1,定时时间为50ms,   focs=12MHz,
由  T=(2^16-T0初始值) ×振荡周期×12
设T0的初始值为X,
则:(2^16-X)×1/12×10^6s×12=50ms
X=15625,      
转化二进制值为:X=0011110010111010,   即TH=#3CH,TL=#0BAH












                                                      

第5章  致谢
在设计过程中,通过针对性地查找资料,了解了些电子方面的资料,既增长了自己见识,补充最新的专业知识,又提高了自己的应用能力。
这次对AT89C51有了一个全面的认识,在此基础上结合以前所学的专业知识,从而把我所学的知识贯穿到一起,对电子专业有了一个更全面的认识!
总之这次毕业设计让我把理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的全面素质。这些在我今后的学习和工作当中都会有很大的帮助。
最后,我要感谢我的指导老师,在这次毕业设计中给了我许多的帮助。同时也感谢无锡商院明天更美好!































第6章   参考文献
[1] 实用单片机电子钟的设计/丁辉、姚庆文     无线电2003年合订本(下)               
[2] 于海生.微型计算机控制技术[M] .清华大学出版社.1999-6
[3] 孙涵芳.MCS-51系列单片机原理及应用[M] .北京航空航天大学出版社.1996-4
[4] 黄正谨.综合电子设计与实践[M] .东南大学出版社.2002-3
[5] 杨欣等.电子设计从零开始[M] .清华大学出版社.2005-10
[6] 谢嘉奎.电子线路[M] .高等教育出版社.2003-2
[7] 夏路易,石宗义.电路原理图与电路设计教程Protel 99SE[M] .北京希望电子出版社.2002





























附录(一)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;   DEF  RAM                       
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

HOUR      EQU  20H                  
MIN        EQU  21H
SEC        EQU  22H
SEC01      EQU  23H
KEYFL     EQU  24H
KEYREG    EQU  25H
TMINTFL   EQU  26H
SETFL      EQU  27H
DSPDAT1   EQU  28H
DSPDAT2   EQU  29H
DSPDAT3   EQU  2AH
DSPDAT4   EQU  2BH
DSPDAT5   EQU  2CH
DSPDAT6   EQU  2DH
SHFL       EQU  2EH
SMFL      EQU  2FH
SSFL       EQU  30H

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;      MAIN            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

          ORG    0000H
          LJMP   START

          ORG    000BH
          LJMP   TIMEINT

          ORG    0100H
START:    MOV    R7,#250
LOOP:     NOP
          NOP
          DJNZ   R7,LOOP
          MOV    IE,#00H
          MOV    P0,#0FFH

          MOV    P1,#0FFH
          MOV    P2,#0FFH
          MOV    P3,#0FFH
          MOV    SETFL,#00H
          MOV    KEYFL,#00H
          MOV    KEYREG,#00H
          MOV    TMINTFL,#00H
          MOV    SHFL,#00H
          MOV    SMFL,#00H
          MOV    SSFL,#00H
          MOV    TMOD,#01H
          MOV    TCON,#00H
          MOV    TH0,#3CH
          MOV    TL0,#0BAH
          MOV    IE,#82H
          MOV    TCON,#10H
MAIN:     MOV    A,SETFL
          JNZ    MAIN1
          MOV    TMINTFL,#00H
          MOV    R0,HOUR
          MOV    A,TMINTFL
          JNZ    MAIN2
          MOV    R1,MIN
          MOV    A,TMINTFL
          JNZ    MAIN2
          MOV    R2,SEC
          MOV    C,P1.7
          JNC    MAIN3
          LCALL  CODECHA
MAIN1:    MOV    C,P1.7
          JNC    MAIN3
          LCALL  DISP
          MOV    C,P1.7
          JNC    MAIN3
          MOV    A,P1
          ANL    A,#1FH
          MOV    KEYREG,A
          CLR    C
          SUBB   A,#1FH
          JZ     MAIN1A
          MOV    A,KEYFL
          JNZ    MAIN2
          MOV    C,P1.7
          JNC    MAIN3
          LCALL  KEY
          LJMP   MAIN2
MAIN1A:   LCALL  DISP
          MOV    A,P1
          ANL    A,#1FH
          CLR    C
          SUBB   A,#1FH
          JNZ    MAIN2
          MOV    KEYFL,#00H
MAIN2:    NOP
          MOV    C,P1.7
          JC     MAIN
MAIN3:    MOV    PCON,#01H
          LJMP   MAIN2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; TIMEINT  SUB          ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

TIMEINT:  MOV    IE,#00H
          MOV    TCON,#00H
          MOV    TH0,#3CH
          MOV    TL0,#0BAH
          MOV    TCON,#10H
          MOV    IE,#82H
          PUSH   PSW
          PUSH   ACC
          INC    SEC01
          MOV    A,#19
          CLR    C
          SUBB   A,SEC01
          JC     TIMEINT1
          LJMP   TIMEINT4
TIMEINT1: MOV    SEC01,#00H
          MOV    TMINTFL,#0FFH
          MOV    A,SEC
          ADD    A,#1
          DA     A
          MOV    SEC,A
          CLR    C
          SUBB   A,#60H
          JNC    TIMEINT2
          LJMP   TIMEINT4
TIMEINT2: MOV    SEC,#00H
          MOV    A,MIN
          ADD    A,#1
          DA     A
          MOV    MIN,A
          CLR    C
          SUBB   A,#60H
          JNC    TIMEINT3
          LJMP   TIMEINT4
TIMEINT3: MOV    MIN, #00H
          MOV    A,HOUR
          ADD    A,#1
          DA     A
          MOV    HOUR,A
          CLR    C
          SUBB   A,#24H
          JC     TIMEINT4
          MOV    HOUR,#00H
TIMEINT4: POP    ACC
          POP    PSW
          RETI

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;CODECHA  SUB        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

CODECHA:  MOV    A,R0
          SWAP   A
          ANL    A,#0FH
          MOV    DSPDAT1,A
          MOV    A,R0
          ANL    A,#0FH
          MOV    DSPDAT2,A
          MOV    A,R1
          SWAP   A
          ANL    A,#0FH
          MOV    DSPDAT3,A
          MOV    A,R1
          ANL    A,#0FH
          MOV    DSPDAT4,A
          MOV    A,R2
          SWAP   A
          ANL    A,#0FH
          MOV    DSPDAT5,A
          MOV    A,R2
          ANL    A,#0FH
          MOV    DSPDAT6,A
          MOV    C,P1.7
          JNC    CODECHA2
          MOV    DPTR,#TABDSP
          MOV    R0,#DSPDAT1
          MOV    R1,#6
CODECHA1: MOV    A,@R0
          MOVC   A,@A+DPTR
          MOV    @R0,A
          INC    R0
          DJNZ   R1,CODECHA1
CODECHA2: RET

TABDSP:   DB     88H,0BEH,0C4H,94H,0B2H
          DB     91H,81H,0BCH,80H,90H,0FFH

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; DISP     SUB        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DISP:     MOV    R2,#6
          MOV    R1,#0FEH
          MOV    R0,#DSPDAT1
DISP1:    MOV    C,P1.7
          JNC    DISP2
          MOV    P2,@R0
          MOV    C,P1.7
          JNC    DISP2
          MOV    P0,R1
          MOV    C,P1.7
          JNC    DISP2
          LCALL  DEL1MS
          MOV    P2,#0FFH
          MOV    P0,#0FFH
          MOV    A,R1
          RL     A
          MOV    R1,A
          INC    R0
          DJNZ   R2,DISP1
DISP2:    MOV    P2,#0FFH
          MOV    P0,#0FFH
          RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; DEL1MS   SUB        ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

DEL1MS:   MOV    C,P1.7
          JNC    DEL1MS2
          MOV    R6,#249
DEL1MS1:  MOV    C,P1.7
          JNC    DEL1MS2
          NOP
          DJNZ   R6,DEL1MS1
DEL1MS2:  RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  KEY    SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

KEY:      LCALL  DISP
          MOV    A,P1
          ANL    A,#1FH
          CLR    C
          SUBB   A,KEYREG
          JNZ    KEY5
          MOV    KEYFL,#0FFH
          MOV    A,KEYREG
          RRC    A
          JC     KEY1
          MOV    C,P1.7
          JNC    KEY5
          LCALL  SHKEY
          LJMP   KEY5
KEY1:     RRC    A
          JC     KEY2
          MOV    C,P1.7
          JNC    KEY5
          LCALL  SMKEY
          LJMP   KEY5
KEY2:     RRC    A
          JC     KEY3
          MOV    C,P1.7
          JNC    KEY5
          LCALL  SSKEY
          LJMP   KEY5
KEY3:     RRC    A
          JC     KEY4
          MOV    C,P1.7
          JNC    KEY5
          LCALL  INCKEY
          LJMP   KEY5
KEY4:     RRC    A
          JC     KEY5
          MOV    C,P1.7
          JNC    KEY5
          LCALL  ENTER
KEY5:     RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  SHKEY  SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SHKEY:    MOV    IE,#00H
          MOV    TCON,#00H
          MOV    SETFL,#0FFH
          MOV    SHFL,#0FFH
          MOV    SMFL,#00H
          MOV    SSFL,#00H
          MOV    R0,HOUR
          MOV    R1,#0AAH
          MOV    R2,#0AAH
          LCALL  CODECHA
          RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  SMKEY  SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SMKEY:    MOV    IE,#00H
          MOV    TCON,#00H
          MOV    SETFL,#0FFH
          MOV    SMFL,#0FFH
          MOV    SHFL,#00H
          MOV    SSFL,#00H
          MOV    R1,MIN
          MOV    R0,#0AAH
          MOV    R2,#0AAH
          LCALL  CODECHA
          RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  SSKEY  SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SSKEY:    MOV    IE,#00H
          MOV    TCON,#00H
          MOV    SETFL,#0FFH
          MOV    SSFL,#0FFH
          MOV    SHFL,#00H
          MOV    SMFL,#00H
          MOV    R2,SEC
          MOV    R0,#0AAH
          MOV    R1,#0AAH
          LCALL  CODECHA
          RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  INCKEY SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

INCKEY:   MOV    A,SHFL
          JZ     INCKEY1
          MOV    A,HOUR
          ADD    A,#1
          DA     A
          MOV    HOUR,A
          CLR    C
          SUBB   A,#24H
          JC     INCKEY1A
          MOV    HOUR,#00H
INCKEY1A: MOV    R0,HOUR
          MOV    R1,#0AAH
          MOV    R2,#0AAH
          LCALL  CODECHA
          LJMP   INCKEY3
INCKEY1:  MOV    A,SMFL
          JZ     INCKEY2
          MOV    A,MIN
          ADD    A,#1
          DA     A
          MOV    MIN,A
          CLR    C
          SUBB   A,#60H                     
          JC     INCKEY2A
          MOV    MIN,#00H
INCKEY2A: MOV    R1,MIN
          MOV    R0,#0AAH
          MOV    R2,#0AAH
          LCALL  CODECHA
          LJMP   INCKEY3
INCKEY2:  MOV    A,SSFL
          JZ     INCKEY3
          MOV    A,SEC
          ADD    A,#1
          DA     A
          MOV    SEC,A
          CLR    C
          SUBB   A,#60H
          JC     INCKEY3A
          MOV    SEC,#00H
INCKEY3A: MOV    R2,SEC
          MOV    R0,#0AAH
          MOV    R1,#0AAH
          LCALL  CODECHA
INCKEY3:  RET

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;  ENTER  SUB         ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

ENTER:    MOV    A,SETFL
          JZ     ENTER1
          MOV    SEC01,#00H
          MOV    SETFL,#00H
          MOV    SHFL,#00H
          MOV    SMFL,#00H
          MOV    SSFL,#00H
          MOV    TCON,#00H
          MOV    TH0,#3CH
          MOV    TL0,#0BAH
          MOV    IE,#82H
          MOV    TCON,#10H
ENTER1:   RET

          END


附录(二)
回复

使用道具 举报

已有1人评论

wolfgg 发表于 2007-5-23 12:30:09
楼主好人啊,关键部分都发出来了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ| Archiver|手机版|小黑屋| 碧波制图网 Stonespider

Copyright © 2021-2023 Kangli Wu   All Rights Reserved.

Powered by Discuz! X3.5( 苏ICP备18011607号-1 )

快速
回复
返回
列表
返回
顶部