单片机实现的多功能数字电子表设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
1、目的............................................................ .. (2)
2、课题内容 (2)
3、主要技术指标 (2)
4、课题分析与硬件电路设计原理 (2)
5、系统框图 (4)
6、方案选择与元器件选择 (4)
7、软件设计依据与分析 (7)
8、附录 (12)
9、附录一设计总结与体会 (12)
10、附录二元器件清单 (13)
11、附录三系统调试记录......................................................... . (14)
12、附录四参考文献......................................................... (16)
13、附录五整机电路图......................................................... .. (17)
14、附录六源程序清单......................................................... .. (18)
多功能数字电子表设计报告
一、目的
1、使学生将所学的“数字电子技术”和“单片机原理”等相关知识应用
于实践。

培养学生理论联系实际的工作作风,提高学生的动手能力。

2、学会用“计算机辅助分析设计软件”对该题目进行分析、设计与仿真,
并打印出仿真结果,提高学生对计算机的应用水平。

3、掌握电路的焊接、安装、调试技术,培养学生的工程意识,提高学生
分析并解决实际问题的能力,激发学生对产品开发的兴趣,培养学生
的科技创新精神。

二、课题内容
设计并制作符合以下要求的“多功能数字电子表”,并撰写分析设计报告。

1、基本要求:(2010-11-11)
(1)、计时功能:显示时、分、秒;
(2)、定闹功能;
(3)、秒表功能;
(4)、倒计时功能。

2、提高要求:
(1)、增加“语音报时”功能;
(2)、增加“电子日历”功能。

(3)、数字温度计,
三、主要技术指标
1、计时精度:±2秒/月;
2、功能设置按键不得多于3个。

四、课题分析与硬件电路设计原理
1、课题分析
在进行课题设计前,我们应该确定一些基本的设计原则,然后再根据这些原则去寻找思路。

在设计系统时,我们主要考虑以下一些原则:节约元器件,尽量降低系统实现的成本;硬件电路尽量简单,使得硬件实现、问题检查、软件编程以及系统调试的难度都降低;能在软件上实现的,不采取软件实现,使芯片利用率尽可能高;软件设计方案要优化,使得编程尽可能简单,方便仿真与测试;设计方案要和当前的试验平台相应;充分利用各种资料,尽量采用成熟与经典的电路。

要实现一个系统,先要明确该系统的功能和要求。

设计的系统必须要能实现基本的功能,再考虑实现其他的功能。

为了取得比较好的实践成绩,我们必须实现课程设计的提高要求。

我们可以从老师给出来的两个提高方案种选一个或两个都选,也可以自己拟定一个方案。

首先考虑“语音报时”。

由于语音报时要用到
语音芯片,使用语音芯片后,系统的电路复杂性增加,不仅在电路设计和硬件电路实现方面难度加大,而且系统调试的难度也加大。

因而,经过综合考虑,我们决定选择仅通过蜂鸣器来实现报时功能。

再考虑“电子日历”。

由于电子表显示时分秒需要六位数码管,日历显示的年月日也可以采用六位显示,而且日历设计在数学原理上和钟表设计一样。

因而,可以在不增加硬件的条件下实现“电子日历”,而系统的功能按键少,必然增加了软件实现的难度;从另外一方面看,这相当于提高了硬件的利用率。

为了锻炼自己,我们决定选择实现“电子日历”功能。

其次,从日常生活中所使用的电子表来看,我们还可以尝试实现“星期”功能,考虑到自身知识积累与时间限制,不选择实现该功能。

综上所述,我们要设计的电子表,其所能实现的功能为:计时、闹钟、秒表、倒计时、报时与日历。

2、硬件电路设计原理
多功能电子表的实现方式有多种,从软件和硬件的角度来看,可以分成硬件实现方式与软硬件结合的实现方式。

本次课程设计是基于单片机的设计,因而是软硬件结合的实现方式。

软硬件结合的实现方式比硬件实现方式更具有优点。

从电子表的用户角度来看,一个电子表可划分为三个部分:用户面对的显示界面;用户切换电子表各种功能的按键;用户无需关心的电子表内部控制部分。

从这三方面我们可以综合出本次实践所需要设计的系统的框图,如图1所示。

电子表的关键秒信号的产生与秒计数,利用单片机内部的定时器和计数器,无需外加日历芯片,即可以实现所要求的各种功能。

经过综合考虑,我们选择AT89C52单片机来设计系统。

AT89C52是低电压,高性能CMOS8位单片机片内含8k bytes可反复擦写的只读程序存储器(PEROM)和256bytesd的随机存储器(RAM),与标准MCS—51指令系统及8052产品引脚兼容,片内置8位中央处理器(CPU)和Flash单元。

3个16位定时/计数器,8个中断源,32个可编程I/O口线。

