『51单片机』蜂鸣器

news2024/10/11 10:20:14
  • 🚩 WRITE IN FRONT 🚩       

  • 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎
  • 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量8w+、个人社区人数累计4w+、全网访问量100w+ 🏅
  • 🆔 本文章内容由 謓泽 原创 如需相关转载请提前告知博主 ⚠
  • 📑 创作时间:2022 年 11 月 2 日 📅
  • 📝 个人主页:謓泽的博客 📃
  • 📣 专栏系列:【51单片机】系列_謓泽的博客📃
  • 🙌 Gitee:謓泽 (wsxsx) - Gitee.com ⭐️
  • 🎁 点赞👍+ 收藏⭐️+ 留言📝​
  • ✉️ 我们并非登上我们所选择的舞台,演出并非我们所选择的剧本 📩

简介

蜂鸣器是一种只能将电信号转换为声信号的器件,常用来产生设备的按键音、报警音等提示音。

蜂鸣器按照驱动方式可以分为有源蜂鸣器和无源蜂鸣器。

有源蜂鸣器:内部自带振荡源,将正负极街上直流电压(达到要求)即可持续发出声音,频率固定的。

无源蜂鸣器:内部不带振荡源,需要控制器提供振荡脉冲才可以持续发出声音。调整提供脉冲的振荡脉冲频率可以发出不同频率的声音的(设计的时候不能让无源蜂鸣器一直处于通电状态当中)开发板使用的就是无源蜂鸣器。

注→蜂鸣器只能发出一种鸣叫的声音(音色是只有一种的不能发出像其它乐理的声音)

驱动电路

NPN三极管⇢高电平触发。

PNP三极管⇢低电平触发。

注→在三极管的基极信号当中,这里的基极电阻的范围1k~10k都是可以的。

集成电路驱动:VCC连接了一个电阻再连接到蜂鸣器的一根引脚另一个脚的(BZ)的网络编号另一头连接到了五线四相步进电机(ULN2003)连接到OUT5(BZ)P15是单片机的引脚相当于控制信号。注:在这里的话给P15(高电平"1")的话是有驱动的,原因是里面有一个(非门)如下图原理图所示↓那么我们要让我们的单片机蜂鸣器响应也非常的简单我们给BZ低电平即可。

UN2003()﹣达令顿管阵列

乐理 

在学习蜂鸣器的同时我们也需要掌握一些基础的乐理这样我们就可以使用蜂鸣器来演奏不同的歌曲了。下面是钢琴键盘的无限谱对照表如下↓

降记号(b)表示将基本音级的音高降低半音,根据该记号所在的线或间而降音。

还原记号:表示把已经升高或降低的音还原。

