📄 未用中断的红绿灯.txt
字号:
CURR_NUM EQU 30H
VAR_TIME EQU 31H
VAR_LED EQU 32H
org 0000H
jmp MAIN
;*******************************************************
org 0030H ;start program from 0030H
MAIN:
mov p0,#0FFH ;shutdown all led
mov p1,#0FFH
mov p2,#0FFH
mov p3,#0FFH
mov CURR_NUM,#15
mov VAR_TIME,#00H
mov VAR_LED,#03FH
mov p1,VAR_LED ;right the L1,L2
mov TMOD,#01H
mov TH0,#0B1H ;20ms,load number
mov TL0,#0E0H
setb TR0 ;start T0
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_SUB
NEXT_LOOP:
call DISPLAY_NUM
jmp MAIN_LOOP
ret
;**********************************************
DISPLAY_NUM:
;a <-a/b
mov a,CURR_NUM
mov b,#0AH
div ab
mov r0,a
mov a,b
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a ;Display the number
mov p2,#11110111B
call DELAY_DISP
;Display the high value
mov a,r0
mov dptr,#TAB_LED
movc a,@a+dptr
mov p0,a
mov p2,#11101111B
call DELAY_DISP
ret
;*********************************************
NUM_SUB:
mov a,CURR_NUM
jz NUM_SUB_RESET
NUM_SUB_1:
dec CURR_NUM
jmp NUM_SUB_TEXT
NUM_SUB_RESET:
mov CURR_NUM,#15
call CHANGE_LED
NUM_SUB_TEXT:
ret
;*************************************************************
CHANGE_LED:
mov a,VAR_LED
cjne a,#03FH,TO_RED_LED
mov VAR_LED,#0CFH
jmp CHANGE_LED_EXIT
TO_RED_LED:
mov VAR_LED,#03FH
CHANGE_LED_EXIT:
mov p1,VAR_LED
ret
;*******************************************************
DELAY_DISP:
mov R7,#10
DELAY_DISP_LOOP:
mov R6,#200
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 + -