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.蜂鸣器相关推荐

  1. [51单片机学习笔记TWO]----蜂鸣器

    蜂鸣器音乐播放实验 首先应该了解一下蜂鸣器音乐播放的原理,在这里我只讲一下电磁式蜂鸣器驱动原理(还有一种是压电式蜂鸣器): 电磁式蜂鸣器驱动原理: 蜂鸣器发声原理是电流通过电磁线圈,使电磁圈产生磁场来 ...

  2. AutoLeaders控制组——51单片机学习笔记(蜂鸣器、AT24C02芯片)

    本篇内容是观看B站江科大自化协UP主的教学视频所做的笔记,对其中内容有所引用,并结合自己的单片机板块进行了更改调整. 以下笔记内容以一个视频为一个片段(内容较多,可能不适合速食,望见谅) 一些内容涉及 ...

  3. C51#学习笔记01#| Keil软件的使用入门教程

    目录 CH340 USB驱动程序安装 keil软件使用具体教程 烧录软件使用 IAR工程模板的创建 Keil软件的使用具体教程: 1.新建项目[project]-[New]-[uvision proj ...

  4. 51单片机学习笔记-9蜂鸣器

    9 蜂鸣器 [toc] 注:笔记主要参考B站江科大自化协教学视频"51单片机入门教程-2020版 程序全程纯手打 从零开始入门". 注:工程及代码文件放在了本人的Github仓库. ...

  5. C51学习笔记 4.定时器

    C51 4.定时器 前言 定时器/计数器 的使用往往要结合中断,但是为保持结构,本文只提及一点中断内容 C51的定时器属于单片机的内部资源,其电路的连接和运转均再单片机内部完成. 定时器可以用于计时系 ...

  6. C51学习笔记(一)

    C51单片机 开发工具 新建工程 LED灯 原理 点亮一个LED灯 闪烁的LED灯 LED流水灯 独立按键控制LED灯暗灭 独立按键控制LED灯位移 数码管 原理 显示一个数字 显示多个数字 矩阵键盘 ...

  7. 正点原子stm32F407学习笔记3——蜂鸣器实验

    一.硬件设计 蜂鸣器为有源蜂鸣器,当 PF.8 输出高电平的时候,蜂鸣器将发声,当 PF.8 输出低电平的时候,蜂鸣器停止发声,硬件原理图如下 二.软件设计 1.新建beep.c文件 打开keil软件 ...

  8. C51学习笔记 7.LED点阵屏

    C51 7.LED点阵屏 前言 其实我们主要看的是74HC595 祝愉快 1.原理图 16根引脚,其中8根P00~P07是直接连在C51上,A1 ~A8则连在595上,以节省引脚. 我们让P0为0,A ...

  9. 51单片机学习笔记_11 蜂鸣器,识简谱,根据简谱编写蜂鸣器代码

    蜂鸣器实验 蜂鸣器简单地说,就是电磁线圈和磁铁对振动膜的作用. 单片机的是无源蜂鸣器,不能一直充电,需要外部控制器发送震荡信号,可以改变频率产生不同的音色.音调. 大多数有源蜂鸣器则没有这个效果,有源 ...

最新文章

  1. 【深度学习】Swin Transformer结构和应用分析
  2. 课堂练习之谁是水王(一)
  3. 【HDU - 1702 】ACboy needs your help again! (栈和队列,水题模拟)
  4. .net 根据模板创建html文件
  5. Keras——用Keras搭建自编码神经网络(AutoEncoder)
  6. 使用Postman工具进行简单的Get/Post测试
  7. 原子结构示意图全部_所有原子结构示意图(1-118号)最新元素周期表
  8. 【模拟电子技术Analog Electronics Technology 20】—— 反馈放大电路分析2:各种类型反馈电路的计算分析
  9. PS增效工具Camera Raw 14
  10. 夜,依旧寂寞心照不宣!
  11. 磁盘压缩卷只能压缩一半
  12. 计算机硬盘里没有内容却显示有,为什么电脑磁盘里头明明没有东西,也没隐藏文件,却显示用了12个G。求解!...
  13. 解密:顺丰是一家什么样的公司?
  14. PHP网站从服务器下载文件到本地
  15. 赛效:WPS何把文档里竖排的文字变成横排的
  16. Spring--官方文档部分翻译(第一章)
  17. 坐月子“一嫂难求”,月嫂为何这么有“钱景”?
  18. 一对数的和等于给定的数
  19. IMP-00017: following statement failed with ORACLE error 20005:(表统计信息被锁)
  20. 51nod1488 帕斯卡小三角形

热门文章

  1. 【NLP】将机器学习应用于情感分析
  2. 检索匹配的利器:正则表达式
  3. python中的set是什么意思_python中的set是什么
  4. 一个好的PS笔刷(笔触)下载论坛
  5. 评选最牛群主v1.0(哈工大Mooc)
  6. Linux下vi修改行距,调整label中text显示的行间距
  7. Vmware15 + Ubuntu18.0.4 安装教程(史上最详细记录)【多图预警】
  8. Mysql 数据库函数用法大全及示例
  9. 2022,itbird的年终总结报告
  10. 通过itextpdf操作PDF,动态向PDF文件最后一页添加图片