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单片机实验-蜂鸣器播放音乐相关推荐

  1. 51单片机_11-2 蜂鸣器播放音乐

    文章目录 要求 资源 main函数 要求 控制蜂鸣器播放音乐 资源 工程文件压缩包 链接:https://pan.baidu.com/s/1hA-aa0JRP33IlOYFNzKf7A 提取码:0id ...

  2. (十)51单片机——利用蜂鸣器播放《孤勇者》(附成果展示)

    目录 硬件部分 蜂鸣器介绍 驱动电路 ULN2003 乐理部分 音符 音符与频率对照 代码部分 运行结果 随着最近孤勇者成为小朋友们的接头暗号之后,于是产生了利用单片机去播放孤勇者的想法,接下来我们来 ...

  3. 利用CC2530单片机的蜂鸣器播放音乐的代码

    使用 CC2530 单片机播放音乐需要使用蜂鸣器,这是一个较简单的方法. 下面是一个例子,它使用蜂鸣器播放了著名的<莫扎特第五交响曲>的第一段: #include "ioCC25 ...

  4. 蜂鸣器播放爱你歌曲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, ...

  5. 51单片机实现蜂鸣器播放小星星

    在中断的时候降了一个调,一开始没发现后面也懒得改了. unsigned int code FreqTable[]={63628,63731,63835,63928,64021,64103,64185, ...

  6. 单片机并行口控制蜂鸣器播放音乐

    要用单片机并行口控制蜂鸣器播放音乐,需要完成以下步骤: 设计音乐:需要先确定音乐的节拍和音符,并将其转换为代码中的数值. 设置并行口:需要将单片机的并行口配置为输出模式,以便控制蜂鸣器. 编写代码:需 ...

  7. 51单片机控制蜂鸣器发SOS国际求救信号声音实验

    说明:本文是51单片机控制蜂鸣器发声实验的高级版,和上个实验差不多,上个实验是控制蜂鸣器发声,本实验可以理解为控制蜂鸣器间断发出不同长度的声音,本文同样重在夯实基础,如果是大神,请自觉飘过. 好了我们 ...

  8. python蜂鸣器天空之城频率_51单片机蜂鸣器播放音乐天空之城PPT教程+程序+Proteus仿真...

    /*************** author:zc description: 蜂鸣器播放音乐 天空之城 晶振11.0592Mhz 实现方法: while(1)循环中生成音调方波: 定时器1记录每个音 ...

  9. MCU-51:单片机蜂鸣器播放音乐和提示音

    目录 一.蜂鸣器介绍 二.驱动电路 2.1 三极管驱动 2.2 集成电路驱动 三.蜂鸣器播放音乐 3.1 键盘与音符对照 3.2 音符与频率对照 3.3 简谱 四.代码演示 4.1 按键蜂鸣器播放提示 ...

  10. FPGA实现蜂鸣器播放音乐实验,以儿歌《两只老虎》为例

    ** FPGA实现蜂鸣器播放音乐 ** 实现功能: 开发板上电后,通过蜂鸣器播放<两只老虎>. 设计思路 原理:想要让蜂鸣器播放音乐,就需要知道每个音符的频率,再通过换算将频率转换为周期, ...

最新文章

  1. java实现的18位×××格式验证算法
  2. 表变量是什么_为什么要使用二级指针?
  3. HDU 1271整数对
  4. Scrum联盟发布《2016年度Scrum状态调查报告》
  5. Oracle-OLAP和OLTP解读
  6. 集存款(复利单利)贷款为一体的计算器(最新版)
  7. 单例设计模式详解+源代码+JDK源码应用——Java设计模式系列学习笔记
  8. 零基础学Java的10个方法
  9. nvcc fatal : '--ptxas-options=-v': expected a number
  10. pmp考试有题库么?有多少题?
  11. 计算机文化基础习题及答案
  12. libtorrent源码分析(四)LSD实现
  13. poj3207 2-SAT
  14. uva-10177 - (2/3/4)-D Sqr/Rects/Cubes/Boxes?
  15. 香港服务器防攻击能力怎么样
  16. Angular国际化中ngx-translate使用
  17. 腾科张老师教你如何在cisco路由器上部署和使用FTP/TFTP
  18. Sin City --《罪恶之城》
  19. XTU OJ 1324 Hash
  20. 第8章 IP代理使用技巧与实战(8.1 结合Requests库使用IP代理)

热门文章

  1. wps怎么下载仿宋gb2312_仿宋gb2312字体官方下载
  2. Java常用到的快捷键
  3. Dos命令入侵局域网电脑
  4. 0302 GDB调试走起【给PHP写插件】
  5. Redis势不可挡系列之概念剖析
  6. 学会这些主流的数位板手绘绘画软件,你可以横着走了!
  7. ibm服务器如何进入u盘装系统,加密u盘在电脑上怎么打开ibm服务器u盘装系统
  8. java开发安卓app_开发安卓app常用的三种开发语言
  9. JDK_API官方标准中文版(希望对大家有用)
  10. XLSTransformer生成excel文件简单示例