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

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

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

目录

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


前言

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

蜂鸣器的基本介绍

大概就长这个样子:
在这里插入图片描述
1、蜂鸣器的作用:蜂鸣器是一种一体化结构的电子讯响器,采用直流电源供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。

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

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

蜂鸣器的原理与结构

在这里插入图片描述

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

有源和无源的区别

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

万用表测电阻区别

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

无源蜂鸣器的优点:

1、便宜;

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

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

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

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

在这里插入图片描述
简单的使用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[]={
	//音符,时值,
	
	//1
	P,	1,
	L3,	1,
	L6, 1,
	L7, 1,

	//2
	M1, 2,
	L6, 1,
	L7, 1+1,
	L6, 2+1,

	//3
	M1, 2,
	L6, 1,
	L7, 1+1,
	L6, 2,
	L5, 1,

	//4
	L6, 4+4+4,

	//5
	P, 1,
	L3,1,
	L6,1,
	L7,1,

	//6
	M1,2,
	L6,1,
	L7,1+1,
	L6,2,
	L7,1,

	//7
	M1,2,
	L6,1,
	L7,1+1,
	L6,2,
	L5,1,

	//8
	L6,4+4,
	
	//9
	L6,4,
	P,1,
	M3,1,
	M6,1,
	M7,1,

	//10
	H1,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,

	//2
	M6,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;
		
	}
}
*/

最后

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

相关文章:

  • 第8章_索引的创建与设计原则
  • 了解PL/SQL看这一篇够够了~
  • 为什么我们认为GPT是一个技术爆炸
  • 低代码打翻前端的饭碗?探秘两者藕断丝连的关系
  • Redis面试题 (2023最新版)
  • 文件转换-cad转geojson
  • 文件操作编程
  • 开发脚手架常用的JS库
  • 设备树dtb文件的格式分析
  • CNN PyTorch MNIST
  • python的简单读写操作
  • 面试官:你做过什么有亮点的项目吗?
  • 面试官:了解mysql的架构体系吗?
  • 【LINUX】初识文件系统
  • ChatGPT 各类 Prompt 整理
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 77. Combinations
  • axios 和 cookie 的那些事
  • C++11: atomic 头文件
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JAVA SE 6 GC调优笔记
  • JDK9: 集成 Jshell 和 Maven 项目.
  • js ES6 求数组的交集,并集,还有差集
  • Markdown 语法简单说明
  • PermissionScope Swift4 兼容问题
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Unix命令
  • vue从创建到完整的饿了么(11)组件的使用(svg图标及watch的简单使用)
  • vue学习系列(二)vue-cli
  • Vultr 教程目录
  • 阿里云应用高可用服务公测发布
  • 包装类对象
  • 思考 CSS 架构
  • 我的业余项目总结
  • 一个JAVA程序员成长之路分享
  • 正则表达式
  • 智能合约开发环境搭建及Hello World合约
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #vue3 实现前端下载excel文件模板功能
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (3)llvm ir转换过程
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • .mysql secret在哪_MYSQL基本操作(上)
  • .Net MVC + EF搭建学生管理系统
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 调用海康SDK以及常见的坑解释
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET6 开发一个检查某些状态持续多长时间的类
  • .net经典笔试题
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)