蜂鸣器常作为提示音,用于计算机、打印机、万用表等设备中。提示音一般很简单,能响就行。
某单片机的蜂鸣器原理图:
该单片机的CPU原理图:
下面这段程序用到了中断的算法,实现了蜂鸣器在4kHz和1kHz频率下的发声。
#include sbit Buzz = P0^7;//蜂鸣器控制引脚 unsigned char T0RH = 0;//T0重载值的高字节 unsigned char T0RL = 0;//T0重载值的低字节 void StartBuzz(unsigned int frequ); void StopBuzz(); void main() { unsigned int i; TMOD = 0X01;//设置定时器模式 EA = 1;//中断使能总开关 while(1) { StartBuzz(4000);//以4kHz启动蜂鸣器 for(i=0;i<40000;i++); StopBuzz(); //关闭蜂鸣器 for(i=0;i<40000;i++); StartBuzz(1000);//以1kHz启动蜂鸣器 for(i=0;i<40000;i++); StopBuzz(); //关闭蜂鸣器 for(i=0;i<40000;i++); } Buzz = 0; } //启动蜂鸣器,frequ指蜂鸣器工作频率 void StartBuzz(unsigned int frequ) { unsigned int reload;//计算所需的定时器重载值 reload = 65536- (11059200/12)/(frequ*2);//根据传入的形参frequ,计算定时器重载值 T0RH =(unsigned char)(reload>>8); //将16位的reload分成2个8位的数值,分别存入T0重载值的高位和低位 T0RL = (unsigned char)reload; TH0 = 0XFF; TL0 = 0XFE; ET0 = 1;//使能T0中断 TR0 = 1;//启动T0 } //关闭蜂鸣器 void StopBuzz() { ET0 = 0; //禁用T0中断 TR0 = 0; //关闭T0 } //中断服务函数,用于控制蜂鸣器发声 void InterrupteTimer0() interrupt 1 { TH0 = T0RH; //重新加载重载值 TL0 = T0RL; Buzz = ~Buzz;//反转蜂鸣器控制电平 }
上一篇:#51单片机#PWM
下一篇:#51单片机#中断实现按键消抖
推荐阅读最新更新时间:2024-11-08 12:24
设计资源 培训 开发板 精华推荐
- 51单片机 DOIT番茄钟 计时器
- 在系统 12 位 DAC 中解码多个 AD5324 器件的典型应用
- LTC2955 的典型应用 - 具有自动开启功能的按钮开/关控制器
- 半导体散热器——基于CH224K的PD诱骗模块
- STM32利用网口CH395传输数据源码及资料
- LT3091HT7 12V 至 ±3.3V 低噪声电源的典型应用
- “真正的”电容麦克风电路板
- 具有自动省电功能的 SC173 3A EcoSpeed 同步降压稳压器的典型应用
- AP330112V-3.5AEV1,基于AP3301 2V/3.5A通用交流输入准谐振反激转换器的评估板
- IS31FL3216、16通道LED驱动器的典型应用