51单片机之蜂鸣器,有源蜂鸣器和无源蜂鸣器的区别,简叙三极管

有源蜂鸣器和无源蜂鸣器

这里的“源”不是指电源。而是指震荡源

我们知道,纸盆扬声器能发出声音是因为纸盆的振动,要想纸盆振动,就要让经过扬声器线圈的电流“通”、“断”、“通”、“断”......


有源蜂鸣器内部有震荡源,只要给它施加电流,它就会自动地“通”、“断”、“通”、“断”......,发出声音,所以编程的时候只需令它两端有电压差就行了。但是它的震荡源的频率是固定的,故发出声音的频率不能变,即只能发出一种音调。

无源蜂鸣器内部没有震荡源,想使它发出声音,要在编程时使它两端的电压差是“高”、“低”、“高”、“低”......虽然在编程的时候复杂一点,但是我们可以通过控制蜂鸣器两端电压的频率来控制其发出声音的音调。

简叙三极管

三极管分为PNP型和NPN型。B(BASE)基极,E(EMITTER)发射极,C(COLLECTOR)集电极。这两型只是C和E位置不同,可以进行类比。这里我只拿PNP型来说。



三极管的用处简单来说就是小电流驱动大电流。

小电流有多小呢?当然也不能太小,假设这个小电流需要大于1mA吧。



蜂鸣器用小电流驱动不起来,但是单片机不能输出大电流,需要额外的电源为蜂鸣器提供大电流。通过三极管,我们就可以通过单片机输出的小电流控制通过蜂鸣器的大电流。

所以蜂鸣器的电路长这个模样


P23引脚内部接有上拉电阻。(通俗解释,“上拉”,电压往上拉,即高电平5V。“电阻”,这条支路上接有一个电阻)

编程思路

VCC电位也是5V,R10电阻两端不存在压差,电流为0A,没有达到所需的“小电流”。编程P23引脚为低电平,达到“小电流”,蜂鸣器支路导通,发出声音。

#include 

sbit beep = P2^3;  //P23引脚位定义,命名为beep

void delay(unsigned int z)
{
    unsigned int x, y;
    for(x = z; x > 0; x--)
        for(y = 114; y >0; y--);
}

void main()
{
    while(1)
    {
        beep = ~beep;  //按位取反,原来是0就变1;原来是1,就变0
        delay(100);  //延时100ms,不要让它一直叫
    }
}

你可能感兴趣的:(51单片机之蜂鸣器,有源蜂鸣器和无源蜂鸣器的区别,简叙三极管)