KEYUP: MOV R6,2CH ;键值处理,判断键值暂存单元是否为0
CJNE R6, #0,HH ;不为0则转至HH处理 LJMP MM ;为0则返回
HH: MOV 2CH,#0 ;不为0,存有键值,则进行键值处理,处理后清0
MOV A,R6 ORL A,#80H CPL A
JZ MM ;判断是否有键按下,没有则返回 MOV A,R6
JNB ACC.0, LL0 ;有键按下,是否是P1.0位,如P1.0位为0,则其按下,转去LL0调整被校位数
JNB ACC.1,XDYJIA1 ;如P1.0没按下,判断P1.1是否按下,是,则转去XDYJIA1使被校位加1
LJMP MM ;P1.0和P1.1没按下则返回 LL0: MOV A,WEISHU ;被校位数调整 INC A
MOV WEISHU,A
CLR C ;判断被校位数是否小于等于4 SUBB A,#5
JC MM ;是,则返回
CLR 23H.0 ;被校位数达到5,则退出校时 CLR ET0 ;关闭T0中断 CLR TR0 ;关闭T0
SETB EX1 ;开INT1,恢复1秒1次的中断 LCALL HF1 ;调用HF1,将校后的时间存回DS12C887
LJMP END1 ;中断返回
MM: MOV A,20H ;以下判断T0中断是否到5次 INC A MOV 20H,A
CJNE A,#5,END1 ;不等于5,则返回 MOV A,#0 ;等于5,中断次数清0, mov 20h,a
LCALL DISP1 ;调被校位闪耀显示子程序 END1: CLR RS0 ;恢复现场 POP PSW POP ACC SETB EA
RETI ;中断返回
XDYJIA1: SETB RS1 ;被校位加1处理 SETB RS0 ;选择3寄存器区 MOV A,WEISHU ;被校位数送A ADD A,#2FH ;得到被校位地址 MOV R0,A ;被校位地址存入R0 MOV A,WEISHU ;被校位数送A
ADD A,#3FH ;得到被校位的最大数存放地址 MOV R1,A ;被校位的最大允许数存放地址存入R1
MOV A,@R0 ;取出被校位数据送A CLR C ;判断其是否达到其最大允许数 SUBB A,@R1
JNC BACK ;达到,则转至BACK,回0 MOV A,@R0 ;没达到,则加1 INC A MOV @R0,A LJMP PP1
BACK: MOV @R0,#0 ;被校位回0
PP1: MOV A,HOUR1 ;小时位不能大于等于24,因此如下判断:判断小时的高位是否为2
CJNE A,#2,PP ;不为2,则转至PP送显示后中断返回 CLR C ;为2,则判断小时低位是否小于等于3 MOV A,HOUR2 SUBB A,#4
JC PP ;小于等于3则转至PP送显示后中断返回 MOV HOUR1,#0 ;否则小时的高低位都回0 MOV HOUR2,#0
PP: CLR RS1 ;选择0寄存器区 CLR RS0
LCALL DISP ;显示加1后结果 LJMP END1 ;中断返回
DISP1: CPL 22H.0 ;被校位闪耀显示子程序:闪耀标志取反 JB 22H.0,MM2 ;闪耀标志为1,转至MM2送亮,闪耀标志为0,送黑
MOV A,WEISHU ;被校位数送A ADD A,#2FH ;得到被校位地址 MOV R0,A ;被校位地址存入R0 MOV 25H,@R0 ;被校位数据暂存入25H MOV @R0,#0AH ;使被校位数据变为0AH,通过查TAB表,
LCALL DISP ;送显示,调用显示子程序时,通过查TAB表得到0AH的字形码为FFH,使被校位黑
MOV @R0,25H ;被校位显示黑后,从25H取回原来数据
SJMP OVER1 ;返回
MM2: LCALL DISP ;闪耀标志为1,显示亮 OVER1: RET ;返回
HF1: PUSH ACC ;将CPU中30H到33H的数据送入DS12887子程序
PUSH PSW PUSH DPL
MOV DPTR,#0004H MOV R1,#30H LCALL SRSZ1 DEC DPL DEC DPL INC R1 LCALL SRSZ1
POP DPL POP PSW POP ACC
RET SRSZ1: PUSH ACC DS12C887子程序
PUSH PSW MOV A,@R1 SWAP A INC R1 ADD A,@R1 MOVX @DPTR,A POP PSW POP ACC
;DS12C887中小时存放单元 ;CPU中小时高位存放单元 ;恢复现场 ;返回
;从CPU中输出一个字节到 RET ;返回
DEL10mS: MOV R5,#0AH ;10mS延时子程序 LL: MOV R6,#0ffH LL1: NOP NOP
DJNZ R6,LL1 DJNZ R5,LL RET
END ;程序结束 六、设计收获
通过这次实验,使我对AT89C51芯片、时钟日历芯片DS12887的功能有了深刻的了解。在实践过程中,充分锻炼了我的自学能力,分析问题能力以及解决问题的能力,更使我对专业基础知识有了更深的理解。总之,此次课程设计使我受益匪浅。

