;程序功能:上电的时候,L1接在P1.0管脚上的发光二极管在闪烁,
;当第一次按下开关K1的时候,L2接在P1.1管脚上的发光二极管在闪烁,
;第二次按下开关K1的时候,L3接在P1.2管脚上的发光二极管在闪烁,
;第三次按下开关K1的时候,L4接在P1.3管脚上的发光二极管在闪烁,
;第四次按下开关K1的时候,又轮到L1在闪烁了,
;----------------程序初始化---------------------
DEDA EQU 31H
ID EQU 30H
K1 BIT P3.4
L1 BIT P1.0
L2 BIT P1.1
L3 BIT P1.2
L4 BIT P1.3
ORG 0H
JMP MAIN
ORG 0BH ; Timer 0中断向量地址
JMP TO_SRV
;-------------------主程序----------------------
MAIN:
MOV ID,#0
MOV DEDA,#0
CALL INIT_TIMER
START: JB K1,REL
CALL DELAY10MS
JB K1,REL
INC ID
MOV R1,ID
CJNE R1,#4,REL
MOV ID,#0
REL: JNB K1,$
MOV R1,ID
CJNE R1,#0,IS0
SETB L4
MOV A,DEDA
CJNE A,#0,IS3
CPL L1
JMP START
IS0: CJNE R1,#01H,IS1
SETB L1
MOV A,DEDA
CJNE A,#0,IS3
CPL L2
JMP START
IS1: CJNE R1,#2,IS2
SETB L2
MOV A,DEDA
CJNE A,#0,IS3
CPL L3
JMP START
IS2: CJNE R1,#3,IS3
SETB L3
MOV A,DEDA
CJNE A,#0,IS3
CPL L4
JMP START
IS3: JMP START
;-------------消抖延时-------------------------
DELAY10MS: MOV R6,#20
LOOP1: MOV R7,#248
DJNZ R7,$
DJNZ R6,LOOP1
RET
;-------------定时中断模块----------------------
INIT_TIMER:
MOV TMOD,#00000000B
SETB EA
SETB ET0
MOV TL0,#(8192-5000)MOD 32
MOV TH0,#(8192-5000)/32
SETB TR0
RET
;---------------中断服务程序----------------------
TO_SRV:
MOV TL0,#(8192-5000)MOD 32
MOV TH0,#(8192-5000)/32
INC DEDA
MOV R2,DEDA
CJNE R2,#40,TT1
MOV DEDA,#0
TT1:
RETI
END |