📄 door bell.asm
字号:
KEY BIT P1.7
LCNT EQU 30H
HCNT EQU 31H
FLAG EQU 33H ;计数标志
ORG 00H
SJMP START
ORG 0BH ;中断入口
LJMP INT_T0
START: MOV LCNT,#00H
MOV HCNT,#00H
CLR FLAG
MOV TMOD,#01H
MOV TH0,#(65536-700)/256 ;定时0.7毫秒
MOV TL0,#(65536-700)MOD 256
S1: JB KEY,$ ;等待按键
LCALL DELAY
JB KEY,$
MOV IE,#82H
SETB TR0
SJMP S1
INT_T0: INC LCNT
MOV A,LCNT
CJNE A,#100,I1
MOV LCNT,#00H
INC HCNT
MOV A,HCNT
CJNE A,#05H,I1 ;输出500个周期方波
MOV HCNT,#00H
INC FLAG ;计数标志加1
I1: CPL P1.0
MOV A,FLAG
CJNE A,#00H,I2
LJMP K1 ;FLAG=0,发高频音
I2: MOV A,FLAG
CJNE A,#01H,I3
LJMP K2 ;FLAG=1,发低频音
I3: MOV A,FLAG
CJNE A,#02H,I1
MOV FLAG,#00H
CLR TR0 ;FLAG=2,关定时器
LJMP RETUNE
K1: MOV TH0,#(65536-700)/256 ;高频音
MOV TL0,#(65536-700)MOD 256
LJMP RETUNE
K2: MOV TH0,#(65536-1000)/256 ;低频音
MOV TL0,#(65536-1000)MOD 256
RETUNE: RETI
DELAY: MOV R5,#20
D1: MOV R6,#250
DJNZ R6,$
DJNZ R5,D1
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -