51单片机实验-蜂鸣器播放音乐
51单片机实验-蜂鸣器播放音乐
题目:编程实现利用单片机使蜂鸣器播放“茉莉花”的乐曲。
学习单片机时写的,利用单片机控制蜂鸣器播放乐曲,开发板上的蜂鸣器可以用三极管驱动,需要根据乐谱来设置当前节拍的发声时间。中断函数来控制蜂鸣器的发声。
#include<reg51.h>
sbit Buzz = P1^6; //声明绑定蜂鸣器,接线时只需将此IO口与蜂鸣器(扬声器)信号输入端相连即可
unsigned int code NoteFrequ[]={ 523,587,659,698,784,880,988, //中音对应的1-7 1047,1175,1319,1397,1568,1760,1976, //高音对应的1-7262,294,330,349,392,440,494}; //低音对应的1-7unsigned int code NoteReload[]={ //中音1-7和高音1-7对应的定时器重载值65536 - (11059200/12) /(523*2),//中音1-7 65536 - (11059200/12) /(587*2), 65536 - (11059200/12) /(659*2),65536 - (11059200/12) /(698*2),65536 - (11059200/12) /(784*2), 65536 - (11059200/12) /(880*2),65536 - (11059200/12) /(988*2),65536 - (11059200/12) /(1047*2),//高音1-7 65536 - (11059200/12) /(1175*2), 65536 - (11059200/12) /(1319*2), 65536 - (11059200/12) /(1397*2),65536 - (11059200/12) /(1568*2),65536 - (11059200/12) /(1760*2),65536 - (11059200/12) /(1976*2),65536 - (11059200/12) /(262*2), //低音1-765536 - (11059200/12) /(294*2),65536 - (11059200/12) /(330*2),65536 - (11059200/12) /(349*2),65536 - (11059200/12) /(392*2),65536 - (11059200/12) /(440*2),65536 - (11059200/12) /(494*2)};bit enable = 1; //发声使能表标识
bit tmrflay = 0; //定时器中中断完成标识unsigned char T0RH = 0xff; //T0重载值高字节
unsigned char T0RL = 0x00; //T0重载值低字节
void PlayTwoTiger(); void main()
{ unsigned int i;EA = 1;TMOD =0x01; //模式1 TH0 = T0RH;TL0 = T0RL; ET0 = 1; //使能T0中断TR0 = 1; //启动while(1){ PlayTwoTiger();for(i=0;i<40000;i++); }
}
/**音乐函数**/
void PlayTwoTiger()
{unsigned char beat; //节拍索引unsigned char note; //节拍对应音符unsigned int time=0; //节拍计时unsigned int beattime=0; //总时间计时unsigned int soundtime=0; //没拍发声计时unsigned char code PlayTwoTigerNote[]={ //音符表3,3,5,6,8,8,6,5,5,6,5,3,3,5,6,8,8,6,5,5,6,5,5,5,5,3,5,6,6,5,3,2,3,5,3,2,1,1,2,1,3,2,1,3,2,3,5,6,8,5,2,3,5,2,3,1,20,19,20,1,2,3,1,2,1,20,19}; unsigned char code PlayTwoBeat[]={ //节拍表,4表示一拍,1表示1/4拍,8表示两拍4,2,2,2,2,2,2,4,2,2,8,4,2,2,2,2,2,2,4,2,2,8,4,4,4,2,2,4,4,8,4,2,2,4,2,2,4,2,2,8,2,2,2,2,6,2,4,2,2,8,4,2,2,2,2,2,2,8,4,4,6,2,2,2,2,2,16}; for(beat=0; beat<sizeof(PlayTwoTigerNote);) //节拍索引循环变量{ while(!tmrflay); //每次定时器中断完成 节拍处理 tmrflay = 0; if(time == 0) //节拍播放完成重启{note = PlayTwoTigerNote[beat]-1;T0RH = NoteReload[note]>>8;T0RL = NoteReload[note]; //计算总时间,右移2位等于除4,移位代替除法加快速度beattime = (PlayTwoBeat[beat]*NoteFrequ[note])>>2; //计算发声时间,为总时间的0.75ssoundtime =beattime - (beattime>>2); enable = 1; //开始发声 time++; }else //节拍播放未结束,则继续处理{if(time >= beattime) //当前时间清零 {time = 0; //准备重新启动beat++; }else //累加时间{time++; if(time == soundtime) //发声时间到达;关闭蜂鸣器{enable =0; //用以区分连续两个节拍 }} }}
}void InterRupt() interrupt 1 //中断服务
{TH0 =T0RH;TL0 =T0RL;tmrflay = 1;if(enable){ Buzz=~Buzz;}else{ Buzz=1;}
}
若有问题,评论留言~
51单片机实验-蜂鸣器播放音乐相关推荐
- 51单片机_11-2 蜂鸣器播放音乐
文章目录 要求 资源 main函数 要求 控制蜂鸣器播放音乐 资源 工程文件压缩包 链接:https://pan.baidu.com/s/1hA-aa0JRP33IlOYFNzKf7A 提取码:0id ...
- (十)51单片机——利用蜂鸣器播放《孤勇者》(附成果展示)
目录 硬件部分 蜂鸣器介绍 驱动电路 ULN2003 乐理部分 音符 音符与频率对照 代码部分 运行结果 随着最近孤勇者成为小朋友们的接头暗号之后,于是产生了利用单片机去播放孤勇者的想法,接下来我们来 ...
- 利用CC2530单片机的蜂鸣器播放音乐的代码
使用 CC2530 单片机播放音乐需要使用蜂鸣器,这是一个较简单的方法. 下面是一个例子,它使用蜂鸣器播放了著名的<莫扎特第五交响曲>的第一段: #include "ioCC25 ...
- 蜂鸣器播放爱你歌曲c语言程序设计,51单片机控制蜂鸣器播放5首歌曲汇编程序...
欢乐颂 DB 32,32,32,32,32,32,32,32,32,32,32,32,48,16,64 DB 32,32,32,32,32,16,16,32,32,32,16,16,32,32,32, ...
- 51单片机实现蜂鸣器播放小星星
在中断的时候降了一个调,一开始没发现后面也懒得改了. unsigned int code FreqTable[]={63628,63731,63835,63928,64021,64103,64185, ...
- 单片机并行口控制蜂鸣器播放音乐
要用单片机并行口控制蜂鸣器播放音乐,需要完成以下步骤: 设计音乐:需要先确定音乐的节拍和音符,并将其转换为代码中的数值. 设置并行口:需要将单片机的并行口配置为输出模式,以便控制蜂鸣器. 编写代码:需 ...
- 51单片机控制蜂鸣器发SOS国际求救信号声音实验
说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过. 好了我们 ...
- python蜂鸣器天空之城频率_51单片机蜂鸣器播放音乐天空之城PPT教程+程序+Proteus仿真...
/*************** author:zc description: 蜂鸣器播放音乐 天空之城 晶振11.0592Mhz 实现方法: while(1)循环中生成音调方波: 定时器1记录每个音 ...
- MCU-51:单片机蜂鸣器播放音乐和提示音
目录 一.蜂鸣器介绍 二.驱动电路 2.1 三极管驱动 2.2 集成电路驱动 三.蜂鸣器播放音乐 3.1 键盘与音符对照 3.2 音符与频率对照 3.3 简谱 四.代码演示 4.1 按键蜂鸣器播放提示 ...
- FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例
** FPGA实现蜂鸣器播放音乐 ** 实现功能: 开发板上电后,通过蜂鸣器播放<两只老虎>. 设计思路 原理:想要让蜂鸣器播放音乐,就需要知道每个音符的频率,再通过换算将频率转换为周期, ...
最新文章
- java实现的18位×××格式验证算法
- 表变量是什么_为什么要使用二级指针?
- HDU 1271整数对
- Scrum联盟发布《2016年度Scrum状态调查报告》
- Oracle-OLAP和OLTP解读
- 集存款(复利单利)贷款为一体的计算器(最新版)
- 单例设计模式详解+源代码+JDK源码应用——Java设计模式系列学习笔记
- 零基础学Java的10个方法
- nvcc fatal : '--ptxas-options=-v': expected a number
- pmp考试有题库么?有多少题?
- 计算机文化基础习题及答案
- libtorrent源码分析(四)LSD实现
- poj3207 2-SAT
- uva-10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?
- 香港服务器防攻击能力怎么样
- Angular国际化中ngx-translate使用
- 腾科张老师教你如何在cisco路由器上部署和使用FTP/TFTP
- Sin City --《罪恶之城》
- XTU OJ 1324 Hash
- 第8章 IP代理使用技巧与实战(8.1 结合Requests库使用IP代理)