⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 遥控控制音乐.c

📁 通过红外遥控选择音乐
💻 C
📖 第 1 页 / 共 2 页
字号:
0x52,0x52,0x42,0x32,0x34,0x71,0x11,
0x74,0x71,0x71,0x11,0x31,0x34,0x32,
0x32,0x32,0x32,0x31,0x41,0x44,0x32,0x41,0x51,
0x52,0x52,0x72,0x81,0x41,0x44,0x52,0x41,0x31,
0x32,0x32,0x42,0x51,0x71,0x74,0x71,0x71,
0x12,0x31,0x31,0x31,0x52,0x42,0x32,0x32,0x41,0x31,
0x34,0x52,0x51,0x71,
0x72,0x71,0x71,0x72,0x71,0x81,0x84,0x52,0x42,
0x32,0x32,0x32,0x41,0x51,0x54,0x51,0x71,
0x72,0x72,0x72,0x81,0xA1,0xA2,0x82,0x72,0x52,
0x42,0x32,0x32,0x12,0x44,0x51,0x71,
0x72,0x72,0x71,0x82,0x71,0x84,0x52,0x42,
0x32,0x32,0x32,0x41,0x51,0x54,0x51,0x71,
0x72,0x72,0x72,0x81,0xA1,0xA2,0x82,0x72,0x51,0x41,
0x42,0x42,0x44,0x32,0x51,0x61,
0x72,0x42,0x44,0x52,0x41,0x31,
0x34,0x52,0x41,0x31,0x34,0x52,0x42,
0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x71,
0x82,0x81,0x71,0x72,0x81,0x71,0x74,0x51,0x41,0x31,
0x42,0x41,0x51,0x42,0x31,0x41,0x44,0x52,0x41,0x31,
0x34,0x52,0x41,0x31,0x34,0x52,0x42,
0x52,0x32,0x52,0x81,0x71,0x74,0x51,0x41,
0x82,0x82,0xA2,0x71,0x81,0x72,0x71,0x51,0x41,0x31,
0x44,0x41,0x31,0x41,0x51,0x44,0x52,0x52,
0x42,0x31,0x34,0x52,0x41,0x31,
0x42,0x31,0x34,
0xFF};
//第十一首  偏偏喜欢你        			    
unsigned char code song11[]={
0XC2,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X4C,0X42,0X32,
0X74,0X82,0X74,0X82,0X72,
0X52,0X41,0X38,0X32,0X42,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0XC2,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X4C,0X42,0X32,
0X76,0X82,0X74,0X82,0X72,
0X53,0X41,0X38,0X32,0X42,
0X16,0XC2,0X72,0X52,0X41,0X51,0X12,
0XCC,0XC2,0XB2,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0X32,0X32,
0X26,0X22,0X24,0X42,0X32,
0x22,0x12,0x18,0x02,0x52,
0X46,0X12,0X44,0X72,0X82,
0X5C,0X52,0X52,
0X46,0X42,0X74,0X42,0X32,
0X36,0X42,0X58,
0X82,0X72,0X62,0X52,0X46,0X32,
0X3C,0X12,0XB2,
0X36,0X52,0X42,0X32,0X11,0XC1,0XB2,
0XC6,0X12,0XC4,0X12,0XC2,
0X76,0XA2,0X82,0X72,0X51,0X41,0X32,
0X48,0X02,0X42,0X52,0X62,
0X76,0X82,0X74,0X82,0X72,
0X56,0X41,0X38,0X32,0X22,
0X16,0XC2,0X72,0X52,0X42,0X42,
0X3C,0X04,0X04,0X04,0X04,
0xFF};
//第十二首
unsigned char code song12[]={
0x34,0x32,0x34,0x34,0x24,0x34,0x32,0x32,0x24,0x38,0x44,0x58,0x48,
0x34,0x32,0x34,0x34,0x24,0x38,0x34,0x7F,0x34,0x32,0x34,0x32,
0x24,0x38,0x34,0x24,0x38,0x44,0x58,0x48,0x34,0x32,0x34,0x34,
0x24,0x38,0x34,0x7F,0x16,0x4C,0x74,
0x78,0x64,0x54,0x48,0x54,0x64,0x58,0x44,0x34,0x24,0x38,0x24,
0x14,0x12,0x21,0x11,0x78,0x68,0x3F,0x4C,0x74,
0x78,0x64,0x52,0x42,0x48,0x54,0x64,0x58,0x44,0x34,0x24,0x38,0x24,
0x24,0x38,0x44,0x58,0x48,0x3C,
0xFF};

unsigned char code* code songs[]={song1,song2,song3,song4,song5,song6,
                                  song7,song8,song9,song10,song11,song12};  //指向12首歌


//100ms
void delay100ms(void)
{
  unsigned char i,j,k;
  for(i=200;i>0;i--)  
  for(j=20;j>0;j--)
  for(k=10;k>0;k--) ;
}


void sing_song()
 {                    //回xxxxxx
    
    song=songs[song_number]; 
	IR_OK=0;                //不能少掉!!!!
    j=0;
    while(*(song+j)!=0xFF)                     //是否取到结束码
    {   
	   if(IR_OK==1){break;}                     //这一句很重要的!!                                       //回22222
       k=*(song+j)&0x0F;                       //后4位为多少个1/4拍
       l=*(song+j)>>4;                         //song(song+j)[]中所放的每个字节
                                               //前4位乘2表示为音符频率在数组yin[]中的位置
      
       TH1=yin[2*l];                           //置初值
       TL1=yin[2*l+1];
       TR1=1;                                  //起动定时器0
       if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
           {
               TR1=0;SPK=1;SPK1=1;
    		}
       for(i=k;i>0;--i)     //节拍K为多少就执行多少个1/4拍
           {
               delay();
           } 
       TR1=0;
       j++;
    }                                            //回22222
 }                                               //回xxxxxx
 

void main()
{                    //回main
    TMOD=0x10;       //timer0工作在方式1
    IE=0x88;         //EA=1;ETO=1;
	IT0=1;           //外部中断0触发方式控制位,下降沿触发
    EX0=1;           //外部中断0(INT0)中断允许位
    EA=1;            //总中断
    IP=0x01;         //定义外部中断0优先于定时器中断的优先级
	IR_OK=0;                //不能少掉!!!!

    while(1)
 {                   //回xxxxxx
    
   /*// song=song6;  
    song=songs[song_number]; 
	//P2=song_number;                             //演奏第三首
	IR_OK=0;                //不能少掉!!!!
    j=0;
    while(*(song+j)!=0xFF)                     //是否取到结束码
    {   
	   if(IR_OK==1){break;}                     //这一句很重要的!!                                       //回22222
       k=*(song+j)&0x0F;                       //后4位为多少个1/4拍
       l=*(song+j)>>4;                         //song(song+j)[]中所放的每个字节
                                               //前4位乘2表示为音符频率在数组yin[]中的位置
      
       TH1=yin[2*l];                           //置初值
       TL1=yin[2*l+1];
       TR1=1;                                  //起动定时器0
       if ((yin[2*l]==0xff)&&(yin[2*l+1]==0xff)) //如果取到的都是休止符,则不输出音频
           {
               TR1=0;SPK=1;SPK1=1;
    		}
       for(i=k;i>0;--i)     //节拍K为多少就执行多少个1/4拍
           {
               delay();
           } 
       TR1=0;
       j++;
    }  */                                         //回22222
  
    if(IR_OK==1)
      { if(song_number==0)
         {P2=0x00;sing_song();}       //显示并演奏第1首
         else if(song_number==1)
         {P2=0x01;sing_song();}       //显示并演奏第2首
         else if(song_number==2)
         {P2=0x02;sing_song();}       //显示并演奏第3首
         else if(song_number==3)
         {P2=0x03;sing_song();}       //显示并演奏第4首
         else if(song_number==4)
         {P2=0x04;sing_song();}       //显示并演奏第5首
         else if(song_number==5)
         {P2=0x05;sing_song();}       //显示并演奏第6首
         else if(song_number==6)
         {P2=0x06;sing_song();}       //显示并演奏第7首
         else if(song_number==7)
         {P2=0x07;sing_song();}       //显示并演奏第8首
         else if(song_number==8)
         {P2=0x08;sing_song();}       //显示并演奏第9首
         else if(song_number==9)
         {P2=0x09;sing_song();}       //显示并演奏第10首
         else if(song_number==10)
         {P2=0x0a;sing_song();}      //显示并演奏第11首
         else if(song_number==11)
         {P2=0x0b;sing_song();}      //显示并演奏第12首
		 else{SPK=0;delay100ms();SPK=1;delay100ms();
		      SPK=0;delay100ms();SPK=1;P2=0x0f;}  //蜂鸣器叫,表明没有歌啦
        }
 }                                               //回xxxxxx
}                                                //回main

/*每个音符的发声*/
void timer1() interrupt 3 using 1 
{ 
     TH1=yin[2*l];
     TL1=yin[2*l+1];
	 SPK1=SPK;
     SPK = !SPK;
 	 SPK1=!SPK1;
     
}

/*延时1/4拍时间即187ms*/
void delay(void)
{
    unsigned char a,b,c;
    for(a=251;a>0;a--)
    for(b=106;b>0;b--)
    for(c=2;c>0;c--);
}


void t0(void) interrupt 0 using 2//外部中断0的函数
{	
   m++ ;
   if(m==100)
   {  
     EA=0;            //总中断
	 IR_OK=1;
     song_number++;
	 if(song_number==12)  song_number=0;
	 EA=1;            //总中断

   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -