是一个简单的门铃程序,按下按键,然后门铃“叮咚”响一次,数码管显示对应的数字。现在的情况是,数码管显示对应的数字,但是门铃“叮咚”响之后一直发“咚”音,停不下来了。下面是对应的仿真图和程序,哪位大佬帮我看一看。
程序
KEY BIT P1.4
LCNT EQU 30H
HCNT EQU 31H
FLAG EQU 33H
ORG 0000H
LJMP MAIN
ORG 000BH
JMP INT_T0
ORG 1000H
MAIN: MOV LCNT,#00H
MOV HCNT,#00H
CLR FLAG
MOV TMOD,#01H
MOV TH0,#HIGH(65536-700)
MOV TL0,#LOW(65536-700)
MOV R1,#0C0H
MOV A,R1
MOV P0,A
MOV R2,#00H
LCALL SAOMIAO
SAOMIAO:JNB P1.0,YH1
JNB P1.1,YH2
JNB P1.2,YH3
JNB P1.3,YH4
YH1: LCALL DELAY
JNB P1.0,YH11
JMP RETURN2
YH11: MOV R1,#01H
MOV R2,#01H
LCALL XIANSH1
JMP RETURN2
YH2: LCALL DELAY
JNB P1.1,YH22
JMP RETURN2
YH22: MOV R1,#02H
MOV R2,#01H
LCALL XIANSH1
JMP RETURN2
YH3: LCALL DELAY
JNB P1.2,YH33
JMP RETURN2
YH33: MOV R1,#03H
MOV R2,#01H
LCALL XIANSH1
JMP RETURN2
YH4: LCALL DELAY
JNB P1.3,YH44
JMP RETURN2
YH44: MOV R1,#04H
MOV R2,#01H
LCALL XIANSH1
JMP RETURN2
XIANSH1:SETB P2.0
MOV A,R1
MOV DPTR,#SEGTAB
MOVC A,@A+DPTR
MOV P0,A
CLR P2.0
LJMP KEYCHK
RET
RETURN2:RET
KEYCHK: CJNE R2,#01H,STAR
CALL DELAY
MOV IE,#82H
SETB TR0
JMP KEYCHK
STAR: JMP MAIN
INT_T0: INC LCNT
MOV A,LCNT
CJNE A,#100,I1
MOV LCNT,#00H
INC HCNT
MOV A,HCNT
CJNE A,#05H,I1
MOV HCNT,#00H
INC FLAG
I1: CPL P3.0
MOV A,FLAG
CJNE A,#00H,I2
JMP K1
I2: MOV A,FLAG
CJNE A,#01H,I3
JMP K2
I3: MOV A,FLAG
CJNE A,#02H,I1
MOV FLAG,#00H
CLR TR0
CLR TR0
MOV R2,#00H
JMP RETUNE
K1: MOV TH0,#HIGH(65536-700)
MOV TL0,#LOW(65536-700)
JMP RETUNE
K2: MOV TH0,#HIGH(65536-1000)
MOV TL0,#LOW(65536-1000)
RETUNE: RETI
SEGTAB: DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
DELAY: MOV R6,#20
D1: MOV R5,#248
D2: DJNZ R5,D2
DJNZ R6,D1
RET
END
汇编太强大了,如果我一开始学的是汇编,我相信我坚持不下来