我要把周杰伦的《珊瑚海》歌谱编出来,可是看不懂歌谱,求高手给帮忙编一下,程序和歌谱附上
#include
#include [I]
//,晶振为11.0592MHZ
sbit Beep =P1^5 ;
unsigned char n=0;//n为节拍常数变量
unsigned char code music_tab[] ={
};
void int0()interrupt 1 //采用中断0 控制节拍
{TH0=0xd8;
TL0=0xef;
n--;
}
void delay (unsigned char m) //控制频率延时
{
unsigned i=3*m;
while(--i);
}
void delayms(unsigned char a)//豪秒延时子程序
{
while(--a);
}
void main()
{ unsigned char p,m; //m为频率常数变量
unsigned char i=0;
TMOD&=0x0f;
TMOD|=0x01;
TH0=0xd8;TL0=0xef;
IE=0x82;
play:
while(1)
{
a: p=music_tab;
if(p==0x00)
{ i=0, delayms(1000); goto play;}
else if(p==0xff){ i=i+1;delayms(100),TR0=0; goto a;}//若碰到休止符,延时100ms,继续取下一音符
else
{m=music_tab[i++], n=music_tab[i++];}//取频率常数 和 节拍常数
TR0=1;
//开定时器1
while(n!=0) Beep=~Beep,delay(m);
//等待节拍完成, 通过P1口输出音频
TR0=0;
//关定时器1
}
}
|