当倒计时显示到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秒。