#include<reg52.h>
sbit been=P2^3;//定义蜂鸣器的端口
#define uchar unsigned char
//这是低一级的调
uchar code t0_h[22]={255,252,252,253,253,253,253,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255};
uchar code t0_l[22]={246,147,242,72,111,182,246,47,73,121,164,183,219,251,23,36,60,82,91,109,125,139};
/*===============================================================
这是高一级的调
uchar code t0_h[22]={255,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
uchar code t0_l[22]={246,73,121,164,183,219,251,23,36,60,82,91,109,125,139,146,158,169,173,182,190,197};
============================================================================
uchar code t0_h[22]={255,249,249,250,250,251,251,252,252,252,253,253,253,253,254,254,254,254,254,254,254,255};//定义音符,定时器高位初值
uchar code t0_l[22]={246,38,229,144,222,109,237,95,147,242,72,111,182,246,47,73,121,164,183,219,251,23};//定义音符,定时器低位初值
*/
uchar code music1[]={4,2,2,4,4,16,4,2,2,4,4,16,4,2,8,4,2,8,2,2,2,2,4,2,2,16,4,2,2,4,2,2,4,8,4,2,2,4,4,16,4,2,4,4,4,2,2,8,2,2,2,2,4,2,2,16,2,4,2,8,4,2,8,4,2,2,4,2,2,16,4,2,8,4,2,4,2,4,2,4,2,2,16,8,4,4,4,2,4,2,2,8,4,4,4,2,2,4,4,8,2,2,2,2,4,2,4,2,2,8,4,4,4,2,2,4,2,2,8,4,4,4,2,2,2,2,2,8,4,4,4,2,2,4,4,8,4,4,4,2,2,2,2,4,8,8,4,8,0};
uchar code music[]={9,10,12,10,8,6,9,10,13,12,8,9,9,10,12,9,10,6,5,6,8,10,9,8,6,9,9,10,12,10,8,8,6,6,9,10,13,12,8,9,9,10,12,13,10,9,8,8,5,6,8,10,9,8,6,8,0,9,10,12,9,10,6,8,8,6,8,9,10,10,9,10,12,13,12,13,13,12,13,12,13,16,16,16,12,13,15,16,15,13,12,12,10,12,13,15,13,12,9,10,12,10,10,16,16,13,12,10,9,8,8,9,10,10,9,10,13,12,12,12,13,15,16,15,13,13,12,12,10,12,13,15,13,12,9,10,8,9,10,13,12,12,10,10,9,8,6,8,0};
uchar a,b;
void delay(int x)
{
int i,j;
for (i=x;i>0;i--)
for (j=120;j>0;j--);
}
void main()
{
uchar i;
TMOD=0x01;
EA=1;
ET0=1;
TR0=1;
while(music[i]!=0||music1[i]!=0)
{
/*if(music[i]==music[i-1]){
TR0=0;
been=1;
delay(5);
TR0=1;
been=0;
}*/
a=t0_h[music[i]];
b=t0_l[music[i]];
delay(music1[i]*150);
P1=b;
i++;
}
TR0=0;
been=1;
while(1);
}
void timer() interrupt 1
{
TH0=a;
TL0=b;
been=~been;
}