#include <reg51.h>
#include <intrins.h>
#include <yinyue.h>
#define uchar unsigned char
#define uint unsigned int
sbit beep=P2^0;
sbit key1=P3^0;
sbit key2=P3^1;
sbit key3=P3^2;
uchar code led[]={0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00};
uchar code led1[]={0x01,0x83,0xc7,0xef,0xff};
uchar tone_H, tone_L, times, i=0, j, temp, x;
uchar beat_H=(65536-62500)/256;
uchar beat_L=(65536-62500)%256;
bit flag,flag1;
void play(uchar *song,uchar *beat);
void display_led();
void delay(uint m)
{
while(--m);
}
void init()
{
flag1=1;
beep=0;
EA=1;
ET0=1;
ET1=1;
TMOD=0x11;
}
void main()
{
init();
while(1)
{
if(flag1)
{
if(key1==0)
{
delay(3000);
play(song1,beat1);
}else
if(key2==0)
{
delay(3000);
play(song2,beat2);
}else
if(key3==0)
{
delay(3000);
play(song3,beat3);
}
}else
display_led();
}
}
void play(uchar *song,uchar *beat)
{
while(song[i]!=15)
{
P0=0xff;
times=beat[i];
flag=0;
tone_H=(65536-tone[song[i]]-6)/256;
tone_L=(65536-tone[song[i]]-6)%256;
TH0=tone_H;
TL0=tone_L;
TH1=beat_H;
TL1=beat_L;
TR0=1;
TR1=1;
while(flag==0);
i++;
TR0=0;
TR1=1;
flag1=0;
}
}
void display_led()
{
for(x=0;x<2;x++)
{
for(j=0;j<8;j++)
{
P1=led[j];
delay(50000);
}
delay(5000);
for(j=0;j<5;j++)
{
P1=led1[j];
delay(50000);
}
delay(5000);
for(j=0;j<5;j++)
{
P1=led1[4-j];
delay(50000);
}
delay(10000);
for(j=0;j<6;j++)
{
P1=0x00;
delay(20000);
P1=0xff;
delay(20000);
}
}
P1=0x00;
delay(50000);
flag1=1;
}
void timer0() interrupt 1
{
TH0=tone_H;
TL0=tone_L;
if(flag==1)
TR0=0;
else
beep=~beep;
}
void timer1() interrupt 3
{
TH1=beat_H;
TL1=beat_L;
if(times==0)
{
flag=1;
TR1=0;
}
times--;
}
|