单片机接口扩展使用的用途广泛,如果可以在接口上直接放置发声元件,直接通过单片机输入编制的程序,即可以完成门铃声、报警、播放器等功能。
1 硬件设计
使用单片机的定时/计数器T0来产生高频音和低频音信号,发出的高频音持续0.35s,发出的低频音持续0.5s,当按下按键KEY时,启动定时器,单片机发出“叮咚”声,从P1.0口输出到放大电路,经过放大后送入扬声器。按照表8-1所示的元器件清单添加元器件,编辑完成后按照如图8-1所示的原理图连接硬件电路。
表8-1 元器件清单(门铃声)
2 程序设计
设置定时器定时0.7s,FLAG=0时装入高频音计数值,FLAG=1时装入低频音计数值,FLAG清0则关闭定时器。程序清单如下。
KEY BIT P1.7;变量KEY指向P1.7口,按钮状态
图8-1 门铃声原理图
LCNT EQU 30H;低频计数器
HCNT EQU 31H;高频计数器
FLAG EQU 33H;计数标志
ORG 0000H
SJMP START
ORG 0BH;定时中断入口
LJMP INT_T0
START:MOV LCNT,#00H;LCNT=00H
MOV HCNT,#00H;HCNT=00H
CLR FLAG;清0计数标志
MOV TMOD,#01H;T0作定时器,方式1
MOV TH0,#(65536-700)/256;定时0.7ms,装入计数初始值FD44H
MOV TL0,#(65536-700)MOD 256
KEYCHK:JB KEY,$;判断按钮是否按下
LCALL DELAY
JNB KEY,$
MOV IE,#82H;开中断
SETB TR0;启动Timer
SJMP KEYCHK;循环判断按钮
INT_T0: ;T0中断服务子程序
INC LCNT;LCNT增加1
MOV A,LCNT;计数值载入累加器A中
CJNE A,#100,I1;判断是否等于100(www.xing528.com)
MOV LCNT,#00H;LCNT清0
INC HCNT;HCNT增加1
MOV A,HCNT;计数值载入累加器A中
CJNE A,#05H,I1;判断是否输出500个方波
MOV HCNT,#00H;HCNT清0
INC FLAG;计数标志加1
I1:CPL P1.0;P1.0口相反,电平跳变
MOV A,FLAG;A=FLAG
CJNE A,#00H,I2;判断A是否等于0
LJMP K1;如果FLAG=0发高频音
I2:MOV A,FLAG;A=FLAG
CJNE A,#01H,I3;判断A是否等于1
LJMP K2;FLAG=1时,发低频音
I3:MOV A,FLAG;A=FLAG
CJNE A,#02H,I1;判断A是否等于2
MOV FLAG,#00H;FLAG清0
CLR TR0;关定时器
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
在Keil μVision3中新建项目,选择AT89C51,在汇编源文件中编写程序导入项目,编译汇编源文件,调试程序。在Proteus ISIS中,选中AT89C51属性对话框,设置单片机晶振频率为12MHz,选择Keil生成的.HEX文件,进行联合调试。顺利运行程序后,可听见“叮咚”门铃声。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。