3.2 51单片机-蜂鸣器模块

简介: 3.2 51单片机-蜂鸣器模块

3.2 蜂鸣器模块

3.2.1 蜂鸣器原理图

image.png

实验板上的蜂鸣器没有直接与单片机的IO口相连接,需要使用一个杜邦线手动连接(图中黄色的线)。


3.2.2 无源蜂鸣器与有源蜂鸣器介绍


有源和无源这里的“源”不是指电源,而是指震荡源。也就是说,有源蜂鸣器内部带震荡源,所以只要一通电就会叫。而无源内部不带震荡源,所以如果用直流信号无法令其鸣叫。必须用2K~5K的方波去驱动它,有源蜂鸣器往往比无源的贵,就是因为里面多个震荡电路。


有源蜂鸣器:内部有振荡、驱动电路,加电源就可以响,用起来省事,缺点是频率固定,就只一个单音(高、低电平直接驱动,发出滴答的声音)。


无源蜂鸣器: 价格便宜(少了个振荡电路),声音频率可控,可以做出“多来米发索拉西”的效果,缺点是驱动比较麻烦一点。


当前实验板上使用的就是无源蜂鸣器,要操作蜂鸣器需要使用方波进行控制。


3.2.3 示例代码


控制蜂鸣器发出滴答的声音,延时函数可以使用单片机小精灵软件自动生成。

#include <reg51.h> //添加通用的51单片机头文件
#include <intrins.h>
void delay200us(void);
void BEEP_Ctl(int cmd,int time);
sbit BEEP=P1^5; //定义蜂鸣器引脚(需要使用杜邦线连接IO口)
int main(void)
{
    int i;
    while(1)
    {
        i=!i;
        BEEP_Ctl(i,1000);
    }
}
/*
开启蜂鸣器(2KHZ~5KHZ方波)
1s等于1000ms
1ms等于1000us
1HZ=s 1KHZ=ms 1MHZ=us
1/5000HZ=0.0002s=200us
*/ 
void BEEP_Ctl(int cmd,int time)
{
     int i;
    if(cmd) //打开蜂鸣器
    {
        for(i=0;i<time;i++)
        {
            BEEP=0;
            delay200us();
            BEEP=1;
            delay200us();
        }
    }
    else   //关闭蜂鸣器
    {
        BEEP=0;
        for(i=0;i<time;i++)delay200us();
    }
}
void delay200us(void)
{
    unsigned char a,b;
    for(b=39;b>0;b--)
        for(a=1;a>0;a--);
}

3.2.4 使用无源蜂鸣器播放音乐

image.png

电子琴的1234567分别对应CDEFGAB。

目录
相关文章
|
9月前
【单片机】按键声光报警实验(蜂鸣器)
【单片机】按键声光报警实验(蜂鸣器)
390 0
|
5月前
|
存储 开发框架 前端开发
单片机与HC-05蓝牙模块通信
单片机与HC-05蓝牙模块通信
101 0
|
7月前
|
芯片
单片机外围模块漫谈之五,USB开发,这个错误你犯了吗?
单片机外围模块漫谈之五,USB开发,这个错误你犯了吗?
|
7月前
|
存储 Go 芯片
单片机外围模块漫谈之四,USB总线基本概念。
单片机外围模块漫谈之四,USB总线基本概念。
|
7月前
|
监控 芯片
单片机外围模块漫谈之三,CAN总线
单片机外围模块漫谈之三,CAN总线
|
7月前
|
编解码 芯片
单片机外围模块漫谈之二,如何提高ADC转换精度
单片机外围模块漫谈之二,如何提高ADC转换精度
单片机外围模块漫谈之二,如何提高ADC转换精度
|
7月前
|
编解码 资源调度 内存技术
单片机外围模块漫谈之一,图解说明什么是Flash, SAR, Sigma-Delta型ADC
单片机外围模块漫谈之一,图解说明什么是Flash, SAR, Sigma-Delta型ADC
|
10月前
51单片机学习-HC-05蓝牙模块-LCD12864显示
51单片机学习-HC-05蓝牙模块-LCD12864显示
116 0
51单片机学习-HC-05蓝牙模块-LCD12864显示
|
10月前
51单片机学习--LCD模块使用
51单片机学习--LCD模块使用
98 0