电子时钟实验报告
MOV A,MINUTE ;显示当前时间分位 MOV B,#10 DIV AB MOVC A,@A+DPTR MOV P1,A CLR MIN_S ACALL D_1MS SETB MIN_S MOV A,B MOVC A,@A+DPTR MOV P1,A CLR MIN_G ACALL D_1MS SETB MIN_G
MOV A,HOUR ;MOV B,#10 DIV AB
MOV DPTR,#LEDTAB MOVC A,@A+DPTR MOV P1,A CLR HOU_S ACALL D_1MS SETB HOU_S MOV A,B MOVC A,@A+DPTR MOV P1,A CLR HOU_G ACALL D_1MS 显示当前时间时位 16
电子时钟实验报告
SETB HOU_G
MOV A,WEEK ;显示当前星期数 MOVC A,@A+DPTR MOV P1,A CLR Y_S ACALL D_1MS SETB Y_S OUT1: RET
日期的显示,秒表的显示,倒计时的显示,调闹铃,调定时的显示,闪烁的显示程序与以上的的扫描相似,有的以子程序的方式出现,通过子程序调用语句ACALL调用;有点直接嵌套在相应的程序里面,顺序执行,或者用调转语句AJMP调用。
B.2.5 调整程序
时钟包括很多调整,如时间,日期,闹铃,秒表等,本程序,设计了相应的调整程序段,通过对应的按键,程序跳入调整模式或功能模式。在此着重分析一下闹铃重响以及定时功能的实现过程,这两个功能都灵活运用了标志位。
1,定时功能运用了一个内存地址3CH为标志位,只有3CH中所存值非0时,在主程序中
才判断定时是否已到。3CH值初始化为0,程序开始运行时并不判断定时是否已到。当通过按键进入定时初值设置,并开始倒计时,3CH的值被赋为1,
当倒计时显示到0时,进入闪烁提示,提示结束后3CH又被赋值为0,程序回到主程序后,不必判断定时是否已到。
但当倒计时未完,按返回键回到主程序时,3CH的值为1,故在主程序判断未完成的定时任务,倒计时到0时调用同一个提示程序,最后仍可保证在主程序不再定时开启时去判断定时,从而节约资源。
17
电子时钟实验报告
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则表示此次闹铃调用为正常闹铃导致,因为重闹铃功能
18
电子时钟实验报告
开启,故将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
*****************************************************************
19