1、利用定时器控制蜂鸣器发出模拟的“叮咚”门铃声。
在实际的门铃声音中,“叮”的声音较短并且声音比较大,我们可以让蜂鸣器发出频率较高、时间较短的声音。
“咚”的声音较长并且声音比较舒缓,我们可以让蜂鸣器以较低的频率鸣叫,鸣叫的声音适当加长。
2、利用定时器实现,定时器初始定时700us,利用按键控制蜂鸣器,当按下按键后,启动定时器开始工作,在前400次定时器中断触发时,都是700us的时间间隔,模拟“叮”的声音,在后面400次中断中,定时器延时1ms。模拟“咚”的声音。
我们可以试着改变定时器的定时周期,让蜂鸣器发出不同长度和音量的声音。
3、在keil c51中新建工程ex74,编写如下程序代码,编译并生成ex74.hex文件
//简易门铃声音演示实例
#include <reg51.h> //寄存器头文件包含
//引脚定义,分别定义按键和蜂鸣器的引脚
sbit KEY = P1^7;
sbit SOUNDER = P3^0;
//全局变量定义,定义定时中断溢出次数
unsigned char counter;
//主函数
void main(void)
{
//IE = 0x82;
TMOD = 0x00; //定时器0工作在模式0
TH0 = (8192 - 700) / 32; //定时器赋初值
TL0 = (8192 - 700) % 32;
EA = 1; //开总中断
ET0 = 1; //开定时器0定时溢出中断
SOUNDER = 0;
while(1)
{
if(KEY == 0)//判断按键按下
{
TR0 = 1; //开启定时器
while(KEY == 0); //等待按键松开,
}
}
}
//定时器0的定时中断函数
void Timer0(void) interrupt 1
{
SOUNDER = ~SOUNDER;//蜂鸣器输出电平取反
counter++;//中断发生次数加1
//中断发生次数小于400,发出“叮”的模拟音
if(counter < 400)
{
TH0 = (8192 - 700) / 32;
TL0 = (8192 - 700) % 32;
}
//中断发生次数大于于400,但是小于800,发出“咚”的模拟音
else if (counter < 800) //
{
TH0 = (8192 - 1000) / 32;
TL0 = (8192 - 1000) % 32;
}
else//完成一次门铃发音
{
TR0 = 0;//关闭定时器
counter = 0;//中断次数清0
}
}
4、在proteus中新建仿真文件ex74.dsn,电路原理图如下所示
5、将ex74.hex文件载入at89c51中,启动仿真,观察运行结果。如下图,按动按键,蜂鸣器即可发出声音,在电脑上接上音箱,,就能听到声音。我们可以改变定时器的定时处置和中断次数来改变蜂鸣器的声音。
为了方便大家更好的学习,您还可以关注畅学电子和EDA的公众号,每天推送相关知识,希望能对你的学习有所帮助!