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

📄 无线遥控音乐.c

📁 简单的无线遥控音乐制作 采用HC2272
💻 C
📖 第 1 页 / 共 2 页
字号:
                            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 song8[]={
                            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* code songs[]={song0,song1,song2,song3,song4,song5,song6,
                                  song7,song8}; //指向8首歌


 /*C调各音符频率与计数初值T的对照表*/
unsigned char code yin[30]={0xFF,0xFF,0xFB,0x90,0xFC,0x0C,0xFC,0x44,
                            0xFC,0xAC,0xFD,0x09,0xFD,0x34,0xFD,0x82,
							0xFD,0xC8,0xFE,0x06,0xFE,0x22,0xFA,0X15,
							0XFB,0x04,0xFA,0x67,0xFE,0x85}; 
				   

/*****延时1ms****/
void delay1ms(void)
{
  unsigned char i,j;
  for(i=2;i>0;i--)
  for(j=230;j>0;j--) ;
}


/*延时1/4拍时间即187ms*/
void  delay187ms()

{
 unsigned char i,j;
 for(i=255;i>0;i--)
	{
	 for(j=120;j>0;j--)
	  {
	     if(wl_OK==1) {break;}
	  }
	}
}





/******每个音符的发声******/
void timer0() interrupt 1 using 1  //定时器T0
{ 
     TH0=yin[2*l];
     TL0=yin[2*l+1];
     SPK = !SPK; 

}



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

/******端口值读取函数*****/                                          
 void Getch()
{
			 
  P1=0x0f;           //先对P2置数,进行行扫描//
  if(P1!=0x0f)       //判断端口数据是否变化//
 {
   delay1ms();       //软件延时//
   if(P1!=0x0f)      //确认端口数据变化//
   {
     P0=P1;		     //送到P0口显示第几首音乐
	 song_number=P1; //调整音乐曲目
   }
  }
}

/*****主函数*****/	 
 void main()
{

     EA=1;            //总中断
     TMOD=0x01;       //timer0工作在方式1
	 IT0=1;           //外部中断0触发方式控制位,下降沿触发
	 ET0=1;           //允许定时器T0中断
	 EX0=1;           //外部中断0(INT0)中断允许位
	 IP=0x01;         //定义外部中断0优先于定时器中断的优先级
 

	 P0=0x00;
	 
	 wl_OK=0;

    while(1)
   {
    if(wl_OK==1)
	sing_song();	  //演奏
	else P0=0;		  //等待
    }
}
  		
 /*****外部中断T0*****/
void t0(void) interrupt 0 using 2//外部中断0的函数
{	
    
     EA=0;            //关总中断
	 wl_OK=1;		  //接到无线信号
	 Getch();		  //端口扫描
	 EA=1;            //开总中断

}

⌨️ 快捷键说明

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