#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit K1=P3^2;
sbit beep=P3^7;
sbit K2 = P1^0;
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 song1_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 song1_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 song2_Tone[]={ 7,8,9,7,7,8,9,7,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 song2_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};
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=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++;
}
}
|