- /*************************************************
- *文件名:电子时钟
- *说 明:通过T0方式1定时时时更新,晶振:6MHZ
- *************************************************/
- ORG 0000H
- AJMP MAIN
- ORG 000BH
- AJMP IT0P
- ORG 0100H
- MAIN: MOV DPTR,#TAB
- MOV TMOD,#01H ;设T0为方式一,定时
- MOV 30H,#0AH ;装入中断次数
- MOV 42H,#55 ;显示55秒位
- MOV 41H,#59 ;显示59分位
- MOV 40H,#23 ;显示23时位
- MOV TH0,#3CH ;给T0装入初值
- MOV TL0,#0B0H
- SETB ET0 ;允许T0申请中断
- SETB TR0 ;启动T0
- SETB EA ;开总中断
- HERE: MOV R3,42H ;调显示子程序(等待中断)
- MOV R2,#00
- ACALL DISPLAY
- MOV R3,41H
- MOV R2,#02
- ACALL DISPLAY
- MOV R3,40H
- MOV R2,#04
- ACALL DISPLAY
- AJMP HERE
- ;******1S定时子程序(并显示)******
- IT0P: PUSH PSW ;现场保护
- PUSH Acc
- MOV TH0,#3CH ;重装初值
- MOV TL0,#0B0H
- DJNZ 30H,RETURN ;1秒未到,返回
- MOV 30H,#0AH ;重置中断次数
- ;******显示秒*********
- MOV A,42H ;"秒"单元加1
- INC A
- MOV 42H,A ;“秒”的BCD码返回“秒”单元
- CJNE A,#60,RETURN ;是否到60秒,未到则返回
- MOV 42H,#00H ;计满60秒,“秒”单元清零
- ;******显示分*********
- MOV A,41H ;"分"单元加1
- INC A
- MOV 41H,A ;“分”的BCD码返回“分”单元
- CJNE A,#60,RETURN ;是否到60分,未到则返回
- MOV 41H,#00H ;计满60分,“分”单元清零
- ;******显示时*********
- MOV A,40H ;"时"单元加1
- INC A
- MOV 40H,A ;“时”的BCD码返回“时”单元
- CJNE A,#24,RETURN ;是否到24小时,未到则返回
- MOV 40H,#00H ;计满24小时,“时”单元清零
- RETURN: POP Acc ;恢复现场
- POP PSW
- RETI
- ;******显示子程序(分两屏显示)******
- DISPLAY:MOV A,R3 ;R3存要显示的两位数字
- MOV B,#0AH
- MOV P2,R2
- DIV AB ;A为商,表十位;B为余数,表个位
- MOV R3,A
- MOV A,B ;显示个位
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELY
- INC R2 ;显示十位
- MOV P2,R2
- MOV A,R3
- MOVC A,@A+DPTR
- MOV P0,A
- ACALL DELY
- RET
- ;******延时0.5MS子程序******
- DELY: MOV R7,#10
- DEL1: MOV R6,#100
- DJNZ R6,$
- DJNZ R7,DEL1 ;(100*2+2+1)*10+2+1
- RET
- TAB: DB 3FH,06H,5BH,4FH,66H ;七段共阴显示码
- DB 6DH,7DH,07H,7FH,6FH,3FH
- END
复制代码 全部资料51hei下载地址:
电子时钟.zip
(182.92 KB, 下载次数: 27)
|