当前位置: 首页 > news >正文

51单片机-驱动蜂鸣器模块教程

本章概述思维导图:

51单片机驱动蜂鸣器模块教程

蜂鸣器简介

蜂鸣器是一种将电信号转换为声音信号的电子元件,广泛应用于报警、提示、通知等场景。其核心原理基于压电效应或电磁感应:因此可分为两种类型蜂鸣器:压电式蜂鸣器和电磁式蜂鸣器;

        压电式蜂鸣器:利用压电陶瓷片在电压变化下产生机械形变,从而振动发声;

        电磁式蜂鸣器:通过电磁线圈与磁铁的相互作用,驱动振膜周期性振动发声;

如图所示:压电式蜂鸣器和电磁式蜂鸣器;

在以后遇到蜂鸣器我们该如何区分呢?

按照驱动方式分:

        有源蜂鸣器内置振荡源:内部集成振荡电路,通电即可发声,声音频率固定;

        无源蜂鸣器无内置振荡源:需外部输入方波信号驱动,声音频率可控(可发出不同音调);

按照结构分类:

        压电式蜂鸣器;

        电磁式蜂鸣器;

有非常多的人会理解为:把有源蜂鸣器当成压电式蜂鸣器,无源蜂鸣器当成电磁式蜂鸣器。这样的理解是错误的小伙伴们。不管是压电式或者电磁式都可以根据内部是否配置振荡源来确定是有源还是无源;


蜂鸣器硬件电路原理图分析

在开发板中使用的蜂鸣器为压电式无源蜂鸣器;

可以观察蜂鸣器的两个引脚,上引脚是接入高电平。下脚是接入ULN2003D芯片的OUT5输出脚,而ULN2003D芯片的IN5输入脚连接了MCU的P25脚来实现控制蜂鸣器。从而可以判断出MCU的P25脚输出一个连续的高低电平ULN2003D芯片则输出一个连续的低高电平形成一个方波信号就可以使得蜂鸣器驱动啦。

这里有小伙伴会有疑问,为什么不直接使MCU的P25脚直接连接蜂鸣器的下脚呢,是因为MCU I/O口无法直接驱动蜂鸣器。所以使用ULN2003D芯片,ULN2003D芯片为达林顿晶体管阵列,单路可承受500mA电流,能轻松驱动蜂鸣器,同时分担MCU的电流负载。

小知识点:ULN2003D驱动芯片的输入脚为低电平时,则对应输出脚为高电平。输入脚为高电平时,则对应输出脚为低电平。


驱动蜂鸣器软件编程设计

要使得蜂鸣器驱动,要产生1.5KHZ~5KHZ的频率脉冲信号,换算周期时间为:0.7ms~0.2ms

意思就是指我们要设计高低电平的一个周期时间为:07ms~0.2ms。

代码示例:

#include "reg52.h"
typedef unsigned char u8;
typedef unsigned int u16;
sbit BEEP=P2^5;
void Delay_10us(u16 us)//延时函数:输入1大概延时时间为10us
{while(us--);
}
/*蜂鸣器驱动函数:
1、想使得蜂鸣器的声音变长变短,可以更改i的值大小;
2、想改变音色,可以更改频率也就是周期时间:延时函数里的值;
3、想改变音调可以改变高低电平的占空比,音调变高高电平时间高一点,音调变低高电平时间少一点对应的低电平时间也要更改。保证周期总时间不变,改变高低电平占空比*/
void BEEP_OUT(void)//蜂鸣器驱动函数
{u16 i=1000;while(i--){BEEP=1;Delay_10us(30);//产生脉冲信号高低电平转换时间,低电平0.3ms高电平0.3ms;周期时间设置为0.6msBEEP=0;Delay_10us(30);}
}
int main()
{while(1){BEEP_OUT();//蜂鸣器驱动Delay_10us(50000);//延时时间为480msBEEP=1;//蜂鸣器关闭Delay_10us(50000);//延时时间为480ms}
}

小心得:在驱动蜂鸣器函数中:

1、想使得蜂鸣器的声音变长变短,可以更改i的值大小;
2、想改变音色,可以更改频率也就是周期时间:延时函数里的值;
3、想改变音调可以改变高低电平的占空比,音调变高高电平时间高一点,音调变低高电平时间少一点对应的低电平时间也要更改。保证周期总时间不变,改变高低电平占空比;

蜂鸣器驱动效果展示:

蜂鸣器模块实现效果


制作不易!喜欢的小伙伴给个小赞赞!喜欢我的小伙伴点个关注!有不懂的地方和需要的资源随时问我哟!

http://www.lryc.cn/news/622127.html

相关文章:

  • 开源数据发现平台:Amundsen Frontend Service 安装 开发者指南
  • debian13 安装过程 root配置
  • 从 LLM 到自主 Agent:OpenCSG 打造开源 AgenticOps 生态
  • Linux网络基础概念
  • 【RTOS】RT-Thread 进程间通信IPC源码级分析详解
  • [Pyro] 基础构件 | 随机性sample | 可学习参数param | 批量处理plate
  • 【3D图像技术分析及实现】3DGS与深度学习网络结合以实现跨场景迁移的研究调研
  • 电力系统之常见基础概念
  • 【秋招笔试】2025.08.15饿了么秋招机考-第二题
  • [激光原理与应用-285]:理论 - 波动光学 - 无线电磁波的频谱分配
  • [激光原理与应用-287]:理论 - 波动光学 - 电磁波既能承载能量,又能承载信息?
  • 力扣(接雨水)——单调栈
  • 在 Linux 服务器搭建Coturn即ICE/TURN/STUN实现P2P(点对点)直连
  • Vim 常用快捷键及插件
  • 力扣top100(day04-05)--堆
  • [Linux]双网卡 CentOS 系统中指定网络请求走特定网卡的配置方法
  • 微服务容错与监控体系设计
  • 基于Selenium的web自动化框架
  • 另类pdb恢复方式-2
  • 机器学习中的PCA降维
  • 【GPT入门】第47课 大模型量化中 float32/float16/uint8/int4 的区别解析:从位数到应用场景
  • ifcfg-ens33 配置 BOOTPROTO 单网卡实现静态和dhcp 双IP
  • break的使用大全
  • 102、【OS】【Nuttx】【周边】文档构建渲染:安装 Esbonio 服务器
  • 医学名刊分析评介:医学前沿
  • CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪
  • 神经网络、深度学习与自然语言处理
  • SpringCloud学习
  • ShardingSphere实战架构思考及优化实战问题
  • Delphi7:THashedStringList 详细用法指南