蜂鸣器及其原理

2023-05-16

蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器,其中压电式蜂鸣器提供一定频率的脉冲信号即可发出声音,电磁式蜂鸣器提供电源即可发出声音。

蜂鸣器氦分为有源蜂鸣器和无源蜂鸣器(这里的源不是电源,而是蜂鸣器内部是否含有振荡电路),其中有源蜂鸣器内部自带振荡电路,上电后便能发声,但发出的声音频率固定。无源蜂鸣器内部不含振荡电路,需输入脉冲信号才可发声,但因为脉冲频率可调,可通过输入不同频率的脉冲信号发出不同的音色和音调的声音,若改变输出电平的高低电平占空比,可调节蜂鸣器声音的大小。

51单片机蜂鸣器及其驱动的结构原理图:

 因为蜂鸣器所需的驱动电流比较大,51单片机的IO口输出无法达到其驱动电流,因此需使用ULN2003D芯片来驱动,当P2_5输入高电平时,BEER输出低电平,此时蜂鸣器可发声,若P2_5输入一个低电平,则BEER输出一个高电平,此时蜂鸣器不发声,ULN2003D类似于一个非门。

用无源蜂鸣器输出不同频率的声音

声音是由物体振动发出的,当物体的振动频率不同时,其发出的声音的声调不同,我们可以通过控制蜂鸣器内金属片的振动频率来产生不同频率的声音。我们可以通过给定时器赋初值来控制每次振动的时间(即振动频率)。如图为C调音符对应频率的定时器初值。

 设定完声音频率后再用延时函数设定相应时间,将音符组合后便能输出乐曲

如下为卜卦部分代码,其中有部分问题还未解决,希望诸位大佬指出代码中错误地方

#include <regx52.h>
#include "Delay.h"
#include "Timer0_Init.h"

