> 文章列表 > 【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)

【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)

【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)

🙌秋名山码民的主页
😂一个打过一年半的oier,写过一年多的Java,现在致力于学习iot应用的普通本科生
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
🙏作者水平有限,如发现错误,还请私信或者评论区留言!

目录

  • 前言
  • 蜂鸣器的基本介绍
  • 蜂鸣器的原理与结构
  • 有源和无源的区别
  • 蜂鸣器在51单片机中的简单应用
  • 最后

前言

最近一直在跟着架构师李肯学习嵌入式相关知识,也顺利的进入了【致敬未来的攻城狮计划】第1期计划,第二期内容也马上开始了,欢迎大家!架构师李肯社区【致敬未来的攻城狮计划】第2期预热征文活动,本着不水文的精神,更新一篇STM32传感器模块的知识,也是对我学习的一个内化。

蜂鸣器的基本介绍

大概就长这个样子:
【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)
1、蜂鸣器的作用:蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

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

3、蜂鸣器的电路图形符号:蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。

蜂鸣器的原理与结构

【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)

1、压电式蜂鸣器:压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。有的压电式蜂鸣器外壳上还装有发光二极管。
  多谐振荡器由晶体管或集成电路构成。当接通电源后(1.5V-15V直流工作电压),多谐振荡器起振,输出1.5-2.5kHZ的音频信号,阻抗匹配器推动压电蜂鸣片发声。
  压电蜂鸣片由锆钛酸铅或铌镁酸铅压电陶瓷材料制成。在陶瓷片的两面镀上银电极,经极化和老化处理后,再与黄铜片或不锈钢片粘在一起。
2、电磁式蜂鸣器:电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。
  接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

有源和无源的区别

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

万用表测电阻区别

用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器 "+"引脚,红表笔在另一引脚上来回碰触,如果触发出咔、咔声的且电阻只有8Ω(或16Ω)的是无源蜂鸣器;如果能发出持续声音的,且电阻在几百欧以上的,是有源蜂鸣器。同时有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声

无源蜂鸣器的优点:

1、便宜;

2、声音频率可控,可以做出“多来米发索拉西”的效果;

3、在一些特例中,可以和LED复用一个控制口;

有源蜂鸣器 的优点:程序控制方便;

蜂鸣器在51单片机中的简单应用

【致敬嵌入式攻城狮第2期活动预热征文】——蜂鸣器(内化)
简单的使用STC52和有源蜂鸣器来播放音乐

#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"//蜂鸣器端口定义
sbit Buzzer=P2^5;//播放速度,值为四分音符的时长(ms)
#define SPEED	750//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#
#define P	0
#define L1	1
#define L1_	2
#define L2	3
#define L2_	4
#define L3	5
#define L4	6
#define L4_	7
#define L5	8
#define L5_	9
#define L6	10
#define L6_	11
#define L7	12
#define M1	13
#define M1_	14
#define M2	15
#define M2_	16
#define M3	17
#define M4	18
#define M4_	19
#define M5	20
#define M5_	21
#define M6	22
#define M6_	23
#define M7	24
#define H1	25
#define H1_	26
#define H2	27
#define H2_	28
#define H3	29
#define H4	30
#define H4_	31
#define H5	32
#define H5_	33
#define H6	34
#define H6_	35
#define H7	36//索引与频率对照表
unsigned int FreqTable[]={0,63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,
};//乐谱
unsigned char code Music[]={//音符,时值,//1P,	1,L3,	1,L6, 1,L7, 1,//2M1, 2,L6, 1,L7, 1+1,L6, 2+1,//3M1, 2,L6, 1,L7, 1+1,L6, 2,L5, 1,//4L6, 4+4+4,//5P, 1,L3,1,L6,1,L7,1,//6M1,2,L6,1,L7,1+1,L6,2,L7,1,//7M1,2,L6,1,L7,1+1,L6,2,L5,1,//8L6,4+4,//9L6,4,P,1,M3,1,M6,1,M7,1,//10H1,4,H3,4,H2,4,H5,4,H3,4,H2,4,H3,4,M7,2,H1,2,M6,4,H3,4,H2,4+2,M7,2,H1,2,M6,4+4+2,//前奏结束H1,4,M7,2,M6,2,//2M6,4+2,M5,1,M6,1+2,M5,1,M3,1,M3,2,M2,1,M3,1+4+4,//遇见P,2,H1,4,M7,1,M6,1,M6,4+2,M5,1,M6,1+2,M5,1,M3,1,M3,2,M2,1,M3,1+4+4,P,4,H1,2,M7,1,M6,1,//断天涯M6,4+1,H1,2,H2,4+4,//相思M7,2,M6,1,M7,1+1,H1,2,H1,1,M6_,2+1,H1,1+2,M7,1,M6,1,//我痴痴M6,4+2,M7,1+1,H1,1,P,2,M5,1,M6,1+2,M6,4+2+4,//顾不顾P,1,M6,1,M6,1,M6,1,M6,1,M6,1,M6,1,M6,1,P,1,M6,1,M6,1,M6,1,//万事千秋M6,1,M6,1,M6,1,M6,1,P,1,M6,1,M6,1,M6,1,M6,2,M6,1,M6,1,//这万丈P,1,M6,1,M6,1,M6,1,M6,1,M6,1,M6,1,M7,1,H1,1,M7,1,M7,2,//爱更爱P,1,M5,1,M5,1,M5,1,M5,1,M5,1,M5,1,M5,1,P,1,M6,1,M5,1,M5,1,M5,1,M5,1,M5,1,M5,1,P,1,M6,1,M6,1,M6,1,M6,2,M6,2,M7,2,M7,4,//一生有爱0xFF	//终止标志
};unsigned char FreqSelect,MusicSelect;void main()
{Timer0Init();while(1){if(Music[MusicSelect]!=0xFF)	//如果不是停止标志位{FreqSelect=Music[MusicSelect];	//选择音符对应的频率MusicSelect++;Delay(SPEED/4*Music[MusicSelect]);	//选择音符对应的时值MusicSelect++;TR0=0;Delay(5);	//音符间短暂停顿TR0=1;}else	//如果是停止标志位{TR0=0;while(1);}}
}void Timer0_Routine() interrupt 1
{if(FreqTable[FreqSelect])	//如果不是休止符{/*取对应频率值的重装载值到定时器*/TL0 = FreqTable[FreqSelect]%256;		//设置定时初值TH0 = FreqTable[FreqSelect]/256;		//设置定时初值Buzzer=!Buzzer;	//翻转蜂鸣器IO口}
}

Delay函数


void Delay(unsigned int xms)
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}
}
#include <REGX52.H>/*** @brief  定时器0初始化,1毫秒@12.000MHz* @param  无* @retval 无*/
void Timer0Init(void)
{TMOD &= 0xF0;		//设置定时器模式TMOD |= 0x01;		//设置定时器模式TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时ET0=1;EA=1;PT0=0;
}/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x18;		//设置定时初值TH0 = 0xFC;		//设置定时初值T0Count++;if(T0Count>=1000){T0Count=0;}
}
*/

最后

如果本文对你有所帮助,还请三连支持一下博主!
请添加图片描述