www.pudn.com > Music_play.rar > main.c, change:2006-03-08,size:3707b


#include "reg52.h" 
unsigned char Count; 
sbit _Speak =P0^0 ;			//讯响器控制脚  
 
unsigned char code SONG[] ={      //祝你平安 
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, 
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00, 
                                  //路边的野华不要采 
0x30,0x1C,0x10,0x20,0x40,0x1C,0x10,0x18,0x10,0x20,0x10,0x1C,0x10,0x18,0x40,0x1C, 
0x20,0x20,0x20,0x1C,0x20,0x18,0x20,0x20,0x80,0xFF,0x20,0x30,0x1C,0x10,0x18,0x20, 
0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20, 
0x30,0x80,0xFF,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 
0x20,0x2B,0x40,0x20,0x20,0x1C,0x10,0x18,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30, 
0x20,0x2B,0x40,0x20,0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26, 
0x40,0x20,0x20,0x2B,0x20,0x26,0x20,0x20,0x20,0x30,0x80,0x20,0x30,0x1C,0x10,0x20, 
0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20,0x15,0x1F, 
0x05,0x20,0x10,0x1C,0x10,0x20,0x20,0x26,0x20,0x2B,0x20,0x30,0x20,0x2B,0x40,0x20, 
0x30,0x1C,0x10,0x18,0x20,0x15,0x20,0x1C,0x20,0x20,0x20,0x26,0x40,0x20,0x20,0x2B, 
0x20,0x26,0x20,0x20,0x20,0x30,0x30,0x20,0x30,0x1C,0x10,0x18,0x40,0x1C,0x20,0x20, 
0x20,0x26,0x40,0x13,0x60,0x18,0x20,0x15,0x40,0x13,0x40,0x18,0x80,0x00, 
 
}; 
 
void Time0_Init() 
{ 
	TMOD = 0x01; 
	IE 	 = 0x82; 
	TH0  = 0xD8; 
	TL0  = 0xEF;		//12MZ晶振,10ms 
} 
 
void Time0_Int() interrupt 1 
{ 
	TH0 = 0xD8; 
	TL0 = 0xEF; 
	Count++;			//长度加1 
} 
 
/*------------------------------------------------- 
功能:1MS延时子程序 
-------------------------------------------------*/ 
void Delay_xMs(unsigned int x) 
{ 
    unsigned int i,j; 
    for( i =0;i < x;i++ ) 
    { 
        for( j =0;j<3;j++ ); 
    } 
} 
 
/*------------------------------------------------- 
功能:歌曲播放子程序i为播放哪一段曲目 
-------------------------------------------------*/ 
void Play_Song(unsigned char i) 
{ 
	unsigned char Temp1,Temp2; 
	unsigned int Addr; 
	Count = 0;						//中断计数器清0 
	Addr = i * 217; 
	while(1) 
	{ 
		Temp1 = SONG[Addr++]; 
	    if ( Temp1 == 0xFF )          //休止符 
	    { 
	    	TR0 = 0; 
	    	Delay_xMs(100); 
	    } 
	    else if ( Temp1 == 0x00 )	  //歌曲结束符 
	    { 
	    	return; 
	    } 
	    else 
	    { 
	    	Temp2 = SONG[Addr++]; 
	    	TR0 = 1; 
	  		while(1) 
	  		{ 
	    		_Speak = ~_Speak; 
	    		Delay_xMs(Temp1); 
	    		if ( Temp2 == Count ) 
	    		{ 
	    			Count = 0; 
	    			break; 
	    		} 
	    	} 
	    } 
	} 
} 
/*------------------------------------------------- 
功能:主程序 
-------------------------------------------------*/ 
void main() 
{ 
	Time0_Init();			//定时器0中断初始化 
	while(1) 
	{ 
		Play_Song(0);		//播放 
	} 
}