基于单片机的智能电子钟系统设计设计 - 图文 联系客服

发布时间 : 星期六 文章基于单片机的智能电子钟系统设计设计 - 图文更新完毕开始阅读cd475c5f2bf90242a8956bec0975f46527d3a7ed

ADJUST: MOV R3, #00H A1: LCALL DISPLAY MOV P1, #0FFH JNB P1.2, K3 JNB P1.1, K2 JNB P1.0, K1 JNB P1.3, K4

LJMP A1 ;如果没有键按下重新检测

;等待按键抬起来 J3: JB P1.2, A1 LCALL DISPLAY LJMP J3 J2: JB P1.1, A1 LCALL DISPLAY LJMP J2 J1: JB P1.0, A1 LCALL DISPLAY LJMP J1 J4: JB P1.3, A1 LCALL DISPLAY LJMP J4 K3: LCALL DELAY

JB P1.2, A1 ;确实有键按下,进入下面处理,否则严重干扰,重测 MOV A, @R1 ANL A, #0FH

CJNE A, #09H, M1 MOV A, @R1 ADD A, #10H ANL A, #0F0H MOV @R1, A JMP M2 M1: INC @R1 M2: LCALL DISPLAY

LJMP J3 ;等按键弹起来,按一次,只加一次 K2: LCALL DELAY JB P1.1, A1 MOV A, @R1

ANL A, #0FH JNZ NONBOUND MOV A, @R1 CLR C

SUBB A, #06H MOV @R1, A NONBOUND: DEC @R1 LCALL DISPLAY LJMP J2 K1: LCALL DELAY JB P1.0, A1 INC R3

CJNE R3, #01H, TWICE1 MOV R1, #30H JMP S1

TWICE1: CJNE R3, #02H, DONE MOV R1, #31H S1: LCALL DISPLAY LJMP J1 K4: LCALL DELAY JB P1.3, N1 JMP N2 N1: LJMP A1 N2: CLR TR0 SETB TR1 INC R3

CJNE R3, #01H, TWICE2 MOV R1, #30H JMP S2

TWICE2: CJNE R3, #02H, DONE MOV R1, #31H S2: LCALL DISPLAY LJMP J4

DONE: NOP RET

完了完了;

;

IT0P: PUSH Acc ;保护现场 PUSH PSW CLR EA MOV TH0, #3CH ;重新装入计数初值 MOV TL0, #0B0H

DJNZ 19H, HALF ;半秒 MOV 19H, #05H MOV A, 29H RL A MOV 29H, A

HALF: DJNZ 20H, RETURN ;1s还没有到,那么就返回继续计数100s MOV 20H, #0AH ;否则,重新装入中断次数计数值 MOV A, #01H ; ADD A, 32H ;秒单元增1

DA A ;将二进制的秒数转换成BCD码,以便显示 MOV 32H, A ;返回到秒单元保存

CJNE A, #60H, RETURN;如果不满60s,继续下一个1s的计时 MOV 32H, #00H ;否则,秒单元就要清零 MOV A, #01H ADD A, 31H ;针对分单元加1 DA A MOV 31H, A

CJNE A, #60H, RETURN;如果不满60分钟,则继续下一个1s的计数 MOV 31H, #00H ;否则分单元清零 MOV A, #02H ADD A, 30H ;针对时单元加1 DA A MOV 30H, A

CJNE A, #24H, RETURN;如果不满24小时,则继续计数,否则,全部清零

MOV 30H, #00H ;时单元清零 RETURN: SETB EA POP PSW POP Acc RETI

DISPLAY:;CLR EA PUSH Acc PUSH PSW PUSH 01H

LOOP0: DJNZ 18H, START

LJMP FINISH START: MOV DPTR, #0100H MOV C, (29H).7 ;29H的最高两位每隔半秒互调一次,只要不断调用显示程序,输出就会每隔半秒变化一次 MOV P3.7, C MOV C, (29H).6 MOV P3.6, C MOV A, #11H

CJNE A,30H,NEXT1 ;若是12小于小时数,则Cy被置位,否则清零 NEXT1: JC NIGHT ;C为0,是早上 SETB P3.0 ;6亮,绿灯 CLR P3.1 JMP MOON

NIGHT: SETB P3.1 ;C为1,是晚上 CLR P3.0 ;7亮,黄灯 MOON: NOP NOP

MOV 10H, #01H ;存放片选码 MOV R0, #30H ;寄存器间接寻址

SETB (21H).0 ;指示将要显示的是十位还是个位,1表示十位,0表示个位 LOOP1: MOV A, @R0 ;A中是待显示的两位数BCD码 JNB (21H).0,NEXT ;若将要显示个位则直接相与取位 SWAP A ;否则,十位与个位交换再取位 NEXT: CPL (21H).0 ;指示位取反,为下次显示做准备 ANL A, #0FH ;取得待显示的一位BCD码 MOVC A, @A+DPTR ;取得待显示段码 MOV P0, A ;准备显示 MOV P2, 10H ;片选,亮了 NOP NOP NOP MOV P0, #0FFH ;关闭数码管 MOV A, 10H

RL A ;为下次显示做准备 MOV 10H, A JNB (21H).0,LOOP1 ;若将显示个位,则R0不变 INC R0 ;否则,加一

CJNE R0,#33H,LOOP1 ;若刚才显示的是秒并且是个位,也就是显示结束,那么重新置数

AJMP LOOP0 ;否则,继续显示