天空之城音乐程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include //包含头文件,一般情况不需要改动?

//头文件包含特殊功能寄存器的定义

/*------------------------------------------------

硬件端口定义

------------------------------------------------*/

sbit SPK=P1^0; //定义音乐输出端口

unsigned char Timer0_H,Timer0_L,Time;

//天空之城数据表

code unsigned char MUSIC[]={ 6,2,1, 7,2,1, 1,3,3,

7,2,1, 1,3,2, 3,3,2, 7,2,6,

3,2,1, 3,2,1, 6,2,3,

5,2,1, 6,2,2, 1,3,2, 5,2,6,

3,2,2, 4,2,3, 3,2,1, 4,2,2, 1,3,2, 3,2,5, 1,3,1,

1,3,1, 1,3,1, 7,2,3, 4,2,1, 4,2,2, 7,2,2, 7,2,6,

6,2,1, 7,2,1, 1,3,3, 7,2,1, 1,3,2, 3,3,2, 7,2,6,

3,2,1, 3,2,1, 6,2,3, 5,2,1, 6,2,2, 1,3,2, 5,2,6,

2,2,1, 3,2,1, 4,2,2, 1,3,1, 7,2,2, 1,3,3, 2,3,1,

2,3,1, 3,3,1, 1,3,5, 1,3,1, 7,2,1, 6,2,1, 6,2,1,

7,2,2, 5,2,2, 6,2,6, 1,3,1, 2,3,1, 3,3,3, 2,3,1,

3,3,2, 5,3,2, 2,3,6, 5,2,1,

5,2,1, 1,3,3, 7,2,1,

1,3,2, 3,3,2, 3,3,8, 6,2,1, 7,2,1, 1,3,2, 7,2,2,

2,3,1, 2,3,1, 1,3,3, 5,2,5, 4,3,2, 3,3,2, 2,3,2,

1,3,2, 3,3,6, 3,3,2, 6,3,4, 5,3,2, 5,3,2, 3,3,1,

2,3,1, 1,3,5, 1,3,1, 2,3,2, 1,3,1, 2,3,1, 2,3,2,

5,3,2, 3,3,6, 3,3,2, 6,3,4, 5,3,4, 3,3,1, 2,3,1,

1,3,5, 1,3,1, 2,3,2, 1,3,1, 2,3,3, 7,2,2, 0,0,0

};

// 音阶频率表高八位

code unsigned char FREQH[]={

0xF8,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,

0xFC,0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,

//1,2,3,4,5,6,7,8,i

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF

} ;

// 音阶频率表低八位

code unsigned char FREQL[]={

0x8C,0x5B,0x15,0x67,0x04,0x90,0x0C,

0x44,0xAC,0x09,0x34,0x82,0xC8,0x05,

//1,2,3,4,5,6,7,8,i

0x21,0x55,0x84,0x9A,0xC0,0xE3,0x02

};

uS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时长度如下 T=tx2+5 uS

------------------------------------------------*/ void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/ void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

节拍延时函数

各调1/4节拍时间:

调4/4 125ms

调2/4 250ms

调3/4 187ms

------------------------------------------------*/ void delay(unsigned char t)

{

unsigned char i;

for(i=0;i

DelayMs(250);

TR0=0;

}

/*------------------------------------------------

定时器0中断

------------------------------------------------*/ void TIM0_ISR() interrupt 1

{

TR0=0;

SPK=!SPK;

TH0=Timer0_H;

TL0=Timer0_L;

TR0=1;

}

相关文档
最新文档