单片机音乐播放——梁祝
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit d1=P2^0;
uchar num,yj,a,tt;
uint temp,num1;
void time1(uint);
uint code table[]={
0,262,277,294,311,330,349,370,392,415,
440,466,494,523,554,587,622,659,698,
740,784,831,880,932,988,1046,1109,1175,
1245,1318,1397,1480,1568,1661,1760,1865,1967,0
};
uint code liangzhu[]={
20,4,17,4,15,4,
13,16,
13,4,15,4,12,4,10,4,
8,16,
8,4,24,4,22,4,24,4,
20,4,37,2,22,2,19,4,17,4,
15,2,17,2,19,2,17,2,20,4,37,2,17,2,
15,2,17,2,20,2,15,2,17,2,18,2,17,2,15,2,
13,12,20,4,
12,4,15,4,10,4,13,4,
8,12,10,2,13,2,
8,16,
5,8,8,4,37,2,10,2,
13,4,37,2,15,2,10,2,13,2,8,4,
20,4,37,2,25,2,22,2,20,2,17,2,20,2,
15,16,
15,4,37,2,17,2,12,4,10,4,
8,4,37,2,10,2,13,4,15,4,
5,4,13,4,10,2,8,2,10,2,13,2,
8,16,
17,4,37,2,20,2,12,4,15,4,
10,2,13,2,8,8,37,4,
5,2,8,4,5,2,8,2,10,2,12,2,15,2,
10,12,8,2,10,2,
13,4,37,2,15,2,20,4,17,4,
15,4,17,2,15,2,13,4,10,2,8,2,
5,8,13,8,
10,2,37,1,13,1,10,2,8,2,5,2,8,2,10,2,13,2,
8,12,17,2,20,2,
15,2,17,2,15,2,13,2,12,4,10,4,
8,16,0,0
};
void delay(uint z)
{
unsigned int i;
_nop_();
i = z;
while (--i);
}
void main()
{
num1=0;num=0; d1=0;a=0;
tt=0;
yj=0;
// yj=liangzhu[a++];
// tt=liangzhu[a++];
// num=500000/table[yj];
TMOD=0x11;//设置定时器0为工作方式1
TH0=(65536-62500)/256;
TL0=(65536-62500)%256;
// TH1=(65536-num)/256;
// TL1=(65536-num)%256;
EA=1;//开总中断
ET0=1;//开定时器0中断
// ET1=1;
TR0=1;//启动定时器0
// TR1=1;
while(1)
{
if(tt==0)
{
yj=liangzhu[a++];
tt=liangzhu[a++];
num=55000/table[yj];
// num1=0;
// d1=!d1;
}
else
{
delay(num);
d1=!d1;
}
}
}
void time0() interrupt 1
{
TH0=(65536-62500)/256;
TL0=(65536-62500)%256;
tt--;
}