51单片机蜂鸣器(无源)

一.实物图及接线图:

1.实物图:

在这里插入图片描述
一共有三个引脚,分别为Vcc、GND和I/O口(这个接到单片机的IO口)。

2.与51最小系统板的接线图:

在这里插入图片描述
蜂鸣器的Vcc(绿线) -----> 单片机的5V
蜂鸣器的GND(橙线) -----> 单片机的GND
蜂鸣器的I/O(黄线) -----> 单片机的IO口(在不会引起冲突的情况下随意一个IO口)

二.工作原理及实现条件:

1.工作原理:

在这里插入图片描述
无源蜂鸣器不像有源蜂鸣器那样,有源蜂鸣器通过单片机的IO口直接给高低电平就可以发声,它的优点就是操作简单,缺点就是很难调频率,即音调。而无源蜂鸣器相反,操作相对难,但通过改变频率可以调出很多音调,感兴趣通过改变音调制作一首歌是完全可以的。
无源蜂鸣器的无源不是没有电源的意思,无源是内部没有激励源,只有给它一定频率的方波信号(PWM方波信号),才能让蜂鸣器的振动装置起振,从而实现发声,同时,输入的方波频率不同,发出的声音也不同。

2.实现——按键提示音:

在这里插入图片描述
这里就实现简单的让蜂鸣器响起来,连续响5次,结合上图和下面的蜂鸣器驱动代码来分析。

unsigned int i,j;       //定义内外循环变量
        for(j=0;j<5;j++)  //让蜂鸣器响5次
        {
   
                for(i=0;i<100;i++)   //蜂鸣器响的周期
                {
   
                        beep=~beep;  //产生震荡
                        Delay(1);    //决定响度
                }
                Delay(10);           //两次响之间的间隔时间
        }

1.首先内层for循环产生PWM方波,循环次数决定的是响的周期,即可以理解为响一次为多久。
2.beep=~beep就是高低电平交替产生震荡,2次为一个周期,它决定着蜂鸣器是否响。
3.Delay(1)就是高低电平翻转时间,就是一个高电平或者一个低电平的时间,一个高电平在整个周期的占比叫占空比,Delay越大相当于占空比越大,那么对应的响度就越大。
4.外层for循环的次数决定着执行多少次内循环,就是理解为要响多少次内循环已经设置好的蜂鸣器响声。加个Delay延时表示为两次响声之间间隔多少时间。

3.实现——连续响n次:

这里就做个按键提示音,生活中也很常见,就是按一次按键会发出”滴”的一声

unsigned char Key_num;     //定义一个变量接住按键返回值
        while(1)
        {
   
                
                Key_num=Key();   //接住返回值
                if(Key_num)      //判断按键是否按下,!=0说明有按键按下
                {
   
                        for(i=0;i<100;i++)     //蜂鸣器响一次的周期
                        {
   
                                beep=~beep;     //高低电平产生震荡
                                Delay(1);       
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值