📄 door_ring.asm
字号:
;/********************************************************************
; * 主 页 : HTTP://WWW.QLMCU.COM
; *
; * 程序功能 : “叮咚”门铃
; *
; * 应用软件 : KEIL C
; *
; * 版 本 : KEIL 7.06
; *
; * 硬 件 : WS803、WS804、WS806
; *
; * 创建时间 : 2005-07-28
; *
; * 程序整理 : benladn911
; *
; * 注:为了有更多实用的实验程序供大家学习,部分程序参考网上的资源,
; * 在此谢谢这些无私奉献的朋友!!!
; *
; ********************************************************************/
;/* 程序详细功能介绍:
; *当按下按键P3.3 ,AT89S51单片机产生“叮咚”声从P3.2端口输出
; *程序设计方法
; * 1. 我们用单片机实定时/计数器T0来产生700HZ和500HZ的频率,根据定时/计数器T0,我们取定时250us,
; * 因此,700HZ的频率要经过3次250us的定时,而500HZ的频率要经过4次250us的定时。
; * 2. 在设计过程,只有当按下SP1之后,才启动T0开始工作,当T0工作完毕,回到最初状态。
; * 3. “叮”和“咚”声音各占用0.5秒,因此定时/计数器T0要完成0.5秒的定时,对于以250us为基准定时2000次才可以。
; */
T5HZ EQU 30H ;内存定义
T7HZ EQU 31H
T05SA EQU 32H
T05SB EQU 33H
FLAG BIT 00H
STOP BIT 01H
SP1 BIT P3.3 ;按键定义
ORG 0000H
LJMP START
ORG 000BH
LJMP INT_T0
ORG 0100H
START: MOV TMOD,#02H
MOV TH0,#06H
MOV TL0,#06H
SETB ET0
SETB EA
NSP: JB SP1,NSP
LCALL DELY10MS
JB SP1,NSP
SETB TR0
MOV T5HZ,#00H
MOV T7HZ,#00H
MOV T05SA,#00H
MOV T05SB,#00H
CLR FLAG
CLR STOP
JNB STOP,$
LJMP NSP
DELY10MS: MOV R6,#20 ; 10MS延时子程序
D1: MOV R7,#248
DJNZ R7,$
DJNZ R6,D1
RET
INT_T0: INC T05SA
MOV A,T05SA
CJNE A,#100,NEXT
MOV T05SA,#00H
INC T05SB
MOV A,T05SB
CJNE A,#20,NEXT
MOV T05SB,#00H
JB FLAG,STP
CPL FLAG
LJMP NEXT
STP: SETB STOP
CLR TR0
LJMP DONE
NEXT: JB FLAG,S5HZ
INC T7HZ
MOV A,T7HZ
CJNE A,#03H,DONE
MOV T7HZ,#00H
CPL P3.2
LJMP DONE
S5HZ: INC T5HZ
MOV A,T5HZ
CJNE A,#04H,DONE
MOV T5HZ,#00H
CPL P3.2
LJMP DONE
DONE: RETI
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -