蜂鸣器电路图
![](https://i-blog.csdnimg.cn/blog_migrate/cc409dff1203739fe16cf1cd7344fabf.png)
实现蜂鸣器以不同频率鸣叫,代码:
#include <reg52.h>
sbit BUZZ = P1^6;
unsigned char THR0,TLR0;
void OpenBuzz(unsigned int frequ);
void StopBuzz();
void main()
{
unsigned int i = 0;
EA = 1; //使能总中断
TMOD = TMOD & 0xF0;
TMOD = TMOD | 0x01; //设置定时器模式1 ,不影响高四位
while(1)
{
OpenBuzz(4000); //以4khz频率启动蜂鸣器
for(i=0;i<40000;i++);
OpenBuzz(1000); //以1khz频率启动蜂鸣器
for(i=0;i<40000;i++);
StopBuzz(); //停止蜂鸣器
for(i=0;i<40000;i++);
}
}
void OpenBuzz(unsigned int frequ)
{
unsigned int reload;
reload = 65536-(11059200/12)/(frequ/2); //设定频率为frequ,一个周期内分高低电平,所以还要再除以2
THR0=(unsigned char)(reload>>8);
TLR0=(unsigned char)reload;
TH0=0xff;
TL0=0xfe; //给一个接近溢出的值,以便尽快进入中断服务函数
ET0=1; //打开定时器0中断
TR0=1; //启动定时器0
}
void StopBuzz()
{
ET0=0;
TR0=0;
}
void InterruptTimer0() interrupt 1
{
TH0=THR0;
TL0=TLR0;
BUZZ = ~BUZZ;
}