根据AT89C52的引脚功能,我们选择P0口为功能切换输入口(,与)与蜂鸣器驱动信号输出口(),P1口为显示电路的段选输出口,P2口为显示电路的位选输出口。

由于采用数码管显示电路,为使得显示稳定,需对段选信号进行锁存,即在AT89C52的P0口接缓冲器。

为了电路连接方便,应该选择8输入8输出缓冲器。

经过对比各种缓冲器后,选择74LS244。

74LS244是三态输出的八组缓冲器和总
线驱动器,能驱动数码管的各段稳定工作。

五、系统框图
图1
单片机:用于控制电子表的运行;74LS244:输出缓冲器,用以锁存单片机的显示输出,并驱动七段数码管;LED:电子表的显示窗口;功能键:实现电子表的功能切换;蜂鸣器:用以整点报时、闹铃发声。

六、方案选择与元器件选择
(一)、方案选择
在经过课题分析,确定了系统框图后,还需要确定具体的硬件电路,以便根据确定的硬件电路进行软件设计。

而在软件实现方面,也需要结合具体的硬件电路,选择最优化组合,才能使得编程简单,系统调试方便,出问题也容易发现。

整个电路系统分为六个子模块:作为控制处理器的单片机(芯片一经选定,其他子模块必须根据他来确定);显示模块;响铃模块;时钟产生模块;复位模块;功能按键模块。

响铃模块、时钟产生模块与复位模块都已经有很多经典的范例供参考,可以很容易确定下来;方案选择的最关键是显示模块和功能按键模块,它不仅关系着软件实现的难以与成败,还对系统调试有着重大影响。

1、显示模块
显示模块采用6位8段共阳数码管进行显示,单片机的P0口位显示输出端口。

数码管显示的关键是要有足够的显示亮度和显示稳定。

因而,选择线缓冲器
74LS244作为单片机的显示输出信号的缓冲器。

由74LS244的功能可知,只需要一片该芯片即可以让数码管显示稳定。

要保证数码管有足够的亮度,必须要有合适的位选电压。

因而,让单片机的位选输出信号通过三极管放大再接到数码管上。

2、功能按键模块
系统的各个功能的切换,是通过功能按键实现的。

由于设计要求是功能开关不多于三个,而系统的功能多样,如果选择一个功能开关,显然难以实现诸多系统功能;如果选择两个开关,从数学角度上分析,显然可以实现,但难度大,繁琐,也不方便调试,因而功能开关设置为三个。

按键电路要考虑去抖动的问题。

按键电路去抖动的实现方式有硬件实现与软件实现两种方式。

根据设计原则,应该尽量降低成本和硬件电路的复杂性,提高对单片机的功能利用率。

因而,在设计中采用软件去抖动方式。

确定按键数量后,还需要确定按键所对应的单片机引脚,以便根据引脚进行软件设计。

单片机的RST管脚接复位开关,、、管脚分别接功能开关。

为了叙述方便,以下行文过程均用管脚名称代指对应开关。

复位后,系统的初始状态为:时钟从00:00:00开始计时,日期从08:03:14开始计时。

系统的正常显示为时间显示。

由于功能按键少,必须采用按键组合的方式,才能实现系统的所有功能。

按键组合的方式,不仅关系到软件实现的难易程度,还关系系统调试的难易与系统实现的成败。

因而,必须优化按键功能组合方案。

以下是经过优化得到的一个按键功能组合方案,我们采用该方案来进行系统实现:
(1)在时钟状态下,短按,时钟仍然计时,但LED熄灭,晚上防止灯光刺眼,再短按,LED重新点亮。

(2)在时钟状态下长按,时钟单元清零,分单元闪烁,进入分调整,再短按,分加1,短按,分减1;再长按,时单元闪烁,进入时调整状态,再短按,时加1,短按, 时减1,再长按,退出时间调整状态,进入时钟显示状态。

(3)在时钟状态短按,显示日期,再长按,进入日期调整状态,短按,日加1,短按,日减1;再长按,进入月调整状态,短按,月加1,短按,月减1;再长按,进入年调整状态,短按,年加1,短按,年减1.再长按,退出日期显示调整状态,进入时钟显示状态。

(4)在时钟状态长按,进入秒表状态,秒表开始计时。

再按下,秒表暂停;再按,秒表清零;再按,秒表又开始计时;再按,秒表清零,秒表清零后短按,
可退出秒表功能,回到时钟显示状态。

(5)在时钟状态,短按,进入闹钟/倒计时调整状态,LED显示“00:00:灭—”,可分调整,按,分加1,按,分减1;再按,LED显示“00:00:—灭”,进入闹钟时调整,按,时加1。

闹钟调整好后,按下,LED显示“00:00:—0”,表明闹钟有效;如再按下,LED又显示“00:00:—灭:,表明闹钟无效,再按,LED显示为“00:00:00”,开始倒计时。

