单片机 音乐编写 《渴望》

发布者:云自南国来最新更新时间:2016-09-27 来源: eefocus关键字:单片机  音乐编写 手机看文章 扫描二维码
随时随地手机看文章
用定时器T0的中断实现"渴望"主题曲的播放
#include   //包含51单片机寄存器定义的头文件
sbit sound=P3^7;    //将sound位定义为P3.7
unsigned int C;     //储存定时器的定时常数
//以下是C调低音的音频宏定义
#define l_dao 262   //将“l_dao”宏定义为低音“1”的频率262Hz
#define l_re 286    //将“l_re”宏定义为低音“2”的频率286Hz
#define l_mi 311    //将“l_mi”宏定义为低音“3”的频率311Hz
#define l_fa 349    //将“l_fa”宏定义为低音“4”的频率349Hz
#define l_sao 392   //将“l_sao”宏定义为低音“5”的频率392Hz
#define l_la 440    //将“l_a”宏定义为低音“6”的频率440Hz
#define l_xi 494    //将“l_xi”宏定义为低音“7”的频率494Hz
//以下是C调中音的音频宏定义
#define dao 523     //将“dao”宏定义为中音“1”的频率523Hz
#define re 587      //将“re”宏定义为中音“2”的频率587Hz
#define mi 659      //将“mi”宏定义为中音“3”的频率659Hz
#define fa 698      //将“fa”宏定义为中音“4”的频率698Hz
#define sao 784     //将“sao”宏定义为中音“5”的频率784Hz
#define la 880      //将“la”宏定义为中音“6”的频率880Hz
#define xi 987      //将“xi”宏定义为中音“7”的频率523H      
//以下是C调高音的音频宏定义
#define h_dao 1046     //将“h_dao”宏定义为高音“1”的频率1046Hz
#define h_re 1174      //将“h_re”宏定义为高音“2”的频率1174Hz
#define h_mi 1318      //将“h_mi”宏定义为高音“3”的频率1318Hz
#define h_fa 1396     //将“h_fa”宏定义为高音“4”的频率1396Hz
#define h_sao 1567    //将“h_sao”宏定义为高音“5”的频率1567Hz
#define h_la 1760     //将“h_la”宏定义为高音“6”的频率1760Hz
#define h_xi 1975     //将“h_xi”宏定义为高音“7”的频率1975Hz
/*******************************************
函数功能:1个延时单位,延时200ms
******************************************/
void delay()               
   {
     unsigned char i,j;
  for(i=0;i<250;i++)
    for(j=0;j<250;j++)
    ;
   }
