#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
sbit tone=P2^6;
unsigned char timer0h,timer0l,time;
uchar code key[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf
};
uchar code tab[]={
0xfc,0x43,
0xfc,0xab,
0xfd,0x08,
0xfd,0x32,
0xfd,0x81,
0xfd,0xc7,
0xfe,0x05,
};
code unsigned char yf[]={
3,2,2,6,2,2,7,2,2,5,2,2,3,2,2,6,2,2,7,2,2,5,2,2,7,2,2,1,3,2,2,3,4,
7,2,2,1,3,2,2,3,1,2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,
2,3,1,3,3,1,2,3,1,1,3,1,7,2,2,5,2,2,6,2,2,2,2,2,5,2,4,6,2,2,2,2,2,5,2,4,
0,0,0};
code unsigned char FREQH[]={
0xF2,0xF3,0xF5,0xF6,0xF7,0xF8,
0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,
0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,
0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF,
};
code unsigned char FREQL[]={
0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,
0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,
0xEE,0x44,0x6B,0xB4,0xF4,0x2D,
0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16,
};
uchar j;
void delay0()
{
uchar a,b,c;
for(a=5;a>0;a--)
for(b=100;b>0;b--)
for(c=100;c>0;c--);
}
void delay(unsigned char t)
{
unsigned char t1;
unsigned long t2;
for(t1=0;t1<t;t1++)
{
for(t2=0;t2<2000;t2++);
}
TR0=0;
}
void song()
{
TH0=timer0h;
TL0=timer0l;
TR0=1;
delay(time);
}
void main()
{
unsigned char k,i;
P1=0xff;
P3=0x00;
TR0=0;
if(P1==0x7f)
{
TR0=1;
TMOD=0x01;
EA=1;
ET0=1;
while(1)
{
i=0;
while(i<55){
k=yf[i]+7*yf[i+1]-1;
timer0h=FREQH[k];
timer0l=FREQL[k];
time=yf[i+2];
i=i+3;
song();
}
}
}
else{
TMOD=0x10;
EA=1;
ET1=1;
P1=0xff;
while(P1!=0xff)
{
delay0();
for(j=0;j<7;j++)
if(P1==key[j])
{
break;
}
TH1=tab[2*j];
TL1=tab[2*j+1];
TR1=1;
while(P1!=0xff);
TR1=0;
}
}
}
void t0int()interrupt 1
{
TR0=0;
tone=!tone;
TH0=timer0h;
TL0=timer0l;
TR0=1;
}
void t1int()interrupt 3
{
TH1=tab[2*j];
TL1=tab[2*j+1];
tone=!tone;
}
|