C51学习笔记 9.蜂鸣器
C51 9.蜂鸣器
前言
蜂鸣器按驱动方式可分为有源蜂鸣器和无源蜂鸣器。
我们这里介绍无源蜂鸣器。
其内部不带震荡源,需要控制器提供振荡脉冲才可发声,调整提供振荡脉冲的频率,可发出不同频率的声音。
祝愉快
1.原理图
我们需要手动输入不同频率的BEEP电信号,来实现不同音调的效果。
2.C代码
蜂鸣器播放《天空之城》
#include <REGX52.H>
#include "Delay.h"
#include "Timer0.h"//蜂鸣器端口定义
sbit Buzzer=P2^5;//播放速度,值为四分音符的时长(ms)
#define SPEED 500//音符与索引对应表,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[]={//音符,时值,//1P, 4,P, 4,P, 4,M6, 2,M7, 2,H1, 4+2,M7, 2,H1, 4,H3, 4,M7, 4+4+4,M3, 2,M3, 2,//2M6, 4+2,M5, 2,M6, 4,H1, 4,M5, 4+4+4,M3, 4,M4, 4+2,M3, 2,M4, 4,H1, 4,//3M3, 4+4,P, 2,H1, 2,H1, 2,H1, 2,M7, 4+2,M4_,2,M4_,4,M7, 4,M7, 8,P, 4,M6, 2,M7, 2,//4H1, 4+2,M7, 2,H1, 4,H3, 4,M7, 4+4+4,M3, 2,M3, 2,M6, 4+2,M5, 2,M6, 4,H1, 4,//5M5, 4+4+4,M2, 2,M3, 2,M4, 4,H1, 2,M7, 2+2,H1, 2+4,H2, 2,H2, 2,H3, 2,H1, 2+4+4,//6H1, 2,M7, 2,M6, 2,M6, 2,M7, 4,M5_,4,M6, 4+4+4,H1, 2,H2, 2,H3, 4+2,H2, 2,H3, 4,H5, 4,//7H2, 4+4+4,M5, 2,M5, 2,H1, 4+2,M7, 2,H1, 4,H3, 4,H3, 4+4+4+4,//8M6, 2,M7, 2,H1, 4,M7, 4,H2, 2,H2, 2,H1, 4+2,M5, 2+4+4,H4, 4,H3, 4,H3, 4,H1, 4,//9H3, 4+4+4,H3, 4,H6, 4+4,H5, 4,H5, 4,H3, 2,H2, 2,H1, 4+4,P, 2,H1, 2,//10H2, 4,H1, 2,H2, 2,H2, 4,H5, 4,H3, 4+4+4,H3, 4,H6, 4+4,H5, 4+4,//11H3, 2,H2, 2,H1, 4+4,P, 2,H1, 2,H2, 4,H1, 2,H2, 2+4,M7, 4,M6, 4+4+4,P, 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口}
}
- 我们通过不同时间周期调用Buzzer取反,以达到不同频率电信号的效果
- 在音符对应的时值这个时间范围内Buzzer不断取反
总结
这个中断调用了多少次?这个问题是理解上面代码的关键,定时器的计数是很快的,之前的代码为了达到每一秒中断一次的效果,我们在里面写了个计数器,当计数器到100时才运行代码。
但是这次没有,它以一个频率在里面取反,我们只关心频率而不关心调用的次数。而在固定的时间内,中断调用的次数由频率决定。
我们用周期来表示频率。通过调整TL和TH的初始值来表示不同的周期。让蜂鸣器以不同频率取反。
其他难点可能是看乐谱吧,本文就不提及了。
C51学习笔记 9.蜂鸣器相关推荐
- [51单片机学习笔记TWO]----蜂鸣器
蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...
- AutoLeaders控制组——51单片机学习笔记(蜂鸣器、AT24C02芯片)
本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...
- C51#学习笔记01#| Keil软件的使用入门教程
目录 CH340 USB驱动程序安装 keil软件使用具体教程 烧录软件使用 IAR工程模板的创建 Keil软件的使用具体教程: 1.新建项目[project]-[New]-[uvision proj ...
- 51单片机学习笔记-9蜂鸣器
9 蜂鸣器 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓库. ...
- C51学习笔记 4.定时器
C51 4.定时器 前言 定时器/计数器 的使用往往要结合中断,但是为保持结构,本文只提及一点中断内容 C51的定时器属于单片机的内部资源,其电路的连接和运转均再单片机内部完成. 定时器可以用于计时系 ...
- C51学习笔记(一)
C51单片机 开发工具 新建工程 LED灯 原理 点亮一个LED灯 闪烁的LED灯 LED流水灯 独立按键控制LED灯暗灭 独立按键控制LED灯位移 数码管 原理 显示一个数字 显示多个数字 矩阵键盘 ...
- 正点原子stm32F407学习笔记3——蜂鸣器实验
一.硬件设计 蜂鸣器为有源蜂鸣器,当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声,硬件原理图如下 二.软件设计 1.新建beep.c文件 打开keil软件 ...
- C51学习笔记 7.LED点阵屏
C51 7.LED点阵屏 前言 其实我们主要看的是74HC595 祝愉快 1.原理图 16根引脚,其中8根P00~P07是直接连在C51上,A1 ~A8则连在595上,以节省引脚. 我们让P0为0,A ...
- 51单片机学习笔记_11 蜂鸣器,识简谱,根据简谱编写蜂鸣器代码
蜂鸣器实验 蜂鸣器简单地说,就是电磁线圈和磁铁对振动膜的作用. 单片机的是无源蜂鸣器,不能一直充电,需要外部控制器发送震荡信号,可以改变频率产生不同的音色.音调. 大多数有源蜂鸣器则没有这个效果,有源 ...
最新文章
- 【深度学习】Swin Transformer结构和应用分析
- 课堂练习之谁是水王(一)
- 【HDU - 1702 】ACboy needs your help again! (栈和队列,水题模拟)
- .net 根据模板创建html文件
- Keras——用Keras搭建自编码神经网络(AutoEncoder)
- 使用Postman工具进行简单的Get/Post测试
- 原子结构示意图全部_所有原子结构示意图(1-118号)最新元素周期表
- 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
- PS增效工具Camera Raw 14
- 夜,依旧寂寞心照不宣!
- 磁盘压缩卷只能压缩一半
- 计算机硬盘里没有内容却显示有,为什么电脑磁盘里头明明没有东西,也没隐藏文件,却显示用了12个G。求解!...
- 解密:顺丰是一家什么样的公司?
- PHP网站从服务器下载文件到本地
- 赛效:WPS何把文档里竖排的文字变成横排的
- Spring--官方文档部分翻译(第一章)
- 坐月子“一嫂难求”,月嫂为何这么有“钱景”?
- 一对数的和等于给定的数
- IMP-00017: following statement failed with ORACLE error 20005:(表统计信息被锁)
- 51nod1488 帕斯卡小三角形
热门文章
- 【NLP】将机器学习应用于情感分析
- 检索匹配的利器:正则表达式
- python中的set是什么意思_python中的set是什么
- 一个好的PS笔刷(笔触)下载论坛
- 评选最牛群主v1.0(哈工大Mooc)
- Linux下vi修改行距,调整label中text显示的行间距
- Vmware15 + Ubuntu18.0.4 安装教程(史上最详细记录)【多图预警】
- Mysql 数据库函数用法大全及示例
- 2022,itbird的年终总结报告
- 通过itextpdf操作PDF,动态向PDF文件最后一页添加图片