sbit Beep=P2^5;
#define SPEED 1000     //将速度进行宏定义,方便调整乐曲播放速度
#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 count,MusicNoteSelect,Frequency;
unsigned int code MusicNoteFrequency[]={
	0,     //在第一位加一个0是为了让第一个声音频率位于数组的第一位
	63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64524,    //低音
	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 int code MusicScore[]={          //乐谱中音调即其对应的时长
	M1,2,M2,2,M3,4,M1,2,M2,2,M3,4,M5,2,M6,2,M5,4,M3,4,0,2,M3,2,M5,2,M6,2,
	M2,6,M2,2,M2,2,M3,2,M5,3,M2,1,M3,12,M1,2,M2,2,M3,4,M1,2,M2,2,M3,4,M5,2,M6,2,
	M5,4,M3,4,0,2,M3,2,M5,2,H1,2,M7,6,H1,2,M7,2,M6,2,M5,3,M6,1,M6,8,0,2,M3,2,M6,2,M7,2,
	H1,6,H1,2,H1,2,M7,2,M6,2,H1,2,M5,6,M4,2,M3,4,M5,2,M6,2,M7,6,M7,2,M7,2,H1,2,M7,2,M6,2,M6,2,H1,2,H1,4,0,2,
	M3,2,M6,2,M7,2,H1,6,H1,2,H1,2,M7,2,H1,2,H2,2,H3,3,H1,1,H1,3,M5,1,M5,8,M7,6,M7,2,M7,2,H1,2,M7,3,M6,1,M7,8,
	0,2,M6,2,H1,2,H2,2,H3,4,H3,4,H3,3,H2,1,H3,2,H6,2,H5,2,H3,2,H3,4,0,2,H3,2,H5,2,H6,2,H2,4,0,2,H2,2,H2,2,H3,2,
	H5,3,H2,1,H3,8,0,2,M6,2,H1,2,H2,2,H3,4,H3,4,H3,3,H2,1,H3,2,H6,2,H5,2,H3,2,H3,4,0,2,H3,2,H5,2,H6,2,H2,4,
	0,2,H3,2,H5,3,H3,1,H5,3,H6,1,M6,12,0,2,0xFF,
};
void main()
{
	Timer0_Init();            //定时器0初始时化
	while(1)
	{
		if(MusicScore[MusicNoteSelect]!=0xFF)   //判断乐曲是否播放完
		{
			if(MusicScore[MusicNoteSelect])     //如果对应音符不是0
			{
				Frequency=MusicScore[MusicNoteSelect];
				MusicNoteSelect++;
				Delay(SPEED/4*MusicScore[MusicNoteSelect]);          //以最短时间为单位
				MusicNoteSelect++;
			}
			else                              //若音符为0
			{
				MusicNoteSelect++;         
				TR0=0;                        //关闭定时器0,起作用是让音符为0的地方产生停顿
				Delay(SPEED/4*MusicScore[MusicNoteSelect]);
				TR0=1;                        //停顿结束后打开定时器
				MusicNoteSelect++;
			}
		}
		else
		{
			TR0=0;
		}
		
	}
}

void time0() interrupt 1   //定时器0中断函数,每次定时器溢出后都会跳转到中断函数中
{
	TH0=MusicNoteFrequency[Frequency]/256;            //设置定时器高8位
	TL0=MusicNoteFrequency[Frequency]%256;            //设置定时器低8位
	Beep=!Beep;                                       //通过反转蜂鸣器状态来产生振动从而发声
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蜂鸣器及其原理 的相关文章

  • freshclam更新clamav病毒库失败(connection failed)

    有大佬能帮帮我吗 xff1f
  • 查杀linux服务器木马,定时查杀病毒并隔离

    接收到了阿里云服务器的安全告警 xff0c 主要文件是 usr bin sshd root aa xff0c 使用以下三种方法解决 一 使用clamav 一 xff09 下载 下载方式 xff1a xff08 1 xff09 下载压缩文件
  • 外部传参的3种方式

    运行jar包时 xff0c 希望通过外部传参并获取 xff0c 框架为spring boot xff0c 有3种方式解决 前两种需要设置环境变量 spring boot 的 64 Value 64 Component public clas
  • 批量替换文件名为指定日期并删除.svn文件

    bin bash cur date 61 34 96 date 43 Y m d 96 34 cur date 61 2 批量替换该文件夹下的所有文件日期为指定日期 function replace name for file in 96
  • log4j2内置变量

    问题概述 xff1a 在log4j2 xml中中想通过 变量名 直接获取变量 xff0c 但是直接输出了 符 xff0c 并没有获取到项目中的变量 目录 一 log4j2官方配置 二 常见变量 1 bundle配置文件 2 sys系统变量
  • 构建Docker容器集群(九)

    Docker容器集群构建 使用自定义网桥连接跨主机容器 Docker默认的网桥是docker0 它只会在本机连接所有的容器 举例来说容器的虚拟网卡在主机上看一般叫做veth 而docker0网桥把所有这些网卡桥接在一起 xff0c 如下所示
  • ubuntu虚拟桌面

    用户可以自定义启动号码如 xff1a vncserver 2 注意 2前面一定要有空格 杀死vncserver进程 vncserver kill 1 这里你启动vncserver时是什么端口号要对应上 1 第一种方法 xff1a 使用geo
  • markdown编辑希腊字母

    字母名称大写markdown原文小写markdown原文alphaAA alphabetaBB betagamma Gamma gammadelta Delta deltaepsilonEE epsilon varepsilonzetaZZ
  • Linux下WRF Domain Wizard使用教程(PART2: 使用教程及 遇到的种种BUG)

    当用命令run DomainWizard打开WRFDW后 如图所示 第一步 第一栏是你的虚拟机的名称 第二栏是WPS所在的目录 第三行是WPS所需要的静态地理数据的位置 第四栏是你WRFDW项目存放的位置 这里我新创建了个domain 点击
  • Keras学习之tensor张量

    本文参考Keras中文官方网站 xff1a http keras cn readthedocs io en latest other regularizers tensor 张量 指的是指广泛的数据类型 xff0c 它是 n n 维的 n
  • 栈和排序

    题目描述 给你一个1 gt n的排列和一个栈 xff0c 入栈顺序给定 你要在不打乱入栈顺序的情况下 xff0c 对数组进行从大到小排序 当无法完全排序时 xff0c 请输出字典序最大的出栈序列 输入描述 第一行一个数n 第二行n个数 xf
  • ubuntu系统samba共享权限设置,一清二楚

    samba共享设置 在root权限下 xff0c 进入root权限的方法 su或者 sudo su root 创建系统用户 useradd m user 设置用户密码 passwd user 创建smb密码 smbpasswd a user
  • curl安装

    一 xff1a windows下安装curl 1 下载windows版本curl安装包 根据你电脑的系统选择32位或64位 因为我的电脑是64位的 所以我选择64位的安装包 curl下载地址 xff1a https curl haxx se
  • OAuth 2.0 概念及授权流程梳理

    本文可以转载 xff0c 但请注明出处https www cnblogs com hellxz p oauth2 process html OAuth2 的概念 OAuth是一个关于授权的开放网络标准 xff0c OAuth2是其2 0版本
  • 基于51单片机的12864液晶时钟C语言程序

    自己写的12864液晶时钟程序 xff0c 经过验证可以使用 xff0c 希望可以为初学者作为参考 include lt reg52 h gt include lt math h gt define uint unsigned int de
  • 耗时两个月开发的弯管机三维模型自动转档软件

    一 系统简介 SmartPipe软件根据用户提供的三维实体管子数据 xff08 stp iges brep文件 xff09 xff0c 通过全自动方式 xff0c 提取管子的轴线数据及几何特征信息 xff0c 生成弯管编程所需的xyz数据以
  • 软件评测-软件测试与软件质量

    软件测试与软件质量 软件测试 xff1a 经典的定义是在规定条件下对程序进行操作 xff0c 以发现错误 xff0c 对软件质量进行评估 因为软件是由文档 数据 及程序组成 xff0c 所以软件测试应该是对软件形成过程的文档 数据以及程序进
  • sobol敏感性分析 matlab代码

    sobol 参数敏感性分析 参考 xff1a csdn https blog csdn net xiaosebi1111 article details 46517409 wiki xff1a https en wikipedia org
  • 软件质量的8个特性

    功能性 功能完备性 功能正确性 功能适用性 性能效率 时间特性 资源利用率 容量 兼容性 共存性 互操作性 易用性 可辨识性 易学性 易操作性 用户差错 防止性 用户界面 舒适性 易访问性 可靠性 成熟性 可用性 容错性 可恢复性 信息安全

随机推荐

  • Bad configuration option: \302\240

    ssh 配置文件时奇奇怪怪的错 xff0c 我碰到的是 xff1a Bad configuration option 302 240 一直不清楚后面这个 302 240 是啥意思 xff0c 后来参考这个回答 xff1a https sta
  • CentsOS系统卡值mysql查询慢

    第一步查看系统是什么占资源 htop F1 h 查看htop使用说明 xff0c F2 s 设置选项 F3 搜索进程 F4 过滤器 xff0c 输入关键字搜索 F5 t 显示属性结构 F6 lt gt 选择排序方式 F7 减少进程的优先级
  • 精美多功能翻页时钟源码 灵感来源于fliqlo

    介绍 xff1a 一个翻页时钟的网页 xff0c 灵感来源于fliqlo 外表相似 xff0c 功能不同 功能 xff1a 看时间看秒表倒计时 说明 xff1a F11 全屏 ctrl 43 43 或 调整设置框大小 单击 或 空格 可以暂
  • vscode 报错ERROR: Unable to start debugging. Unexpected GDB output from command “-exec-run“

    1 报错信息 Unable to start debugging xff0c 如下截图所示 网上找了很多资料 xff0c 发现大部分解释都说是 xff0c 库的问题 xff0c 拷贝libstdc 43 43 6 dll 文件后 xff0c
  • 关于Ip首部最大长度(60)和最小长度(20)的计算

    第一次写博客 xff0c 可能语言组织的不是特别好 xff0c 因为是个人理解 xff0c 有不正确的地方清指出 关于ip首部长度最大值5字节和60字节的计算 首先声明几个单位 ip数据报中的单位是 位 xff08 代表 32bit xff
  • Dev-C++ 5.11 调试程序 查找程序错误

    相信大家看到我这篇博客的时候还不怎么会用dev c 43 43 调试程序吧 xff0c 那么我就给大家详解一下 xff08 切记 xff1a 要调试的程序一定要能够通过编译 xff0c 一定要通过 xff0c 一定要通过 xff0c 一定要
  • NVM安装与使用

    NVM安装与使用 介绍 nvm是nodejs的版本管理工具 xff0c 可以安装和切换不同的版本nodejs npm是依赖包的管理工具 1 下载NVM GITHUB https github com coreybutler nvm wind
  • maven

    http mvnrepository com 打开网面 xff0c 搜索要查询的jar包名 xff0c 直接复制配制文件到你自己的pom xml中即可 xff0c 如 xff1a lt dependency gt lt groupId gt
  • 密集脚集成块的手工焊接方法

    电子爱好者在进行电子设计制作时 xff0c 最头痛的是焊接密集脚贴片集成块 如 VS1003的焊接 xff0c 往往感到无从下手 下面根据我设计制作时的经验 xff0c 将具体的手工操作方法介绍给大家 xff0c 希望能助你一臂之力 所需辅
  • python批量新建文件、批量保存图片、批量创建文件夹

    python批量新建文件 批量保存图片 批量创建文件夹 新建文件 xff1a 假设我要新建10个txt文件 for i in range 10 这里的 指代的是当前文件夹 i表示文件的名称 f 61 open 39 s 39 i 43 39
  • 操作系统——实验一.进程管理

    include 34 conio h 34 include 34 stdio h 34 include 34 stdlib h 34 struct jincheng type int pid int youxian int daxiao i
  • 计算机中堆栈的概念

    这两天学习win32的API xff0c 了解到了计算机中堆栈的概念 xff0c 相信很多程序员有时候也弄不明白计算机中的堆栈的数据结构 再次为堆栈做一下详细解析 在英文中 xff0c 我们管栈称为stack xff0c 管堆称为heap
  • 使用sqlite3_exec回掉函数输出查询内容

    include lt stdlib h gt include lt stdio h gt include lt sqlite3 h gt int my callback void param int f num char f value c
  • 网络数据传输的三种校验方法

    一 奇偶校验 根据被传输的一组二进制代码的数位中 1 的个数是奇数或偶数来进行校验 采用奇数的称为奇校验 xff0c 反之 xff0c 称为偶校验 采用何种校验是事先规定好的 通常专门设置一个奇偶校验位 xff0c 用它使这组代码中 1 的
  • gcc——预处理(预编译),编译,汇编,链接

    一 xff0c 预编译 操作步骤 xff1a gcc E hello c o hello i 主要作用 xff1a 处理关于 的指令 1 删除 define xff0c 展开所有宏定义 例 define portnumber 3333 2
  • 增大Linux的socket最大连接数(针对select,要编译内核)

    最近接的项目是模拟多个socket 客户端与服务器进行通信 由于Linux 系统的限制 xff0c 在linux include linux posix types h文件中有如下的宏定义 xff1a undef FD SETSIZE de
  • AOSP 源码下载

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net wuxiaolongtongxue article details 85269284 网上关于这块大部分教程都是无效的 xf
  • SIP协议错误代码code大全(中英文对照)

    1 100 Trying 说明caller正在呼叫 xff0c 但还没联系上callee 180 Ringing 说明callee已经被联系上 callee的铃正在响 收到这个信息后 xff0c 等待200 OK 2 181 Call is
  • Ubuntu12.04使用VNC时,不显示图形界面问题的解决

    这个是在Ubuntu上安装vncserver时遇到的问题 xff1a 现有一台ubuntu的机器 xff0c 我在上面使用 sudo apt get install vnc4server 装了vnc服务端 然后运行vncserver xff
  • 蜂鸣器及其原理

    蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器 xff0c 其中压电式蜂鸣器提供一定频率的脉冲信号即可发出声音 xff0c 电磁式蜂鸣器提供电源即可发出声音 蜂鸣器氦分为有源蜂鸣器和无源蜂鸣器 xff08 这里的源不是电源 xff0c 而是蜂鸣器