• 普中51-蜂鸣器实验


    蜂鸣器实验

    蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型

    1. 压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.5~15V 直流工 作电压),多谐振荡器起振,输出 1.5~5kHZ 的音频信号,阻抗匹配器推动压电 蜂鸣片发声。
    2. 电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电 源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜 片在电磁线圈和磁铁的相互作用下,周期性地振动发声。
    3. 其实一句话就可概括它们之间的区别,想要压电式蜂鸣器发声,需提供一定 频率的脉冲信号;想要电磁式蜂鸣器发声,只需提供电源即可。
    4. 这次我们使用的蜂鸣器是无源蜂鸣器,属于压电式蜂鸣器类型。这里说 的有源和无源,并不是指电源的意思,而是指蜂鸣器内部是否含有振荡电路,有 源蜂鸣器内部自带振荡电路,只需提供电源即可发声,而无源蜂鸣器则需提供一 定频率的脉冲信号才能发声,频率大小通常在 1.5-5KHz 之间。
      如图所示:
      在这里插入图片描述
      前面我们使用IO口直接控制开发板上的LED灯,那么蜂鸣器我们是否也可以使用IO口进行控制?其实是不能的,因为51单片机IO口的驱动能力较弱(即使外接上拉电阻),而蜂鸣器驱动需要约30MA,所以非常困难,即使可以驱动,那对于整个芯片的其实IO剩下驱动能力就更加弱甚至无法工作。所以不能直接使用IO口来驱动蜂鸣器,而是通过三极管把电流放大之后在驱动蜂鸣器。这样51单片机只需要提供不到1ma的电流就可以控制蜂鸣器。也常说51单片机是用来做控制的,而不是驱动

    从图中可以看出,蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。图 中并没有使用三极管进行电流放大,而是使用 ULN2003 芯片来驱动,这里我们只需知道当 P25 输出高电 平,BEEP 则输出低电平;当 P25 输出低电平,BEEP 则输出高电平,类似一个非 门。 开发板上使用的是无源蜂鸣器,它需要一定频率的脉冲(高低电平)才会发 声,因此需要让 P25 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。

    实验一

    #include "reg52.h"
    sbit BEEP = P2^5; //将P2.5管脚重新定义为BEEP
    typedef unsigned int u16;//对系统默认数据类型重新命名
    typedef unsigned char u8;
    
    void delay_10us(u16 ten_us){//延时函数,当ten_us = 1 是 延时大约10us
    		while(ten_us--);
    }
    void main(){
    	u16 i = 2000;
    	while(1){
    	
    		while(i--){//循环两千次
    			BEEP = !BEEP;//产生一定频率的脉冲信号
    			delay_10us(100);//延时1ms
    		}
    		i = 0;//清零循环参数
    		BEEP = 0;//关闭蜂鸣器
    	}
    	
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    若要改变音调可以修改延时时间,但要注意频率不能太大或者太小,具体大 家可以试着调试。若要改变音量,可以修改 BEEP 输出高电平时间。如下:

    BEEP = !BEEP;//产生一定频率的脉冲信号
    delay_10us(100);//延时1ms
    BEEP = !BEEP;//产生一定频率的脉冲信号
    delay_10us(190);
    BEEP = !BEEP;//产生一定频率的脉冲信号
    delay_10us(50);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    《HelloGitHub》第 87 期
    计算机毕业设计SSM办公自动化系统【附源码数据库】
    cdn与云服务器有什么区别
    Anaconda和Conda的使用
    SAP 11策略测试简介
    【Yocto2】构建嵌入式Linux系统
    利用C++开发一个迷你的英文单词录入和测试小程序
    位图的详细介绍及模拟实现
    C++ 背包问题——多重背包
    怎么理解Fiber,Fiber解决了什么问题
  • 原文地址:https://blog.csdn.net/qq_53037676/article/details/132877465