【Proteus仿真】蜂鸣器控制系列仿真——蜂鸣器控制/蜂鸣器播放音乐/蜂鸣器播放多种音乐/蜂鸣器和LED组成报警装置
目录
0案例视频效果展示
0.1例子1:开关控制蜂鸣器运行
0.2例子2:蜂鸣器播放不同频率声音
0.3例子3:蜂鸣器演奏不同音阶
0.4例子4:蜂鸣器播放音乐
0.5例子5:蜂鸣器播放多段音乐
0.6例子6:蜂鸣器和LED灯组成的报警装置
1基础知识补充
1.1蜂鸣器基础知识
1.1.1工作原理
1.1.2分类对比
1.1.3选型关键参数
1.1.4常见问题与解决
2例子1:开关控制蜂鸣器运行
2.1电路原理图
2.1.1电路组成及接线
2.2控制程序
2.2.1控制程序步骤
2.2.2源代码
3例子2:蜂鸣器播放不同频率声音
3.1电路原理图
3.1.1电路组成及接线
3.2控制程序
3.2.1控制程序步骤
3.2.2源代码
4例子3:蜂鸣器演奏不同音阶
4.1电路原理图
4.1.1电路组成及接线
4.2控制程序
4.2.1控制程序步骤
4.2.2源代码
5例子4:蜂鸣器播放音乐
5.1电路原理图
5.1.1电路组成及接线
5.2控制程序
5.2.1控制程序步骤
5.2.2源代码
6例子5:蜂鸣器播放多段音乐
6.1电路原理图
6.1.1电路组成及接线
6.2控制程序
6.2.1控制程序步骤
6.2.2源代码
7例子6:蜂鸣器和LED灯组成的报警装置
7.1电路原理图
7.1.1电路组成及接线
7.2控制程序
7.2.1控制程序步骤
7.2.2源代码
7 硬件工程师笔试面试相关文章链接(部分链接)
摘要:本文介绍了蜂鸣器的基本原理及多种应用案例。主要内容包括:1.蜂鸣器基础知识,包括压电式和电磁式的工作原理、分类对比及选型参数;2.6个典型应用案例:开关控制报警声、播放不同频率声音、演奏音阶、播放音乐、多段音乐选择播放、与LED组成报警装置;3.每个案例均包含电路原理图、控制程序及源代码实现。这些案例展示了如何通过单片机编程控制蜂鸣器实现不同功能,从简单开关控制到复杂音乐播放,为硬件开发提供了实用参考。
0案例视频效果展示
0.1例子1:开关控制蜂鸣器运行
例子19:开关控制蜂鸣器运行
0.2例子2:蜂鸣器播放不同频率声音
例子20:蜂鸣器播放不同频率声音
0.3例子3:蜂鸣器演奏不同音阶
例子21:蜂鸣器演奏不同音阶
0.4例子4:蜂鸣器播放音乐
例子22:蜂鸣器播放音乐
0.5例子5:蜂鸣器播放多段音乐
例子23:蜂鸣器播放多端音乐
0.6例子6:蜂鸣器和LED灯组成的报警装置
例子24:蜂鸣器和LED灯组成的报警装置
1基础知识补充
1.1蜂鸣器基础知识
蜂鸣器是一种能将电信号转换为声音信号的电声器件。
1.1.1工作原理
蜂鸣器按发声原理主要分为两类:
压电式蜂鸣器(Piezoelectric Buzzer)
利用压电陶瓷材料的压电效应,在施加交变电压时产生机械振动而发声。
特点:结构简单、功耗低、频率高(通常2kHz以上)、声音尖锐,适合报警提示。
需要外部驱动电路(通常是方波信号)。
电磁式蜂鸣器(Electromagnetic Buzzer)
通过电磁线圈驱动金属振膜振动发声。
特点:声音柔和、频率较低(1kHz~3kHz)、功耗稍大,适合语音、音乐播放。
分为有源(内置振荡电路,直流供电即可发声)和无源(需外部方波驱动)两种。
1.1.2分类对比
类型 | 驱动方式 | 电路复杂度 | 声音特点 | 典型应用 |
有源电磁式 | 直流供电 | 低 | 单调“嘀”声 | 家电提示音 |
无源电磁式 | 外部方波 | 中 | 可调音调 | 音乐播放 |
压电式 | 外部方波 | 中 | 高频尖锐 | 报警器、仪表 |
1.1.3选型关键参数
工作电压:常见3V、5V、12V,需与系统匹配。
谐振频率:压电式通常2kHz~6kHz,电磁式1kHz~3kHz。
声压级(dB):距离10cm处测得,常见80~110dB。
尺寸:直径5mm~30mm,需考虑安装空间。
电流:电磁式静态电流10mA~50mA,压电式仅振动时耗电。
1.1.4常见问题与解决
声音太小:检查电压是否达标,或增加三极管放大电路。
杂音:驱动频率偏离谐振点,需调整PWM频率。
误触发:GPIO上电默认高电平导致,可加下拉电阻或反相器。
2例子1:开关控制蜂鸣器运行
实现功能:用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果
本质:通过开关的通断改变电路的导通状态,从而控制电能驱动蜂鸣器振动发声。
2.1电路原理图
2.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P1.0—>蜂鸣器 P1.7—>切换开关 |
复位电路 | |
晶振电路 | |
蜂鸣器 | |
切换开关 |
2.2控制程序
2.2.1控制程序步骤
库文件和引脚定义
发生函数
主程序
2.2.2源代码
//功能:用K1开关控制报警器,程序控制P1.0输出两种不同频率的声音,模拟很逼真的报警效果#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit SPK=P1^0;sbit K1=P1^7;//发声函数void Alarm(uchar t){uchar i,j;for(i=0;i<200;i++){SPK=~SPK;for(j=0;j<t;j++); //由参数t行成不同的频率}}void main(){SPK=0;while(1){if(K1==1){Alarm(90);Alarm(120);}}}
3例子2:蜂鸣器播放不同频率声音
实现功能:按下不同的按键会蜂鸣器发出不同频率的声音。
本质:按键切换不同频率的本质,是改变电路输出给蜂鸣器的电信号频率,使其振膜以对应频率振动发声。
3.1电路原理图
3.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P3.7—>蜂鸣器 P1.4-P1.7—>频率切换按钮 |
复位电路 | |
晶振电路 | |
蜂鸣器 | |
频率切换按钮 |
3.2控制程序
3.2.1控制程序步骤
库文件和引脚定义
延时函数
按周期t发音函数
主程序
3.2.2源代码
//功能:按下不同的按键会蜂鸣器发出不同频率的声音。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P3^7;sbit K1=P1^4;sbit K2=P1^5;sbit K3=P1^6;sbit K4=P1^7;//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//按周期t发音void Play(uchar t){uchar i;for(i=0;i<100;i++){BEEP=~BEEP;DelayMS(t);}BEEP=0;}void main(){P1=0xff;BEEP=0;while(1){if(K1==0) Play(1);if(K2==0) Play(2);if(K3==0) Play(3);if(K4==0) Play(4);}}
4例子3:蜂鸣器演奏不同音阶
实现功能:使用定时器演奏一段音阶,播放由K1控制。
本质:利用定时器精确控制蜂鸣器电信号频率与时长,按音阶序列依次驱动其振动发声。
4.1电路原理图
4.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P1.0—>蜂鸣器/示波器 P1.7—>控制开关 |
复位电路 | |
晶振电路 | |
蜂鸣器 | |
控制开关 | |
示波器 |
4.2控制程序
4.2.1控制程序步骤
库文件和引脚定义
定时器中断函数
延时函数
主程序
4.2.2源代码
如上图所示,不同音阶的模拟信号示波器图
//音阶演奏:使用定时器演奏一段音阶,播放由K1控制。#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit K1=P1^7;sbit SPK=P1^0;uint i=0; //音符索引//14个音符放在方式2下的定时寄存器(TH0,TL0)uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//定时器0中断函数void T0_INT() interrupt 1{TL0=LO_LIST[i];TH0=HI_LIST[i];SPK=~SPK;}//延时void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}//主程序void main(){TMOD=0x00; //T0方式0IE=0x82;SPK=0; while(1){while(K1==1); //未按键等待while(K1==0); //等待释放for(i=1;i<15;i++){TR0=1; //播放一个音符DelayMS(500); //播放延时TR0=0;DelayMS(50);}}}
5例子4:蜂鸣器播放音乐
实现功能:播放生日快乐歌,所有频率完全用延时实现,通过开关实现播放启停
本质:以延时循环产生各音频率,开关仅控制该循环是否驱动蜂鸣器发声。
5.1电路原理图
5.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P1.0—>蜂鸣器/示波器 P1.7—>控制开关 |
复位电路 | |
晶振电路 | |
蜂鸣器 | |
控制开关 |
5.2控制程序
5.2.1控制程序步骤
库文件和引脚定义
音符频率表
节拍表
延时函数
播放函数
主程序
5.2.2源代码
//功能:播放生日快乐歌,所有频率完全用延时实现,通过开关实现播放启停#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit BEEP=P1^0;sbit K1=P1^7;//生日快乐歌的音符频率表,不同频率由不同的延时来决定uchar code SONG_TONE[]={212,212,190,212,159,169,212,212,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0};//生日快乐歌节拍表,节拍决定每个音符的演奏长短uchar code SONG_LONG[]={9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0};//延时void DelayMS(uint x){uchar t;while(x--) for(t=0;t<120;t++);}//播放函数void PlayMusic(){uint i=0,j,k;while((SONG_LONG[i]!=0||SONG_TONE[i]!=0)&&(K1==0)){ //播放各个音符,SONG_LONG为拍子长度for(j=0;j<SONG_LONG[i]*20;j++){BEEP=~BEEP;//SONG_TONE延时表决定了每个音符的频率for(k=0;k<SONG_TONE[i]/3;k++);}DelayMS(10);i++; }}void main(){BEEP=0;while(1){PlayMusic(); //播放生日快乐}}
6例子5:蜂鸣器播放多段音乐
实现功能:内置3段音乐,K1可启动停止音乐播放,K2用于选择音乐段。
本质:K2选曲存入数组,K1启停控制定时器按逐音延时输出对应频率驱动蜂鸣器。
6.1电路原理图
6.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P2.0-P2.6—>数码管 P3.7—>蜂鸣器/示波器 P3.2/P1.0—>按键K3/K4 |
复位电路 | |
晶振电路 | |
数码管 | |
蜂鸣器 | |
按键开关 | |
示波器 |
6.2控制程序
6.2.1控制程序步骤
库文件和引脚定义
数码管段码表
标准音符频率对应的延时表
三段音乐的音符
三段音乐的节拍
中断INT0
延时函数
主程序
6.2.2源代码
//功能:内置3段音乐,K1可启动停止音乐播放,K2用于选择音乐段。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit K1=P1^0; //播放和停止键sbit SPK=P3^7; //蜂鸣器uchar Song_Index=0,Tone_Index=0; //当前音乐段索引,音符索引//数码管段码表uchar code DSY_CODE[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//标准音符频率对应的延时表uchar code HI_LIST[]={0,226,229,232,233,236,238,240,241,242,244,245,246,247,248};uchar code LO_LIST[]={0,4,13,10,20,3,8,6,2,23,5,26,1,4,3};//三段音乐的音符uchar code Song[][50]={{1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,6,5,3,5,3,2,1,2,1,-1},{3,3,3,4,5,5,5,5,6,5,3,5,3,2,1,5,6,53,3,2,1,1,-1},{3,2,1,3,2,1,1,2,3,1,1,2,3,1,3,4,5,3,4,5,5,6,5,3,5,3,2,1,3,2,1,1,-1}};//三段音乐的节拍uchar code Len[][50]={{1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,-1},{1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,-1},{1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,-1}};//外部中断0void EX0_INT() interrupt 0{TR0=0; //播放结束或者播放中途切换歌曲时停止播放Song_Index=(Song_Index+1)%3; //跳到下一首的开头Tone_Index=0;P2=DSY_CODE[Song_Index]; //数码管显示当前音乐段号}//定时器0中断函数void T0_INT() interrupt 1{TL0=LO_LIST[Song[Song_Index][Tone_Index]];TH0=HI_LIST[Song[Song_Index][Tone_Index]];SPK=~SPK;}//延时void DelayMS(uint ms){uchar t;while(ms--) for(t=0;t<120;t++);}//主程序void main(){P2=0xc0;SPK=0;TMOD=0x00; //T0方式0IE=0x83;IT0=1;IP=0x02;while(1){while(K1==1); //未按键等待while(K1==0); //等待释放TR0=1; //开始播放Tone_Index=0; //从第0个音符开始//播放过程中按下K1可提前停止播放(K1=0)。//若切换音乐段会触发外部中断,导致TR0=0,播放也会停止while(Song[Song_Index][Tone_Index]!=-1&&K1==1&&TR0==1){DelayMS(300*Len[Song_Index][Tone_Index]); //播放延时(节拍)Tone_Index++; //当前音乐段的下一音符索引}TR0=0; //停止播放while(K1==0); //若提前停止播放,按键未释放时等待}}
7例子6:蜂鸣器和LED灯组成的报警装置
实现功能:控制报警灯旋转显示,并发出仿真警报声。
本质:单片机定时器同步产生旋转灯PWM扫描信号与警报声频率信号,驱动灯环旋转并推动蜂鸣器发声。
7.1电路原理图
7.1.1电路组成及接线
名称 | 接线 |
AT89C51单片机 | XTAL1/XTAL2—>连接晶振电路 RST—>连接复位电路 P2.0-P2.7—>旋转灯 P3.7—>蜂鸣器 P3.2—>按键K1 |
复位电路 | |
晶振电路 | |
旋转灯 | |
蜂鸣器 | |
按键 |
7.2控制程序
7.2.1控制程序步骤
库文件和引脚定义
延时函数
INTO中断函数
定时器0中断函数
定时器1中断函数
主程序
7.2.2源代码
//功能:定时器控制报警灯旋转显示,并发出仿真警报声。#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit SPK=P3^7;uchar FRQ=0x00;//延时void DelayMS(uint ms){uchar i;while(ms--) for(i=0;i<120;i++);}//INT0中断函数void EX0_INT() interrupt 0{TR0=~TR0; //开启或停止两定时器,分别控制报警器的声音和LED旋转TR1=~TR1;if(P2==0x00)P2=0xe0; //开3个旋转灯elseP2=0x00; //关闭所有LED }//定时器0中断void T0_INT() interrupt 1{TH0=0xfe;TL0=FRQ;SPK=~SPK;}//定时器1中断void T1_INT() interrupt 3{TH1=-45000/256;TL1=-45000%256;P2=_crol_(P2,1);}//主程序void main(){P2=0x00;SPK=0x00;TMOD=0x11; //T0、T1方式1TH0=0x00;TL0=0xff;IT0=1; IE=0x8b; //开启0,1,3号中断IP=0x01; //INT0设为最高优先TR0=0;TR1=0; //定时器启停由INT0控制,初始关闭while(1){FRQ++;DelayMS(1);}}
7 硬件工程师笔试面试相关文章链接(部分链接)
更多文章可前往主页观看
1、硬件工程师笔面试真题汇总(2025版本)_硬件工程师面试题-CSDN博客https://blog.csdn.net/XU157303764/article/details/140742900?spm=1011.2415.3001.5331硬件工程师笔试面试高频考点汇总——(2025版)_电容或者电感对锁存器的影响-CSDN博客
https://blog.csdn.net/XU157303764/article/details/1488349782、硬件工程师笔试面试汇总(2025版本)_硬件工程师面试题-CSDN博客
https://blog.csdn.net/XU157303764/article/details/1419048583、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)_【【硬件工程师炼成之路】器件篇(更新中。。。)-CSDN博客
https://blog.csdn.net/XU157303764/article/details/142316204
硬件工程师笔记——电子器件汇总大全-CSDN博客https://blog.csdn.net/XU157303764/article/details/147342935?spm=1011.2415.3001.5331Multisim14使用教程详尽版--(2025最新版)-CSDN博客
https://blog.csdn.net/XU157303764/article/details/147197406?spm=1011.2415.3001.5331