倒计时到零时,蜂鸣器报警,同时回到时钟状态。

(6)在闹铃响时,可按停闹,不按则闹钟响1分钟。

整点报时,闹铃响的次数即为整点数。

(二)、元器件选择
由于可以通过软件靠一片单片机就能实现对电子表的各种功能的控制,故单片机的外部,只需要接功能切换模块、报时闹铃模块和显示模块。

而时间显示为六位,故需要六只共阳LED。

为了使得LED的显示能够稳定,应该对段选信号进行锁存。

遵循节约成本和布线尽可能简单的原则,采用一片74LS244三态缓冲驱动做LED段选信号的锁存器即可稳定驱动LED工作。

为了使得LED显示的亮度比较强,必须保证位选信号的电压比较大。

单片机的位选输出直接驱动LED工作,可能导致亮度不够,因而把单片机的位选输出经三极管放大后输到LED的阳极,需要6只PNP三极管。

同样,如果直接把报时和闹铃信号直接从单片机输出到蜂鸣器,有可能无法驱动蜂鸣器工作,因而把报时输出信号经三极管放大后才输到蜂鸣器,还需要一个PNP三极管。

而功能切换和调整模块,只需要加4个电平触发开关即可,三个开关进行功能切换与调整,一个用来进行复位。

对应于各个开关和驱动电路,还应选择合适的电阻。

同时,为了使得到单片机的工作时钟,还需要电容和晶振来构成时钟产生电路。

七、软件设计依据与分析
1、软件模块
定时器T0、T1溢出周期为50ms,T0为秒计数用,T1为调整时闪烁及秒表定时用。

、、为调整按键。

单片机的P0口为字符输出口,P2口为扫描口,为蜂鸣器接口。

单片机存储单元分配如下:
50H~55H为闹钟定时单元;60H~65H为秒表计时单元;
79H~75H为显示时间单元;76H~79H为分时计时单元;
40H~45H为倒计时单元;30H~35H为日期单元;
03H标志位为0时,时钟闪烁,为1时秒表状态;
05H标志位为0时,不闹铃,为1时,闹铃;
07H每秒改变一次,使蜂鸣器的间隔鸣叫。

(1) 主程序
秒计数由定时器T0中断完成,秒表定时及时调整闪烁由定时器T1中断完成,主程序循环调用显示子程序和查键子程序,当端口有开关按下时,转入相应功能程序。

程序流程如图1。

(2)显示子程序
时间显示子程序每次显示6个连续内存单元的十进制的BCD码数据,首地址在调用显示子程序时先指定内存单元中50H~55H为闹钟定时单元,70H~75H为时钟显示单元,由于采用7段共阳LED动态扫描实现数据显示,所以显示用十进制BCD码数据的对应段码存放在ROM表中。

显示时,先取出内存在地址中的数据,然后查得对应显示用段码从P0口输出,P2口将对应的数码管选通,就能显示该地址单元的数据值,为了显示小数点等特殊字符,显示和计时应采用不同的显示子程序。

(3)定时器T0中断服务程序
定时器T0用于时间计时,定时溢出中断周期为50ms,中断进入后先进行中断初值校正,当中断累计20次(即50ms×20=1s)时,对秒计数单元进行加1操作,时钟计数单元地址分别在70H~71H(秒)、76H~77H(分)、78H~79H(时)中,最大计时值为23时59分59秒。

