单片机课程设计 - 基于AT89C51的数字钟的设计 (4)

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的功能有了深刻的了解。在实践过程中,充分锻炼了我的自学能力,分析问题能力以及解决问题的能力,更使我对专业基础知识有了更深的理解。总之,此次课程设计使我受益匪浅。


单片机课程设计 - 基于AT89C51的数字钟的设计 (4).doc 将本文的Word文档下载到电脑

下一篇:全球各地已开始运营的LTE 频段 - 图文

相关推荐
相关阅读
本类排行
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 7

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xxxxxx QQ:xxxxxx