📄 时钟.txt
字号:
CURR_NUM_1 EQU 30H ;HEX
CURR_NUM_2 EQU 31H
CURR_NUM_3 EQU 32H
VAR_TIME EQU 33H ;soft timer
;***********************************************************
org 0000H
jmp MAIN
org 000BH
jmp interrupt_T0
;************************************************************
org 0030H
MAIN:
mov p0,#0FFH
mov p1,#0FFH
mov p2,#0FFH
mov P3,#0FFH
mov CURR_NUM_1,#39H
mov CURR_NUM_2,#39H
mov CURR_NUM_3,#16H
mov VAR_TIME,#00H
mov TMOD,#01H
mov TH0,#0B1H ;20ms,load number
mov TL0,#0E0H
setb TR0 ;start T0
setb ET0 ;Enable T0 interrupt
setb EA ;Enable interrupt
MAIN_LOOP:
jnb TF0,NEXT_LOOP ;if not oveflow,then refsh display
clr TF0 ;clear the tag of overflow
mov TH0,#0B1H
mov TL0,#0E0H
inc VAR_TIME ;add 20ms
/*if VAR_TIME=50,then time for 1s*/
mov a,VAR_TIME
cjne a,#50,NEXT_LOOP
mov VAR_TIME,#00H
call NUM_ADD
NEXT_LOOP:
call DISPLAY_NUM
jmp MAIN_LOOP
ret
;***********************************************************
interrupt_T0:
push acc ;pay attention to here
push psw
;jnb TF0,INT_T0_EXIT ;if not oveflow,then refsh display
;clr TF0 ;clear the tag of overflow
mov TH0,#0B1H
mov TL0,#0E0H
inc VAR_TIME ;add 20ms
/*if VAR_TIME=50,then time for 1s*/
mov a,VAR_TIME
cjne a,#50,INT_T0_EXIT
mov VAR_TIME,#00H
call NUM_ADD
INT_T0_EXIT:
pop psw
pop acc
reti
;**********************************************
DISPLAY_NUM:
;A<-A/B
mov a,CURR_NUM_1
mov b,#0AH
div ab
mov r0,a
;disply the low value
mov a,b
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a ;Display the number
mov p2,#11111011B
call DELAY_DISP
;Display the high value
mov a,r0
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#11110111B
call DELAY_DISP
;A<-A/B
mov a,CURR_NUM_2 ;CURR_NIM is the high 4
mov b,#0AH
div ab
mov r0,a
;disply the low value
mov a,b
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a ;Display the number
mov p2,#11101111B
call DELAY_DISP
;Display the high value
mov a,r0
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#11011111B
call DELAY_DISP
;A<-A/B
mov a,CURR_NUM_3 ;CURR_NIM is the high 4
mov b,#0AH
div ab
mov r0,a
;disply the low value
mov a,b
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a ;Display the number
mov p2,#10111111B
call DELAY_DISP
;Display the high value
mov a,r0
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#01111111B
call DELAY_DISP
ret
;***************************************************
NUM_ADD:
mov a,CURR_NUM_1
cjne a,#59,INC_NUM_1
mov CURR_NUM_1,#00H
mov a,CURR_NUM_2
cjne a,#59,INC_NUM_2
mov CURR_NUM_2,#00H
mov a,CURR_NUM_3
cjne a,#23,INC_NUM_3
mov CURR_NUM_3,#00H
jmp NUM_ADD_EXIT
INC_NUM_3:
inc CURR_NUM_3
jmp NUM_ADD_EXIT
INC_NUM_2:
inc CURR_NUM_2
jmp NUM_ADD_EXIT
INC_NUM_1:
inc CURR_NUM_1
jmp NUM_ADD_EXIT
NUM_ADD_EXIT:
ret
;*************************************************************
DELAY_DISP:
mov R7,#5
DELAY_DISP_LOOP:
mov R6,#150
djnz R6,$
mov R6,#200
djnz R6,$
djnz R7,DELAY_DISP_LOOP
ret
;******************************************************
TAB_LED: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
;**********************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -