/******************************************************************** 
                            汇诚科技 
                                          http://www.ourhc.cn 
*********************************************************************/ 
#include<reg52.h>                 //库文件 
#define uchar unsigned char//宏定义无符号字符型 
#define uint unsigned int  //宏定义无符号整型 
/******************************************************************** 
                            初始定义 
*********************************************************************/ 
uchar Count; 
sbit _Speak =P3^7 ; //讯响器控制脚 
/******************************************************************** 
                            歌曲字根码 
*********************************************************************/ 
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 
} 
/*********************************************************************/ 
void Delay_xMs(unsigned int x) //1MS 延时子程序 
{  
        unsigned int i,j; 
        for( i =0;i < x;i++ ) 
        { 
                for( j =0;j<3;j++ ); 
        } 
} 
/*********************************************************************/ 
void Play_Song(unsigned char i) //:歌曲播放子程序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); 
        } //播放 
} 
 
/******************************************************************** 
                              结束 
*********************************************************************/ 
 
 
 
 
 
 |