蜂鸣器类别
蜂鸣器分为有源和无源的。注意,这里的“源”不是指电源。而是指震荡源。 也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源蜂鸣器内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它。 无源蜂鸣器的优点是:1。便宜,2。声音频率可控3。在一些特例中,可以和LED复用一个控制口 ;有源蜂鸣器的优点是:程序控制方便 。
如何区分两种蜂鸣器
看蜂鸣器的底部,如果有可以看到一小块的电路板,那就是有源的,如果看到的是封装完整的底部,就是无源的。
蜂鸣器使用
通过给一定频率的高低电平来实现发声,占空比来控制声音大小,频率实现音调大小。(但这是适用于无源蜂鸣器)
代码实现
因为是单片机的管脚直接控制,所以对蜂鸣器的控制就是对管脚进行配置。
beep.c
#include "beep.h"
void Beep_Init()
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_100MHz;
GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
GPIO_Init(GPIOF,&GPIO_InitStructure);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
}
main.c
int main()
{
RCC_HSE_Config(8,336,2,7);//配置系统时钟,168mhz。注意这个函数定义要写出来
Beep_Init();//beep初始化,也就是对管脚进行初始化
SysTick_Init(168);//设置systick的时钟源以及配置相关的寄存器
while(1)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_ms(100);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_ms(100);
}
}
注意:这里用到了高低电平交替不是为了使蜂鸣器发声,而是为了使他发出的声音为滴滴的声音。因为这里为有源的,所以根据电路图只要低电平就可以发声(只不过不为滴滴声音,是长鸣),给高电平就停止发声。