/*******************************************
函数功能:主函数
******************************************/ 
void main(void)
  {
  unsigned char i,j;     
//以下是《渴望》片头曲的一段简谱
   unsigned  int code f[]={re,mi,re,dao,l_la,dao,l_la,   //每行对应一小节音符
                           l_sao,l_mi,l_sao,l_la,dao,
      l_la,dao,sao,la,mi,sao,
      re, 
      mi,re,mi,sao,mi,
      l_sao,l_mi,l_sao,l_la,dao,
                           l_la,l_la,dao,l_la,l_sao,l_re,l_mi,
l_sao,
re,re,sao,la,sao,
fa,mi,sao,mi,
la,sao,mi,re,mi,l_la,dao,
re,
mi,re,mi,sao,mi,
l_sao,l_mi,l_sao,l_la,dao,
l_la,dao,re,l_la,dao,re,mi,
re,
l_la,dao,re,l_la,dao,re,mi,
re,
0xff}; //以0xff作为音符的结束标志 
//以下是简谱中每个音符的节拍
//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位 
unsigned char code JP[ ]={4,1,1,4,1,1,2,  
                     2,2,2,2,8,
4,2,3,1,2,2,
10,
4,2,2,4,4,
2,2,2,2,4,
                     2,2,2,2,2,2,2,
10,
4,4,4,2,2,
4,2,4,4,
4,2,2,2,2,2,2,
10,
4,2,2,4,4,
2,2,2,2,6,
4,2,2,4,1,1,4,
10,
4,2,2,4,1,1,4,
10
};
   EA=1;         //开总中断
   ET0=1;        //定时器T0中断允许
      TMOD=0x00;    // 使用定时器T0的模式1(13位计数器)
   while(1)       //无限循环
{
i=0;   //从第1个音符f[0]开始播放
      while(f[i]!=0xff)            //只要没有读到结束标志就继续播放
   {
              C=460830/f[i];    
              TH0=(8192-C)/32;   //可证明这是13位计数器TH0高8位的赋初值方法
              TL0=(8192-C)%32;   //可证明这是13位计数器TL0低5位的赋初值方法
              TR0=1;             //启动定时器T0
  for(j=0;j                   delay();          //延时1个节拍单位
  TR0=0;                //关闭定时器T0
     i++;                 //播放下一个音符
  }   


/***********************************************************
函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频的方波
************************************************************/
void Time0(void ) interrupt 1 using 1  
  {
    sound=!sound;      //将P3.7引脚输出电平取反,形成方波  
    TH0=(8192-C)/32;   //可证明这是13位计数器TH0高8位的赋初值方法
    TL0=(8192-C)%32;   //可证明这是13位计数器TL0低5位的赋初值方法 
  }
关键字:单片机  音乐编写 引用地址:单片机 音乐编写 《渴望》

上一篇:DS18b20 测温程序详解
下一篇:单片机编程 音乐编程程序

推荐阅读最新更新时间:2024-03-16 15:12

单片机之间通信(类红外发送与接收)
void call_user_sent() { static bit data_flag=0; static unsigned char a=0,b=0,c=0; TRISB5=1; TRISB2=0; if(!data_flag) //起始头 { c++; if(c==1) RB2=0; if(c==41) RB2=1; if(c =51) { c=0; data_flag=1; } } if(data_flag) //数据开始 { c++;
[单片机]
基于FRAM技术的MSP430微控制器能量采集
  对于很多人来说,第一次接触能量采集可能是在早期使用太阳能便携式计算器的时候,虽然如今这种类型的计算器已不再是主流,但是它所使用的技术和理念仍然应用于我们的日常生活中。目前,我们在许多的应用中都能看到能量采集的身影,例如传感器节点、风力涡轮机和室内供能应用等。不过,即使对于这项技术的讨论较之前已经有了很大的发展,当涉及到能量采集时,开发人员仍然面临着与数十年前一样的挑战。   为了在不带来负面影响的情况下产生出所需的能量,通常需要一块物理尺寸很大的太阳能板和一套巨大的热能采集装置,或者是通过设备发出不同频率范围的振动来获得能量,而一切都是由所使用的系统决定。因此,在很多情况下,这个系统的成本甚至会超过取代传统电源所带来的优势
[单片机]
基于FRAM技术的MSP430<font color='red'>微控制器</font>能量采集
单片机硬件设计的经验总结
下面是总结的一些设计中应注意的问题,和单片机硬件设计原则,希望大家能看完 (1) 在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。 (2) 尽量在关键元件,如ROM、RAM等芯片旁边安装去耦电容。实际上,印制电路板走线、引脚连线和接线等都可能含有较大的电感效应。大的电感可能会在Vcc走线上引起严重的开关噪声尖峰。防止Vcc走线上开
[单片机]
基于STC15w单片机系列 自带的AD转换程序
15W系列是目前51单片机里面可用资源较多的处理器。一般的设计都可以用,本次分享下利用单片机自带的AD转换座一个数字电压表。显示用的LCD1602 单片机源程序如下: #include 15w.H #include math.h #include string.h #include stdio.h #include intrins.h #define uchar unsigned char #define uint unsigned int typedef unsigned int WORD; #define ADC_POWER 0x80 //ADC电源控制位 #define ADC_FLAG
[单片机]
编写单片机C语言代码的技巧和经验
  下面发一些我在网上看到的单片机C语言代码编写技巧和自己的一些经验来和大家分享;   1、如果可以的话少用库函数,便于不同的mcu和编译器间的移植   2、选择合适的算法和数据结构   应该熟悉算法语言,知道各种算法的优缺点,具体资料请参见相应的参考资料,有很多计算机书籍上都有介绍。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率。选择一种合适的数据结构也很重要,比如你在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密码的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,
[单片机]
AVR单片机IO的使用方法详细资料概述
  主要内容详细介绍的是AVR单片机IO的使用方法详细资料   AVR单片机寄存器 DDRx PORTx PINx 与对应IO端口之间的关系(x代表某个端口,如A端口、B端口等)   下表以端口B的第2位PB2为例子加以说明,并且假设PB2为悬空状态 DDRB.2 PORTB.2 读取PINB.2的结果 引脚PB2的状态 1 1 1 PB2推挽输出 1 1 0 0 PB2推挽输出 0 0 1 1 PB2弱上拉,可作输入 0 0 × PB2高阻抗,可作输入   读取PINB.2时,就是读取PB2引脚的实际电平,   如果PB2直接接VCC,那么任何时候读取PINB.2的结果都是1   如果PB2直接接
[单片机]
AVR<font color='red'>单片机</font>IO的使用方法详细资料概述
ARM7单片机(学习ing)—(二)、中断控制编程—02
进行了MDK中断设置之后~~ 马上中断就可以用了~~ 要想了解的话,找EDA软件板块~~ 今天赶紧写完就哦了~~ 二、中断控制编程 二—(01)、计数器(通过三个外部中断来控制计数的加减或者清零~~) MDK2_1.c //------------------------------------------------------------------------------ //通过外部中断0、外部中断1、外部中断2实现加减计数器,并输出数码管显示 #include lpc210x.h #include delay.h #include bit.h #include macroandconst.h //-------
[单片机]
ARM7<font color='red'>单片机</font>(学习ing)—(二)、中断控制编程—02
基于80C51单片机的多功能肌电测量仪设计
肌电测量或肌电图是检查人体神经、肌肉系统功能的重要方法,广泛应用于神经科、骨科、耳鼻喉科及口腔科。它可为临床诊断、治疗神经肌肉系统疾患提供客观的科学依据。肌电测量仪一般只具有在示波器上显示波形和记录波形的功能。早期,肌电信号通过照相对胶片进行显影才能看到;后来,把肌电信号描绘在肌电图纸上。这两种肌电信号记录法的机构都很复杂。这里介绍一种利用普通的示波器,通过单片机和A/D、D/A转换控制系统构成的,具有记忆、波形分析(诊断)功能和各种操作的实时处理的低功耗智能肌电测量仪。该肌电测量仪可实现一次采集后,多次重复显示、打印,实现了肌电信号测量仪的智能化 1 多功能肌电测量仪的硬件设计 1.1 系统硬件结构框图 系统硬件结构框图如图
[单片机]
基于80C51<font color='red'>单片机</font>的多功能肌电测量仪设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved