#电子时钟设计(完美实现最终版) 下载本文

当倒计时显示到0时,进入闪烁提示,提示结束后3CH又被赋值为0,程序回到主程序后,不必判断定时是否已到。

但当倒计时未完,按返回键回到主程序时,3CH的值为1,故在主程序判断未完成的定时任务,倒计时到0时调用同一个提示程序,最后仍可保证在主程序不再定时开启时去判断定时,从而节约资源。

2,重闹铃的精髓也是标志位的设计,以F0为标志位,其初值为0,正常响铃时判断重

响功能键,若重响功能关闭,则跳过重响设定程序;若重响功能开启,则判断标志位F0,为了更好的说明,将相关程序截取如下:

//闹铃重响功能是否判断// JNB P0.6,RERING //重响定时,//

RERING: ;闹铃重响判断程序

JNB F0, RE ;标志位F0为0,不进行闹铃重响设定 CPL F0

MOV 3CH,#1 ;定时判断标志位赋1, 定时判断功能开启

JNB P0.7,M1 ;闹铃重响间隔时间选取 MOV R4,#0 ;闹铃重响间隔30秒 MOV R3,#30 AJMP MAIN

M1: ;闹铃重响间隔60秒 MOV R4,#1 MOV R3,#0 AJMP MAIN

JB P2.7,GO ;判断暂停键是否按下,未按下则响铃

JNB P0.6,GO1 ; 音乐暂停键,再判断闹铃重响功能是否开启 AJMP END0

GO1: ;闹铃重响功能开启处理程序

JB F0,GO ;重响标志位判断,若F0为1,表明此次响铃调用为重闹铃导致,进入重闹铃环节;若F0为0则表示此次闹铃调用为正常闹铃导致,因为重闹铃功能

开启,故将F0置1,以便重闹铃的实现!

CPL F0 AJMP END0

通过以上程序可知,闹铃初次响时,标志位F0总是0,若重响功能开启,则在初次闹铃自然结束或人为按键结束后通过CPL F0 语句,使F0置1,为重响时间间隔的设置提供条件。当F0值为1时,才能在闹铃功能关闭的情况下重闹铃,重闹铃不像正常闹铃那样,即使没有人为关闭,音乐唱完后,自动回到主程序,而是一直再响,若要关闭重闹铃,则拨动重闹铃开启开关即可。重闹铃结束后回到调用闹铃的位置,用CLR F0 使标志位复位,至此一个重闹铃循环结束。又回到初次闹铃前的状态。若要重响开启重闹铃,则需再次开启重闹铃功能。

******************************************************************************* JNB P0.6,SHENGYIN2 ;闹铃重响功能开启时,跳入响铃程序

AJMP TISHI ;不是闹铃重响定时,则定时时间到时,跳入提示程序 AJMP MAIN

SHENGYIN2:

SETB F0 ;闹铃重响标志位设定 LCALL RING ;响铃 CLR F0 ;标志位复位 AJMP MAIN

以上程序段可以区别正常定时和重闹铃定时,通过若重闹铃功能选择键按下,则定时,时间到通过一直响铃来提示;若重闹铃功能关闭则定时到用闪烁来提示。我们不难发现重闹铃开关也可作为定时在主程序中判断时,不同提示方式的选择开关,我们不会影响重闹铃标志位,因为在闹铃子程序调用语句后有F0标志位的清零语句:CLR F0

*****************************************************************

C. 程序调试及仿真

本程序通过Keil单片机开发平台实现程序的编译,链接,生成HEX文件。程序再编译过程中可以发现错位,并及时改正,在设计时非常重要,使错误被扼杀在摇篮中。

通过Keil和硬件仿真平台Proteus的联合,可以将设计效果仿真出来,根据效果,有目

的的改变设计,优化程序。

c.1 利用Keil软件实验过程截图:

1,建一个工程,并设定与Proteus仿真相关的参数

2,汇编程序,并生成HEX文件

c.2利用Proteus仿真实验过程截图:

1.普通时间显示模式仿真图,表示:星期一 9点10分38秒

2.日期调节,显示模式仿真图,表示:2010年7月10日

3.闹铃调节显示仿真图,表示闹铃时刻为8点整

4.定时,倒计时显示仿真图,表示此时定时初值已经减到54秒,及还有54秒定时到。定时最大值为59分59秒。