news 2026/6/10 16:09:46

【普中51单片机开发攻略--基于普中-2普中-3普中-4】-- 第 10 章 蜂鸣器实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【普中51单片机开发攻略--基于普中-2普中-3普中-4】-- 第 10 章 蜂鸣器实验

(1)实验平台:普中51单片机开发板-A2&A3&A4


前面章节我们已经介绍了如何控制 51 单片机的 IO 口输出高低电平, 本章我们通过另外一个实验来讲述 51 单片机 IO 口的输出。 通过单片机的一个 IO 口控制板载无源蜂鸣器, 实现蜂鸣器控制。 学习本章可以参考前面 LED 实验章节内容。本章分为如下几部分内容:

10.1 蜂鸣器介绍

10.2 硬件设计

10.3 软件设计

10.4 实验现象


10.1 蜂鸣器介绍

蜂鸣器是一种一体化结构的电子讯响器, 采用直流电压供电, 广泛应用于计算机、 打印机、 复印机、 报警器、 电子玩具、 汽车电子设备、 电话机、 定时器等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。

压电式蜂鸣器主要由多谐振荡器、 压电蜂鸣片、 阻抗匹配器及共鸣箱、 外壳等组成。 多谐振荡器由晶体管或集成电路构成, 当接通电源后(1.5~15V 直流工作电压) , 多谐振荡器起振,输出 1.5~5kHZ 的音频信号, 阻抗匹配器推动压电蜂鸣片发声。

电磁式蜂鸣器由振荡器、 电磁线圈、 磁铁、 振动膜片及外壳等组成。 接通电源后, 振荡器产生的音频信号电流通过电磁线圈, 使电磁线圈产生磁场, 振动膜片在电磁线圈和磁铁的相互作用下, 周期性地振动发声。

其实一句话就可概括它们之间的区别, 想要压电式蜂鸣器发声, 需提供一定频率的脉冲信号; 想要电磁式蜂鸣器发声, 只需提供电源即可。

我们开发板上使用的蜂鸣器是无源蜂鸣器, 属于压电式蜂鸣器类型。 这里说的有源和无源, 并不是指电源的意思, 而是指蜂鸣器内部是否含有振荡电路, 有源蜂鸣器内部自带振荡电路, 只需提供电源即可发声, 而无源蜂鸣器则需提供一定频率的脉冲信号才能发声, 频率大小通常在 1.5-5KHz 之间。 蜂鸣器实物图如下图所示:

对于无源蜂鸣器, 如果改变频率就可以调节蜂鸣器音调, 产生各种不同音色、音调的声音。 如果改变输出电平的高低电平占空比, 则可以改变蜂鸣器的声音大小。

对于有源蜂鸣器, 通常内部已经固定了频率, 对于调节频率或占空比可能改变不了蜂鸣器的音调和音量, 当然也有的有源蜂鸣器可以实现和无源蜂鸣器一样的效果。

10.2 硬件设计

在前面章节中我们已经对 51 单片机的 GPIO 做了简单介绍, 并且还使用了其中 IO 口直接控制开发板上的 LED。 对于本章要实现蜂鸣器的控制, 我们能否直接使用单片机的 IO 口驱动呢? 答案是否定的, 因为 51 单片机 IO 口的驱动能力较弱(即使外接上拉电阻) , 而蜂鸣器驱动需要约 30mA, 所以非常困难, 即使可以驱动, 那对于整个芯片的其它 IO 剩下驱动能力就更加弱甚至无法工作。所以我们不会直接使用 IO 口驱动蜂鸣器, 而是通过三极管把电流放大后再驱动蜂鸣器, 这样 51 单片机的 IO 口只需要提供不到 1mA 的电流就可控制蜂鸣器。所以我们也经常说到 51 单片机是用来做控制的, 而不是驱动。

我们开发板上的蜂鸣器模块电路如下图所示:

从图中可以看出, 蜂鸣器控制管脚直接连接到 51 单片机的 P2.5 管脚上。 图中并没有使用三极管进行电流放大, 而是使用 ULN2003 芯片来驱动, 有关 ULN2003芯片的使用此处先不作介绍, 后面章节会有, 大家暂时只需知道当 P25 输出高电平, BEEP 则输出低电平; 当 P25 输出低电平, BEEP 则输出高电平, 类似一个非门。

开发板上使用的是无源蜂鸣器, 它需要一定频率的脉冲(高低电平) 才会发声, 因此需要让 P25 脚以一定频率不断输出高低电平信号才能控制蜂鸣器发出声音。

10.3 软件设计

本章所要实现的功能是: 让蜂鸣器发出声音, 一段时间后再关闭, 即让 P2.5管脚输出一定频率的脉冲信号(高低电平) 控制无源蜂鸣器。

我们打开“\4--实验程序\1--基础实验\5-蜂鸣器实验” 工程, 控制代码全部都在 main.c 中, 代码如下:

