单片机之蜂鸣器

2024-04-06 10:12
文章标签 单片机 蜂鸣器

本文主要是介绍单片机之蜂鸣器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

蜂鸣器介绍

蜂鸣器的分类

发声原理分类

按有源无源分类

三极管驱动

蜂鸣器原理

音符与频率对照表

蜂鸣器播放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——工作方式2TH0=(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表示不发声比如120TR0=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;
}

这篇关于单片机之蜂鸣器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/879660

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

零基础STM32单片机编程入门(一)初识STM32单片机

文章目录 一.概要二.单片机型号命名规则三.STM32F103系统架构四.STM32F103C8T6单片机启动流程五.STM32F103C8T6单片机主要外设资源六.编程过程中芯片数据手册的作用1.单片机外设资源情况2.STM32单片机内部框图3.STM32单片机管脚图4.STM32单片机每个管脚可配功能5.单片机功耗数据6.FALSH编程时间,擦写次数7.I/O高低电平电压表格8.外设接口

STM32单片机PWR电源控制详解

文章目录 1. PWR概述 2. 电源结构框图 3. 上电复位和掉电复位 4. 可编程电压监测器 5. 低功耗模式 6. 模式选择 6.1 睡眠模式 6.2 停止模式 6.3 待机模式 7. 代码示例 1. PWR概述 PWR(Power Control)电源控制,负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能。 可编程电压监测器

【单片机毕业设计选题24024】-房间自动除湿控制系统

系统功能: 系统分为手动和自动模式,上电默认为自动模式。自动模式下如果获取到湿度 值大于设定的湿度值则自动打开风扇,手动模式下手动开关风扇。 系统上电后显示“欢迎使用除湿控制系统请稍后”,两秒钟后进入主页面显示。 第一行显示系统模式,手动或自动模式 第二行显示获取到的温湿度 第三行显示设置的湿度阈值 第四行显示风扇状态和系统报警状态,风扇状态有开关状态,系统状态和OK和 NG状态。

基于51单片机抽奖系统

基于51单片机抽奖系统 (仿真+程序) 功能介绍 具体功能: 1.利用5片74HC495对单片机的IO进行串并转换,进而控制5个1位数码管; 2.采用一个独立按键用于抽奖系统的启停控制; 3.8位拨码开关是用于设定随机数发生器的“种子值”(初始值); ​演示视频: 基于51单片机抽奖系统  添加图片注释,不超过 140 字(可选) 程序 #inclu

江协科技51单片机学习- p16 矩阵键盘

🚀write in front🚀   🔎大家好,我是黄桃罐头,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​  💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚  前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习

【深海王国】小学生都能玩的单片机?零基础入门单片机Arduino带你打开嵌入式的大门!(8)

Hi٩(๑o๑)۶, 各位深海王国的同志们,早上下午晚上凌晨好呀~辛勤工作的你今天也辛苦啦 (o゜▽゜)o☆ 今天大都督继续为大家带来系列——小学生都能玩的单片机!带你一周内快速走进嵌入式的大门,let’s go! (8)软串口与SoftwareSerial库使用 在第六节中我们提到了,如果我们Arduino开发板的0、1号引脚接线了,即硬件串口被占用了,想给Arduino下载程序,就需要先

stm32学习笔记---GPIO输出(代码部分)LED闪烁/流水灯/蜂鸣器

目录 面包板的使用方法 第一个演示代码:LED闪烁 最后一次快速新建工程演示 点击新建工程 选择芯片 在工程文件夹中创建Start、Library、User Start文件夹的必备文件复制操作 Library文件夹的必备文件复制操作 User文件夹的必备文件复制操作 在keil中创建Start、Library、User分组并添加文件 添加Start、Library、User文

江协科技51单片机学习- p11 Proteus安装模拟51单片机

前言: 本文是根据哔哩哔哩网站上“江协科技51单片机”视频的学习笔记,在这里会记录下江协科技51单片机开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了江协科技51单片机教学视频和链接中的内容。 引用: Proteus快速入门(最详细教程)-CSDN博客  数码管显示: 【51单片机实验笔记】LED篇(三) 数码管的基本控制_51单片机数码管-CSDN博客 https

51单片机STC89C52RC——6.1 中断系统

一,文字层面理解          反正我看下面的几段文字时脑壳没有正常运转。一个头几个大         中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。         当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种功能的部件