7A单元存放“熄灭符”数据(#0AH),用于时间调整时的闪烁功能,在计数单元中,采用十进制BCD码计数,满10进位。

T0中断程序流程如图3。

(4)闹钟时间设定功能程序
在正常时钟状态下,若按下口的按键开关,则进入设定闹时调分状态,显示首地址改为50H,LED显示50H~55H中的闹钟设定时间,显示式样为00:00:—,其中高2位代表时,低2位代表分,定时闹铃精确到分。

按,分加1,按,时减1,按,闹铃有效,显示式样为00:00:—0;再按,闹铃无效,显示式样变为00:00:—,再按,调整闹钟时间结束,恢复正常时间显示。

在闹铃时,可按下的按键开关使蜂鸣器停止,不按则蜂鸣器将鸣叫1min后自行终止;在设定闹钟
后,若要取消闹时功能,则可按下,当听到“滴”一声时表明已取消了闹铃功能。

(5)定时器T1中断服务程序
T1中断程序用于指示时间调整单元数字的闪亮或秒表计数;在时间调整状态下,每过左右,将对应的调整单元的显示数据换成“熄灭符”数据(#0AH)。

这样,在调整时间时,对应调整单元的显示数据会间隔闪亮;在做秒表计时时,每过10ms中断1次,计数单元加1,每10次为1s。

秒表计数单元地址在60H~61H (10ms)、62H~63H(s)、64H~65H(min),最大计数值为99分秒。

T1中断服务程序流程如图4。

(6)调时功能程序
在时钟状态下长按,时钟单元清零,分单元闪烁,进入分调整,再短按,分加1,短按,分减1;再长按,时单元闪烁,进入时调整状态,再短按,时加1,短按, 时减1,再长按,退出时间调整状态,进入时钟显示状态。

(7)秒表功能程序
在时钟状态长按,进入秒表状态,秒表开始计时。

再按下,秒表暂停;再按,秒表清零;再按,秒表又开始计时;再按,秒表清零,秒表清零后短按,可退出秒表功能,回到时钟显示状态。

(8)日期调整功能程序
在时钟状态短按,显示日期,再长按,进入日期调整状态,短按,日加1,短按,日减1;再长按,进入月调整状态,短按,月加1,短按,月减1;再长按,进入年调整状态,短按,年加1,短按,年减1.再长按,退出日期显示调整状态,进入时钟显示状态。

(9)闹钟/倒计时调整程序
在时钟状态,短按,进入闹钟/倒计时调整状态,LED显示“00:00:灭—”,可分调整,按,分加1,按,分减1;再按,LED显示“00:00:—灭”,进入闹钟时调整,按,时加1。

闹钟调整好后,按下,LED显示“00:00:—0”,表明闹钟有效;如再按下,LED又显示“00:00:—灭:,表明闹钟无效,再按,LED 显示为“00:00:00”,开始倒计时。

倒计时到零时,蜂鸣器报警,同时回到时钟状态。

2、软件设计流程图
图2 系统流程图
图3 T0中断
图4 T1中断
八、附录
附录一设计总结与体会
本次设计实践以单片机应用为基础,由于我们之前没有学习单片机的知识,因而在设计过程中面临一些困难。

为了解决问题,我们一边做系统设计,一边针对性地学习相关知识,排除了设计过程中的各种困难,不仅完成了基本的设计要求,还实现了“电子日历”的提高要求。

通过本次实践,我们不但获取了不少新知识,各方面的能力也得到了综合训练,能力得到了很大的提高。

随着计算机在现代社会的广泛应用,单片机的应用也深入到社会生产的与生活的方方面面,被用在各个控制领域。

基于单片机的电子设计,更成为电子设计领域的重要部分。

我们所学的专业是生物医学工程,这个专业的诸多学习研究方向都要和控制打交道。

因而,我们有必要掌握单片机的基本应用,这对我们的专业技能与能力的提高都大有裨益。

通过这次课程设计实践,我们学到了不少单片机基础知识,也对单片机的初步应用有比较清晰的了解。

我们以前学了各种电路电子知识,也有过一些电路设计实践,而这次设计实践让我们有了更大的收获。

在以往的设计实践中,我们往往都偏向于某一方面知识的运用,而且实践也带有验证性质;而在本次设计实践中,强调了软件和硬件方面的综合应用,是系统级别的设计,真正考验和锻炼我们的能力。

首先,由于课程学习安排上的原因,我们本学期才安排单片机基础与应用的课程,所以在接到设计任务时,我们对单片机知识所知不多,更谈不上应用。

为了完成设计任务,我们针对性地学习单片机的知识,即学即用。

同时,我们不仅利用了图书馆的资料文献,还充分利用了互联网的信息资源。

在硬件实现方面,我们积累了电路排版布线的经验与知识;在软件设计方面,我们充分体验到了模块化设计的好处。

在课题设计过程中,不仅培养了我们的自学能力,也提高了我们的知识综合应用能力,更提升另外我们的综合设计能力。

在课程设计过程中,小组的每一个成员都有明确的分工,同时也密切配合,使得我们能够按时顺利完成设计任务。

一个课题小组就是一个团队,实践的过程体现和培养了我们的团队协作精神和能力。

附录二元器件清单
附录三系统调试记录
1、LED的亮灭控制
在时钟状态下,短按,LED熄灭;再短按,LED重新点亮。

2、时间调整
在时钟状态下长按,时钟单元清零,分单元闪烁,进入分调整,再短按,分加1,短按,分减1;再长按,时单元闪烁,进入时调整状态,再短按,时加1,短按, 时减1,再长按,退出时间调整状态,进入时钟显示状态。

3、日期调整
在时钟状态短按,显示日期,再长按,进入日期调整状态,短按,日加1,短按,日减1;再长按,进入月调整状态,短按,月加1,短按,月减1;再长按,进入年调整状态,短按,年加1,短按,年减1.再长按,退出日期显示调整状态,进入时钟显示状态。

4、秒表测试
在时钟状态长按,进入秒表状态,秒表开始计时。

再按下,秒表暂停;再按,秒表清零;再按,秒表又开始计时;再按,秒表清零,秒表清零后短按,可退出秒表功能,回到时钟显示状态。

5、闹钟/倒计时设置
在时钟状态,短按,进入闹钟/倒计时调整状态,LED显示“00:00:灭—”,可分调整,按,分加1,按,分减1;再按,LED显示“00:00:—灭”,进入闹钟时调整,按,时加1。

闹钟调整好后,按下,LED显示“00:00:—0”,表明闹钟有效;如再按下,LED又显示“00:00:—灭:,表明闹钟无效,再按,LED 显示为“00:00:00”,开始倒计时。

倒计时到零时,蜂鸣器报警,同时回到时钟状态。

6、闹钟测试
设定一个响闹时间,当时钟显示时间到达该时间,闹铃开始响闹。

在闹铃响时,可按停闹,不按则闹钟响1分钟。

7、时间显示测试
当秒显示单元显示为“59”时,1秒后分显示单元加1,秒显示单元变成“00”;把分显示单元调整为“59”(时显示单元不为23),当分显示单元和秒显示单元
都显示为59时,1秒后,时显示单元加1,分显示单元与秒显示单元都变为“00”;把时显示单元调整为“23”,分显示单元调整为“59”,当秒显示单元显示“59”时,1秒后,时、分、秒显示单元都显示为“00”。

8、日期显示测试
当时间显示为“23:59:59”时,1秒后,日期自动加1。

附录四参考文献
1、《单片机原理及应用》,丁元杰着,北京航空航天大学出版社2005年8月版。

2、《电子线路Protel 99 SE 实用教程》,王芳主编,中南大学出版社2005年8月第一版。

3、《单片机实用教程》,李勋、刘源编着,北京航空航天大学出版社2000年6月第一版。

4、《综合课程设计汇编》,重庆大学出版社。

附录五整机电路图
附录六程序清单
DISPFIRST EQU 36H
BELL EQU
CONBS EQU 2FH
ORG 0000H
LJMP START
ORG 0003H
RETI
ORG 000BH
LJMP INTT0
ORG 0013H
RETI
ORG 001BH
LJMP INTT1
ORG 0023H
RETI
QQQQ: MOV A,#10H
MOV B,79H
MUL AB
ADD A,78H
MOV CONBS,A BSLOOP: LCALL DS20MS
LCALL DL1S
LCALL DL1S
LCALL DL1S
DJNZ CONBS,BSLOOP CLR 08H
AJMP START1
START: MOV R0,#00H
MOV R7,#80H CLEARDISP:MOV @R0,#00H
INC R0
DJNZ R7,CLEARDISP MOV 20H,#00H
MOV 7AH,#0AH
MOV 30H,#04H
MOV 31H,#01H
MOV 32H,#03H
MOV 33H,#00H
MOV 34H,#08H
MOV 35H,#00H
MOV 70H,#00H
MOV 71H,#00H
MOV 72H,#00H
MOV 74H,#00H
MOV 75H,#00H
MOV 76H,#00H
MOV 77H,#00H
MOV 78H,#00H
MOV 79H,#00H
MOV TMOD,#11H
MOV TL0,#0B0H
MOV TH0,#3CH
MOV TL1,#0B0H
MOV TH1,#3CH
SETB EA
SETB ET0
SETB TR0
MOV R4,#14H
START22: MOV DISPFIRST,#70H
START1: LCALL DISPLAY
JNB ,SETMM1
JNB ,FUNSS
JNB ,TSFUN
JB 08H,QQQQ1
AJMP START1
FUNSS: LJMP FUNSS1
QQQQ1: LJMP QQQQ
TSFUN: LCALL DS20MS
JB ,START1
WAIT113: JNB ,WAIT113
JB 05H,CLOSESP
MOV DISPFIRST,#50H
MOV 50H,#0CH
MOV 51H,#0AH
DSWAIT: SETB EA
LCALL DISPLAY
JNB ,DSFINC
JNB ,DSDEC
JNB ,DSSFU
AJMP DSWAIT
CLOSESP: CLR 05H
CLR BELL
AJMP START1
DSSFU: LCALL DS20MS
JB ,DSWAIT
LJMP DSSFUNN
DATE: MOV DISPFIRST,#30H
LCALL DISPLAY
JB ,DATE
DATE1: LCALL DS20MS
JB ,DATE
DATE2: LCALL DL1S
JB ,START2
LJMP SETRR
SETMM1: LJMP SETMM
DSFINC: LCALL DS20MS
JB ,DSWAIT
DSWAIT12: LCALL DISPLAY
JNB ,DSWAIT12
CLR EA
MOV R0,#53H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDHH22 ADDHH22: JC DSWAIT
ACALL CLR0
AJMP DSWAIT
DSDEC: LCALL DS20MS
JB ,DSWAIT
DSWAITEE: LCALL DISPLAY
JNB ,DSWAITEE
CLR EA
MOV R0,#53H
LCALL SUB1
LJMP DSWAIT
FUNSS1: LCALL DS20MS
JB ,START2
LCALL DL1S
JB ,DATE
WAIT11: JNB ,WAIT11
CPL 03H
JNB 03H,TIMFUN
MOV DISPFIRST,#60H MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
MOV TL1,#0F0H
MOV TH1,#0D8H
SETB TR1
SETB ET1
LJMP WAIT21
START2: LJMP START22
TIMFUN: MOV DISPFIRST,#70H CLR ET1
CLR TR1
WAIT21: LCALL DISPLAY
JNB ,WAIT22
AJMP WAIT21
WAIT22: JNB ,WAIT22
CLR ET1
CLR TR1
WAIT33: JB ,WAIT31
LCALL DS20MS
JB ,WAIT33
WAIT66: JNB ,WAIT61
MOV 60H,#00H
MOV 61H,#00H
MOV 62H,#00H
MOV 63H,#00H
MOV 64H,#00H
MOV 65H,#00H
WAIT44: JNB ,START222
JB ,WAIT41
LCALL DS20MS
JB ,WAIT44
WAIT55: JNB ,WAIT51
SETB ET1
SETB TR1
AJMP WAIT21
START222: LCALL DS20MS
JB ,WAIT44
START3: LCALL DISPLAY
JNB ,START3
LJMP START2
WAIT31: LCALL DISPLAY
AJMP WAIT33
WAIT41: LCALL DISPLAY
AJMP WAIT44
WAIT51: LCALL DISPLAY
AJMP WAIT55
WAIT61: LCALL DISPLAY
AJMP WAIT66
INTT0: PUSH ACC
PUSH PSW
CLR ET0
CLR TR0
MOV A,#0B7H
ADD A,TL0
MOV TL0,A
MOV A,#3CH
ADDC A,TH0
MOV TH0,A
SETB TR0
DJNZ R4,OUT0
ADDSS: MOV R4,#14H
CPL 07H
MOV R0,#71H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDMM ADDMM: JC OUT0
ACALL CLR0
MOV R0,#77H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDHH ADDHH: JC OUT0
ACALL CLR0
LCALL DS20MS
SETB 08H
MOV R0,#79H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,ADDRR ADDRR: JC OUT0
ACALL CLR0
MOV R0,#31H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#30H,ADDYY ADDYY: JC OUT0
ACALL CLR0
MOV R0,#33H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#12H,ADDNN ADDNN: JC OUT0
ACALL CLR0
MOV R0,#35H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#99H,NN NN: JC OUT0
ACALL CLR0
OUT0: MOV 72H,76H
MOV 73H,77H
MOV 74H,78H
MOV 75H,79H
LCALL BAOJ
POP PSW
POP ACC
SETB ET0
RETI
INTT1: PUSH ACC
PUSH PSW
JB 03H,MMFUN
MOV TL1,#0B0H
MOV TH1,#3CH
DJNZ R2,INTT1OUT MOV R2,#06H
CPL 02H
JB 02H,FLASH1 MOV 72H,76H
MOV 73H,77H
MOV 74H,78H
MOV 75H,79H
INTT1OUT: POP PSW
POP ACC
RETI
FLASH1: JB 01H,FLASH2 MOV 72H,7AH
MOV 73H,7AH
MOV 74H,78H
MOV 75H,79H
AJMP INTT1OUT
FLASH2: MOV 72H,76H
MOV 73H,77H
MOV 74H,7AH
MOV 75H,7AH
AJMP INTT1OUT
MMFUN: CLR TR1
MOV A,#0F7H
ADD A,TL1
MOV TL1,A
MOV A,#0D8H
ADDC A,TH1
MOV TH1,A
SETB TR1
MOV R0,#61H
ACALL ADD1
CLR C
MOV A,R3
JZ FSS1
AJMP OUTT01
FSS1: ACALL CLR0
MOV R0,#63H
ACALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,ADDHH1 ADDHH1: JC OUTT01
LCALL CLR0
MOV R0,#65H
ACALL ADD1
OUTT01: POP PSW
POP ACC
RETI
ADD1: MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
ADD A,#01H
DA A
MOV R3,A
ANL A,#0FH
MOV @R0,A
MOV A,R3
INC R0
SWAP A
ANL A,#0FH MOV @R0,A
RET
SUB1: MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
JZ SUB11
DEC A
SUB111: MOV R3,A
ANL A,#0FH CLR C
SUBB A,#0AH SUB1111: JC SUB1110 MOV @R0,#09H SUB110: MOV A,R3
INC R0
SWAP A
ANL A,#0FH
MOV @R0,A
RET
SUB11: MOV A,#59H
AJMP SUB111 SUB1110: MOV A,R3
ANL A,#0FH
MOV @R0,A
AJMP SUB110 SUBB1: MOV A,@R0
DEC R0
SWAP A
ORL A,@R0
JZ SUBB11 DEC A
SUBB111: MOV R3,A
ANL A,#0FH
CLR C
SUBB A,#0AH SUBB1111: JC SUBB1110 MOV @R0,#09H SUBB110: MOV A,R3
INC R0
SWAP A
ANL A,#0FH
MOV @R0,A
RET
SUBB11: MOV A,#23H
AJMP SUBB111 SUBB1110: MOV A,R3
ANL A,#0FH
MOV @R0,A
AJMP SUBB110 CLR0: CLR A
MOV @R0,A
DEC R0
MOV @R0,A
RET
SETMM: CLR ET0
CLR TR0
LCALL DL1S
LCALL DS20MS
JB ,CLOSEDIS MOV R2,#06H
MOV 70H,#00H
MOV 71H,#00H
SETB ET1
SETB TR1
SET2: JNB ,SET1
SETB 00H
SET4: JB ,SET3
LCALL DL05S
LCALL DS20MS
JNB ,SETHH
MOV R0,#77H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#60H,HHH HHH: JC SET4
LCALL CLR0
CLR C
AJMP SET4 CLOSEDIS:SETB ET0
SETB TR0 CLOSE: JB ,CLOSE
LCALL DS20MS
JB ,CLOSE
WAITH: JNB ,WAITH
LJMP START1 SETHH: CLR 00H
SETB 01H
SETHH1: JNB ,SET5
SET6: JB ,SET7
LCALL DL05S
LCALL DS20MS
JNB ,SETOUT
MOV R0,#79H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,HOUU HOUU: JC SET6
LCALL CLR0
AJMP SET6 SETOUT: JNB ,SETOUT1
LCALL DS20MS
JNB ,SETOUT
CLR 01H
CLR 00H
CLR 02H
CLR TR1
CLR ET1
SETB TR0
SETB ET0
LJMP START1
SET1: LCALL DISPLAY
AJMP SET2
SET3: LCALL DISPLAY
JNB ,FUNSUB
AJMP SET4
SET5: LCALL DISPLAY
AJMP SETHH1
SET7: LCALL DISPLAY
JNB ,FUNSUBB
AJMP SET6 SETOUT1:LCALL DISPLAY
AJMP SETOUT FUNSUB:LCALL DS20MS
JB ,SET41 FUNSUB1:JNB ,FUNSUB1
MOV R0,#77H
LJMP SET4
SET41: LJMP SET4
FUNSUBB:LCALL DS20MS
JB ,SET61
FUNSUBB1:JNB ,FUNSUBB1
MOV R0,#79H
LCALL SUBB1
LJMP SET6
SET61: LJMP SET6
DISPLAY: MOV R1,DISPFIRST
MOV R5,#0FEH
PLAY: MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P0,A
MOV A,R5
JB ,LOOP5
CLR
LOOP5: JB ,LOOP6
CLR
LOOP6: LCALL DL1MS
INC R1
MOV A,R5
JNB ,ENDOUT
RL A
MOV R5,A
MOV P0,#0FFH
AJMP PLAY
ENDOUT: MOV P2,#0FFH
MOV P0,#0FFH
RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H, DB 82H,0F8H,80H,90H,0FFH,88H,0BFH SDISPLAY:MOV R1,DISPFIRST
MOV R5,#0FEH
SPLAY: MOV A,R5
MOV P2,A
MOV A,@R1
MOV DPTR,#TABS
MOVC A,@A+DPTR
MOV P0,A
LCALL DL1MS
INC R1
MOV A,R5
JNB ,ENDOUTS
RL A
MOV R5,A
AJMP SPLAY
ENDOUTS:MOV P2,#0FFH
MOV P0,#0FFH
RET
TABS: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H DB 80H ,90H ,0FFH,0C6H,0BFH,88H
DL1MS: MOV R6,#14H
DL1: MOV R7,#19H
DL2: DJNZ R7,DL2
DJNZ R6,DL1
RET
DS20MS: CLR BELL
LCALL DISPLAY
LCALL DISPLAY
LCALL DISPLAY
SETB BELL
RET
DL1S: LCALL DL05S
LCALL DL05S
RET
DL05S: MOV R3,#20H
DL05S1: LCALL DISPLAY
DJNZ R3,DL05S1
RET
DAOJ: LCALL DS20MS
JB ,WAITSS1
DAOJ1: LCALL DISPLAY
JNB ,DAOJ1
DAOJ2: MOV 40H,#00H
MOV 41H,#00H
MOV 42H,52H
MOV 43H,53H
MOV 44H,54H
MOV 45H,55H
RETI1: MOV DISPFIRST,#40H
LCALL DISPLAY
JNB ,OOOO
LCALL DL1S
LCALL DL1S
MOV A,40H
CJNE A,#00H,TM1
MOV 40H,#9
MOV A,41H
CJNE A,#00H,TM2
MOV 41H,#5
MOV A,42H
CJNE A,#00H,TM3
MOV 42H,#9
MOV A,43H
CJNE A,#00H,TM4
MOV 43H,#5
MOV A,44H
CJNE A,#00H,TM5
MOV 44H,#9
MOV A,45H
CJNE A,#00H,TM6
CLR BELL
LCALL DL1S
LCALL DL1S
AJMP START2 TM1: DEC A
MOV 40H,A
AJMP RETI1
TM2: DEC A
MOV 41H,A
AJMP RETI1
TM3: DEC A
MOV 42H,A
AJMP RETI1
TM4: DEC A
MOV 43H,A
AJMP RETI1
TM5: DEC A
MOV 44H,A
AJMP RETI1
TM6: DEC A
MOV 45H,A
AJMP RETI1
WAITSS1:LJMP WAITSS DAOJJ: LJMP DAOJ DSSFUNN: LCALL DISPLAY
JNB ,DSSFUNN
MOV 50H,#0AH
MOV 51H,#0CH WAITSS: SETB EA
LCALL DISPLAY
JNB ,FFFF
JNB ,DAOJJ
JNB ,ENA
LJMP WAITSS OOOO: LCALL DS20MS
JB ,WAITSS DSSFUNNM: LCALL DISPLAY
JNB ,DSSFUNNM
MOV DISPFIRST,#70H LJMP START1
ENA: LCALL DS20MS
JB ,WAITSS DSSFUNMM0: LCALL DISPLAY
JNB ,DSSFUNMM0
CPL 05H
JNB 05H,WAITSS11
MOV 50H,#00H
AJMP WAITSS
WAITSS11: MOV 50H,#0AH
LJMP WAITSS
FFFF: LCALL DS20MS
JB ,WAITSS DSSFUNMM: LCALL DISPLAY
JNB ,DSSFUNMM
CLR EA
MOV R0,#55H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#24H,ADDHH33N ADDHH33N :JC WAITSS
LCALL CLR0
LJMP WAITSS
BAOJ: JNB 05H,BBAO
MOV A,79H
CJNE A,55H,BBAO
MOV A,78H
CLR C
BB3: CJNE A,54H,BBAO
CJNE A,53H,BBAO MOV A,76H
CLR C
BB2: CJNE A,52H,BBAO JNB 07H,BBAO
CLR BELL
RET
BBAO: SETB BELL
RET
START25 :LJMP START22 SETRR: JNB ,SETRR
SET22: JNB ,SET11
SET44: JB ,SET33
LCALL DL05S
LCALL DS20MS
JNB ,SETYY
MOV R0,#31H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#31H,RRR RRR: JC SET44
LCALL CLR0
CLR C
AJMP SET44 SETYY: JNB ,SET55
SET66: JB ,SET77
LCALL DL05S
LCALL DS20MS
JNB ,SETNN
MOV R0,#33H
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#12H,YYY YYY: JC SET66
LCALL CLR0
AJMP SET66 SETNN: JNB ,SET88
SET99: JB ,SET1010 LCALL DL05S
LCALL DS20MS
JNB ,SETOUTT
LCALL ADD1
MOV A,R3
CLR C
CJNE A,#99H,NIAN NIAN: JC SET99
LCALL CLR0
AJMP SET99 SETOUTT: JNB ,SETOUTT1 LCALL DS20MS
JNB ,SETOUTT LJMP START25 SET11: LCALL DISPLAY
AJMP SET22
SET33: LCALL DISPLAY
JNB ,FUNSUB22 AJMP SET44
SET55: LCALL DISPLAY
AJMP SETYY
SET77: LCALL DISPLAY
JNB ,FUNSUBB2 AJMP SET66 SET88: LCALL DISPLAY
AJMP SETNN SET1010: LCALL DISPLAY
JNB ,FUNSUBB3 AJMP SET99 SETOUTT1: LCALL DISPLAY
AJMP SETOUTT FUNSUB22: LCALL DS20MS
JB ,SET411 FUNSUB221: JNB ,FUNSUB221 MOV R0,#31H
LCALL SUB1
LJMP SET44
SET411: LJMP SET44 FUNSUBB2: LCALL DS20MS JB ,SET611 FUNSUBB21: JNB ,FUNSUBB21
MOV R0,#33H
LCALL SUBB1
LJMP SET66
SET611: LJMP SET66 FUNSUBB3: LCALL DS20MS
JB ,SET911 FUNSUBB31: JNB ,FUNSUBB31 MOV R0,#35H
LCALL SUBB1
LJMP SET99 SET911: LJMP SET99 END。

相关文档
最新文档