#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^2;
sbit beep=P3^7;
uchar i;
uchar song_Index=0,Tone_Index=0;
uchar *song_Tone,*song_Time;
const LED_tab[]={
0xC0,0xF9,0xA4,0xB0,0x99,0x92,
0x82,0xF8,0x80,0x90,0x88,0x83,
0xC6,0xA1,0x86,0x8E,0xBF,0xFF};
uint code Tone_tab[]={62018,62401,62491,62895,63184,63441,63506,
63773,63965,64137,64215,64360,64488,64603,
64654,64751,64836,64876,64948,65012,65067,65535};
uchar code song2_Tone[]={11,9,11,14,12,14,12,11,11,7,8,9,8,7,8,
11,9,11,14,13,12,14,11,11,7,8,9,6,7,
12,14,14,13,12,13,14,12,13,14,12,12,11,10,7,8,
11,9,11,14,13,12,14,11,11,8,9,10,6,7,0xff};
uchar code song2_Time[]={4,2,2,8,4,2,2,8,4,2,2,4,2,2,12,
4,2,2,4,2,4,4,8,4,2,2,4,2,12,
4,4,8,4,2,2,8,2,2,2,2,2,2,2,2,16,
4,2,2,4,2,4,4,8,4,2,2,4,2,12,0xff};
uchar code song1_Tone[]={
7,8,9,7,7,8,9,10,11,9,10,11,
11,12,11,10,9,7,11,12,11,10,9,7,7,4,7,7,4,7,0xff};
uchar code song1_Time[]={
4,4,4,4,4,4,4,4,4,4,8,4,4,8,
2,2,2,2,4,4,2,2,2,2,4,4,4,4,8,4,4,8,0xff};
uchar code song3_Tone[]={
7,7,7,8,9,9,9,9,10,11,12,12,11,10,9,11,11,8,9,7,
7,7,7,8,11,9,9,9,10,11,12,12,11,10,9,11,11,8,9,7,0xff};
uchar code song3_Time[]={
2,2,2,2,4,2,2,2,2,4,2,2,2,2,4,2,2,2,2,4,
2,2,2,2,4,2,2,2,2,4,2,2,2,2,4,2,2,2,2,5,0xff};
uchar code song4_Tone[]={
5,9,9,9,9,8,7,8,7,6,5,12,12,12,12,12,11,
2,11,11,10,9,9,12,12,11,9,8,7,8,7,6,5,9,
2,7,7,6,5,9,8,7,6,4,12,0xff};
uchar code song4_Time[]={
2,2,2,2,2,2,2,2,2,2,8,2,2,2,2,4,2,
2,2,2,2,8,2,2,2,2,4,2,2,2,2,2,4,2,
2,2,2,2,4,2,2,2,2,8,0xff};
uchar code song5_Tone[]={
11,12,11,9,8,9,11,9,8,7,9,11,7,9,8,
11,12,11,9,8,9,11,9,8,7,8,7,8,9,7,0xff};
uchar code song5_Time[]={
4,4,8,4,4,8,4,4,4,4,2,2,2,2,8,
4,4,8,4,4,8,4,4,4,4,2,2,2,2,8,0xff};
void delayms(uint ms)
{
uchar a;
while(ms--)
{
for(a=230;a>0;a--);
}
}
void int0() interrupt 0
{
delayms(100);
if(INT0==0)
{
TR0=0;
song_Index++;
}
if(song_Index==1)
{
song_Tone=song2_Tone;
song_Time=song2_Time;
}
if(song_Index==2)
{
song_Tone=song3_Tone;
song_Time=song3_Time;
}
if(song_Index==3)
{
song_Tone=song4_Tone;
song_Time=song4_Time;
}
if(song_Index==4)
{
song_Tone=song5_Tone;
song_Time=song5_Time;
}
if(song_Index==5)
{
song_Tone=song1_Tone;
song_Time=song1_Time;
song_Index=0;
}
TR0=1;
i=0;
}
void Timer0() interrupt 1
{
TH0=Tone_tab[Tone_Index]/256;
TL0=Tone_tab[Tone_Index]%256;
beep=~beep;
}
void display(void)
{
P0=LED_tab[song_Index];
}
void int_init(void)
{
TMOD=0x01;
ET0=1;
EX0=1;
IT0=1;
EA=1;
TR0=0;
}
void main(void)
{
int_init();
song_Tone=song1_Tone;
song_Time=song1_Time;
while(1)
{
display();
Tone_Index=song_Tone[i];
if(Tone_Index==0xFF)
{
i=0;
TR0=0;
}
TR0=1;
delayms(song_Time[Tone_Index]*60);
TR0=0;
i++;
}
}
|