按一下按键灯就亮,延时 10s 后自动灭。在亮灯期间再按一下键,灯立即就灭。
用定时器及中断实现。
LED EQU P3.3
KEY EQU P3.7
ORG 0000H
LJMP START
ORG 000BH
LJMP T0_INT
ORG 0030H
;--------------------------------
START:
MOV TMOD, #01H
MOV TH0, #HIGH(65536-62500)
MOV TL0, #LOW(65536-62500)
MOV IE, #82H
;--------------------------------
LP1:
SETB LED ;关灯
JB KEY, LP1 ;等待第一次按键
CALL DELAY
JB KEY, LP1
JNB KEY, $
;-------------------
MOV R2, #160 ;10s
SETB TR0 ;启动定时器
CLR LED ;开灯
LP2:
JNB TR0, LP1 ;如果已经定时结束,就去等待第一次按键
JB KEY, LP2 ;等待第二次按键
CALL DELAY
JB KEY, LP2
JNB KEY, $
SJMP LP1 ;如果发生了第二次按键,就去等待第一次按键
;--------------------------------
T0_INT:
MOV TH0, #HIGH(65536-62500)
MOV TL0, #LOW(65536-62500)
DJNZ R2, T0_E ;定时10s
CLR LED ;时间到了,关灯
CLR TR0
T0_E:
RETI
;--------------------------------
DELAY: ;延时约10ms(fosc=12MHz)
MOV R6, #20
DJNZ R7, $
DJNZ R6, $ - 2
RET
;--------------------------------
END