升记号(#)表示将基本音级的音高升高半音,根据该记号所在的线或间而降音。

如下是音符,像我们最熟知的小⭐⭐基本以四分音符为一拍的。

我们可以列一个时间的基准值假设为0.5(s)那么二分音符就是1s、全音符就是2s。八分音符就是0.25(s)依次类推,从上述我们观察可以得出都是以2倍为β倍的。

红色框线中向上弯曲的曲线叫延音线,它可以将两个或两个以上相同音高的音符相连,在钢琴演奏时作爲一个音符,它的拍值等于这些音符的拍值总和。当然延音线也可以用向下弯曲的曲线表示。

音频与频率对照表 

通过上述的音频与频率对照表根据频率(HZ)的值可以控制定时器产生相应频率的计时。如何用单片机产生频率就可以用定时器+中断。

周期的单位(s):T = 1/f(频率) 由于转换的时间单位数值比较小(s)单位的话,那么我们把周期时间单位转换成(us)乘以10^6次方。

注⇢在这里周期/2(us)是因为一个周期的占空比是(50%)也就是半个周期的高电平以及半个周期的低电平。重装载值就是定时器当中计数值在这里总数是65535us减去的数字是溢出差值这个就是决定了它的一个音调频率的一个值了。在写程序的时候我们可以把这些存放进数组当中去。然后获取相对应的值放到定时器中断当中即可。如果对这个定时器不熟悉或者是忘了的话可以看博主前面的文章哟(●'◡'●)

蜂鸣器发声

让蜂鸣器响应发声的话特别容易我们只需要把IO口翻转一下即可。

#include <REGX52.H>
sbit Buzzer = P1^5;
int main(void)
{
    Buzzer=!Buzzer;
}

显然上述代码是不允许让蜂鸣器持续发生的,因为我们只是翻转了一次IO口相当于没有发出声音。所以我们需要用到循环和延迟保证让它翻转的时间够长。如下代码所示↓

#include <REGX52.H>
sbit Buzzer = P1^5;
void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
int main(void)
{
	unsigned int i;
	while(1)
	{
		for(i=0;i<500;i++)
		{
			Buzzer=!Buzzer;
			Delay(1);
		}
	}
}

在上述代码当中是每隔1ms可以翻转一次IO口电平。

周期时间为高电平1ms低电平1ms一个周期时间为2ms。频率f=1/T=500HZ。

这里循环1次是1ms。那么这里的i<500就会以500HZ的频率响应500ms。

同理如果我们改成i<100的话会以100HZ的频率响应100ms。

Buzzer模块化

#include <REGX52.H>
#include <INTRINS.H>

//蜂鸣器端口:
sbit Buzzer=P1^5;

/**
  * @brief  蜂鸣器私有延时函数,延时500us
  * @param  无
  * @retval 无
  */
void Buzzer_Delay500us()		//@12.000MHz
{
	unsigned char i;

	_nop_();
	i = 247;
	while (--i);
}

/**
  * @brief  蜂鸣器发声
  * @param  ms 发声的时长(ms),范围:0~32767
  * @retval 无
  */
void Buzzer_Time(unsigned int ms)
{
	unsigned int i;
	for(i=0;i<ms*2;i++)
	{
		Buzzer=!Buzzer;
		Buzzer_Delay500us();//f=1/1ms=1000HZ,一个时间周期翻转两次。
	}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567749.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【研发日记】白话解读UDS协议(一)——19 04读取快照服务

文章目录 前言 19服务 04子服务 19 04协议 快照存储设计 快照发送设计 功能验证 分析和应用 总结 前言 近期在一个嵌入式软件开发项目中&#xff0c;要按照UDS标准开发相关功能&#xff0c;期间在翻阅UDS标准时&#xff0c;周围同事都说很多地方晦涩难懂。所以利用晚上…

ObjectiveC-08-OOP面向对象程序设计-类的分离与组合

本节用一简短的文章来说下是ObjectiveC中的类。类其实是OOP中的一个概念&#xff0c;概念上简单来讲类是它是一组关系密切属性的集合&#xff0c;所谓的关系就是对现实事物的抽象。 上面提到的关系包括很多种&#xff0c;比如has a&#xff0c; is a&#xff0c;has some等&…

基于Java,SSM,html,Vue在线视频播放管理系统网站设计

摘要 基于Java, SSM, HTML, Vue的在线视频播放管理系统网站设计是一个利用Spring框架、SpringMVC、MyBatis&#xff08;SSM&#xff09;和前端技术HTML与Vue.js实现的多功能Web应用。这个系统旨在为用户提供一个便捷、高效的平台来上传、管理和观看视频内容&#xff0c;同时兼…

Spring与SpringBoot的区别

Spring是一个开源的Java应用程序框架&#xff0c;旨在简化企业级Java应用程序的开发。它提供了一个轻量级的容器&#xff0c;用于管理应用程序中的各个组件&#xff08;如依赖注入、AOP等&#xff09;&#xff0c;并提供了丰富的功能和模块&#xff0c;用于处理数据库访问、事务…

enqueue:oracle锁机制

实现锁的方式就是排队咯&#xff0c;那么排队就是有enqueue这么个结构来管理 管理锁的结构叫队列&#xff0c;即enqueue 所有和enqueue相关的函数都叫KSQ-- kernal service enqueue lock是从应用层面看到的锁&#xff0c;enqueue是oracle内部管理锁的一个结构。 可以用v$lock_…

ajax教程

文章目录 一、原生ajax1、AJAX 简介2、特点1&#xff09;优点2&#xff09;缺点 二、http协议1、概念2、Cookie和Session机制1&#xff09;Cookie2&#xff09;Session3&#xff09;报文 二、请求头1、概念2、常见请求头&#xff1a;3、Content-Type 三、AJAX使用1、详细操作2、…

vue快速入门(三)差值表达式

注释很详细&#xff0c;直接上代码 上一篇 新增内容 插值表达式基本用法插值表达式常用公式 源码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

显示器and拓展坞PD底层协商

简介&#xff1a; PD显示器或者PD拓展坞方案中&#xff0c;连接显示设备的Type-C端口主要运行在DRP模式&#xff0c;在此模式下可以兼容Source&#xff08;显卡&#xff09;、Sink&#xff08;信号器&#xff09;、DRP&#xff08;手机、电脑&#xff09;模式的显示设备。 Sou…

维基百科:8个提升维基百科推广效果的优化技巧-华媒舍

维基百科是全球最大的在线百科全书&#xff0c;致力于向用户提供高质量、可靠的知识内容。想要让自己的文章在维基百科中获得更多的曝光度和推广效果&#xff0c;并非易事。为此&#xff0c;我们整理了以下8个提升维基百科推广效果的优化技巧。 1. 确保内容符合要求 维基百科对…

Quiet-STaR:让语言模型在“说话”前思考

大型语言模型(llm)已经变得越来越复杂&#xff0c;能够根据各种提示和问题生成人类质量的文本。但是他们的推理能力让仍然是个问题&#xff0c;与人类不同LLM经常在推理中涉及的隐含步骤中挣扎&#xff0c;这回导致输出可能在事实上不正确或缺乏逻辑。 考虑以下场景:正在阅读一…

windows下安装iteliij Idea2023.3

首先从官网下载 下载 IntelliJ IDEA – 领先的 Java 和 Kotlin IDE 双击打开进行安装&#xff1a; 安装完成后&#xff0c;需要对Idea进行稍微处理下。使用我分享给大家的文件&#xff0c;操作以下步骤&#xff1a; 注意&#xff1a;不能打开IDEA软件。 进入到scripts中点击un…

Spring Cloud微服务入门(一)

微服务的演变过程 //controller 视图交互层 前端数据处理传给service //1.DAO RequestBody userDAO String id;String type; {"id":"lcs", "type":"lcs"} //2.GET请求 findUserById&#xff1f;id1&typelcsRequestParam String …

css3之3D转换transform

css3之3D转换 一.特点二.坐标系三.3D移动&#xff08;translate3d)1.概念2.透视&#xff08;perpective)(近大远小&#xff09;&#xff08;写在父盒子上&#xff09; 四.3D旋转&#xff08;rotate3d)1.概念2.左手准则3.呈现&#xff08;transfrom-style)&#xff08;写父级盒子…

Python脚本:给TXT文件中的地铁站名添加引号

Python脚本&#xff1a;给TXT文件中的地铁站名添加引号 在日常的数据处理工作中&#xff0c;我们经常需要对文本数据进行格式化和处理。今天&#xff0c;我们就来分享一个使用Python脚本对TXT文件中的地铁站名进行处理的小技巧&#xff1a;将每行的地铁站名字加上双引号。 需求…

创新指南|贝恩的产品经理RAPID框架:解决问题的分步指南,使决策过程既高效又民主

您是否曾发现自己陷入项目的阵痛之中&#xff0c;决策混乱、角色不明确、团队成员之间的冲突不断升级&#xff1f;作为产品经理&#xff0c;驾驭这艘船穿过如此汹涌的水域可能是令人畏惧的。应对这些挑战的关键在于采用清晰、结构化的决策方法。输入贝恩的 RAPID 框架&#xff…

基于8B10B的GT收发器PHY层设计(3)PHY层设计

文章目录 前言一、设计框图二、PHY层基本传输协议三、PHY_TX模块3.1、模块接口3.2、组帧状态机描述3.3、数据大小端问题3.4、字节对齐 四、PHY_RX模块4.1、模块接口4.2、大小端转换4.3、起始位4.4、结束位4.5、axis数据流恢复 五、LFSR伪随机码六、链路空闲时期处理 前言 上一…

宁盾入选“2023年度中国高科技高成长企业榜”多个榜单

4月1日&#xff0c;由【第一新声】联合【天眼查】启动“数字未来”系列之 2023 年度中国高科技高成长企业系列榜单正式发布。宁盾入选未来独角兽企业、网络安全领域高成长企业、信创产业最佳服务商、企业数字化标杆案例 4 个榜单。 该榜单旨在发现和挖掘被资本市场关注&#xf…

基于顺序表 --- 实现简易【通讯录】

1. 多文件操作 SeqList.h //用于定义顺序表的结构&#xff0c;增删查改等函数的声明 SeqList.c //用于实现增删查改等函数 Contact.h //用于定义通讯录的结构&#xff0c;通讯录中联系人的增删查改等函数的声明 Contact.c //用于实现通讯录中增删查改等函数 Test.h //用于测试…

重磅!openGauss6.0创新版本,带着新特性正式发布了!

&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&#x1f61c;&#x1f61c; 中国DBA联盟(ACD…

最新社交相亲系统源码PHP

最新社交相亲系统源码PHP 安装环境&#xff1a; php7.2 mysql 5.7 框架&#xff1a; 后端thinkphp6 前端&#xff1a;jquery layui PC 移动端响应式 线上案例&#xff1a;https://cjr.oemsun.com/ 主要页面及功能预览 首页 相亲资料详情页 红娘跟进记录 海报、一键复制分…