#include<reg51.h>
#include<intrins.h>
#define led_8 P0
sbit speaker=P2^7;
unsigned char code yp[]={70,70,63,70,53,56,70,70,63,
70,47,53,70,70,35,42,53,56,
63,39,39,42,53,47,53,-1}; //音谱表
unsigned int code yl[]={225,75,300,300,300,600,225,75,300,300,300,600,225,75,
300,300,300,300,300,475,75,300,300,300,600,-1}; //每个音对应的演奏长度
void ys(unsigned int x)
{
while(x--);
}
void music()
{
unsigned int m=0,n,s;
led_8=0xff;
while(yp[m]!=-1||yl[m]!=-1) //没遇到结束符-1则执行下列音乐段
{
for(n=0;n<yl[m];n++)
{
speaker=~speaker; //扬声器按音谱发音
for(s=0;s<yp[m];s++);
}
ys(10); //每个音符的演奏长度
led_8=~led_8; //8只LED灯闪烁
m++; //指向下一个音符与演奏时间值
}
}
void main()
{
while(1)
{
music();
ys(500);
}
}