/************************************************************************************** 实验名称: 蜂鸣器实验 接线说明: 实验现象: 下载程序后蜂鸣器发出声音, 一段时间后关闭 注意事项: ***************************************************************************************/ #include "reg52.h" typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; sbit BEEP=P2^5; //将 P2.5 管脚定义为 BEEP /******************************************************************************* * 函 数 名 : delay_10us * 函数功能 : 延时函数, ten_us=1 时, 大约延时 10us * 输 入 : ten_us * 输 出 : 无 *******************************************************************************/ void delay_10us(u16 ten_us) { while(ten_us--); } /******************************************************************************* * 函 数 名 : main * 函数功能 : 主函数 * 输 入 : 无 * 输 出 : 无 ********************************************************************* **********/ void main() { u16 i=2000; while(1) { while(i--)//循环 2000 次 { BEEP=!BEEP;//产生一定频率的脉冲信号 delay_10us(100); } i=0;//清零 BEEP=0;//关闭蜂鸣器 } }

main.c 文件内代码非常少也很简单, 首先将 51 单片机的头文件包含进来,然后使用 sbit 关键字来定义 P2.5 管脚, 定义好后即可使用 BEEP 来替代 P2.5口的操作。 主函数功能非常简单, 直接进入 while 循环, 在循环内再次套用了一个 while 循环, 只不过这里并非死循环, 而是通过变量 i 值来决定何时退出, i值初始化为 2000, 即该循环会执行 2000 次, 此循环内不断对 BEEP 取反, 然后延时一定时间, 即 P2.5 间隔一定时间输出高低电平, 这样就会产生脉冲信号控制蜂鸣器发出声音, 当 i 值递减到 0 时则退出 while 循环, 然后将 i 值清零, 且将 BEEP 输出 0。 若修改变量 i 的值可以改变蜂鸣器发声时间。

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

BEEP=1; delay_10us(190); BEEP=0; delay_10us(10);

10.4 实验现象

使用 USB 线将开发板和电脑连接成功后(电脑能识别开发板上 CH340 串口) ,把编译后产生的.hex 文件烧入到芯片内, 可以听到开发板上蜂鸣器发出美妙的声音, 一段时间后关闭。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 21:55:29

AI写论文“终极PK”:宏智树AI凭啥成2025届毕业生的“隐形导师”

官网直达:www.hzsxueshu.com 毕业季的“论文战场”上,有人为选题愁到脱发,有人为文献查重熬红双眼,更有人因格式混乱被导师“连环暴击”。当通用AI还在生成“车轱辘话”时,一款名为宏智树AI的论文助手悄然杀出——它不…

作者头像 李华
网站建设 2026/6/10 6:05:29

AI写论文哪个软件最好?与宏智树AI共舞,毕业从“困局”到“胜局”

宏智树AI,远不止于论文写作。它是一款专为学术旅程设计的智能伙伴,旨在与你并肩完成从灵感到终稿的全过程。从第一缕灵感的落地——一份结构清晰的开题报告,到广纳百家之言的文献综述,再到主体章节的精心构筑,乃至对学…

作者头像 李华
网站建设 2026/6/10 12:33:11

Symfony 8 Monolog配置避坑指南:5个常见错误及修复方案

第一章:Symfony 8 日志系统概览Symfony 8 的日志系统建立在强大的 Monolog 库之上,为开发者提供灵活、可扩展的日志记录机制。无论是在开发环境调试问题,还是在生产环境中监控应用行为,Symfony 都能通过配置将不同级别的日志输出到…

作者头像 李华
网站建设 2026/6/10 15:48:20

模型融合后如何验证?R和Python输出差异的真相,90%的人都忽略了

第一章:R-Python 模型融合的结果验证在跨语言建模场景中,R 与 Python 的模型融合已成为提升预测性能的重要手段。通过将 R 中擅长的统计分析模型与 Python 在机器学习框架上的优势结合,可以构建更稳健的集成系统。然而,融合后的结…

作者头像 李华
网站建设 2026/6/10 15:54:58

国产自容式ADCP真的能替代进口设备吗?偶信科技给出答案

在海洋观测、水文监测和环境评估等领域,声学多普勒流速剖面仪(ADCP)是获取海流数据的核心装备。长期以来,我国高端ADCP市场被国外品牌主导,但近年来,随着技术突破与工程化能力提升,国产自容式AD…

作者头像 李华
网站建设 2026/6/10 15:49:34

甲基化差异分析避坑指南:90%科研人员忽略的3个技术细节

第一章:甲基化差异分析避坑指南的核心概述在高通量测序技术广泛应用的今天,DNA甲基化差异分析已成为表观遗传学研究的重要手段。然而,由于实验设计、数据预处理和统计方法选择上的复杂性,研究人员极易陷入常见误区,导致…

作者头像 李华