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

📄 7540 demo code.c

📁 收音头7540代码
💻 C
📖 第 1 页 / 共 2 页
字号:

void Key_Mono() //Register 25, FM 才有  只需变更寄存器25 d2位值
{  
	if(band_am) return;
	mono_mode = ~mono_mode;

	flag_mono = 1;
	channel = 0;

	if(mono_mode)    //立体音 ee
	{
	    I2CWriteByte(ST7540_address, 25, RadioBuffer[25]);  //stereo
	}
    else
	{
	    I2CWriteByte(ST7540_address, 25, RadioBuffer[25] & (~0x04)); //mono
	}
	Refresh_Radio( );
}

void Key_Local() //Register 7, AM Control 先刷寄存器7,如衰减不够再调整寄存器18或不管寄存器7,直接衰减寄存器18值
{
	if(band_am) return;
	flag_local = ~flag_local;
	channel = 0;
    
	if(flag_local)    //0x00,  Disable local mode 
	{
	    I2CWriteByte(ST7540_address, 7, RadioBuffer[7]&0x7f);
	}
    else
	{
	    I2CWriteByte(ST7540_address, 7, RadioBuffer[7] | 0x80);
	}
	Refresh_Radio( );
}


void Key_Tuninc(void)
{
	if(band_fm)
	{
		if(fm_freq < fm_max_freq)
			fm_freq += fm_step;
		else
			fm_freq = fm_min_freq;
	}
	else
	{
		if(am_freq < am_max_freq)
			am_freq += am_step;
		else
			am_freq = am_min_freq;
	}

	if(dis_station)
	{
		dis_station = 0;
//		station = 0;
	}
	Refresh_Radio( );
}

void Key_Tundec(void)
{
	if(band_fm)
	{
		if(fm_freq > fm_min_freq)
			fm_freq -= fm_step;
		else
			fm_freq = fm_max_freq;
	}
	else
	{
		if(am_freq > am_min_freq)
			am_freq -= am_step;
		else
			am_freq = am_max_freq;
	}

	if(dis_station)
	{
		dis_station = 0;
//		station = 0;
	}
	Refresh_Radio( );
}

//在FM 模式下,改变PLL 参数后,通常等待时间为3ms,
//在AM 模式下,改变PLL 参数后,通常等待时间为16ms,
void Polling_Scan(void)  //搜到一个电台
{
	int i, j;

	switch(scan_op)
	{
		 case SCAN_1:	//mute
		      m_time = 0;
		      Polling_Mute( );
			  Refresh_7313( );
			  Mute_7313(1);		       
			  scan_tm = 1;
			  scan_op = SCAN_2;
			  break;
		  case SCAN_2:
			   if(flag_dir)
			   {   
			        if((band_fm)&&(!(fm_freq%10)))
	  		           Key_Tuninc( );
				    Key_Tuninc( );
			    }
				else 
				{
				    if((band_fm)&&(!(fm_freq%10)))
	  		            Key_Tundec( );
				    Key_Tundec( );
				}
				   			    
				if(band_fm)
				{
				    scan_tm = 1;
			        if(!flag_dir && (fm_freq == fm_min_freq))
			       	    scan_op = SCAN_8;
			        else if(flag_dir && (fm_freq == fm_max_freq))
			            scan_op = SCAN_8;
			        else 
			    	    scan_op = SCAN_3;
			     }  	
			     else 
			     {	 
				       scan_tm = 3;
			     	   if(!flag_dir && (am_freq == am_min_freq))
			         	   scan_op = SCAN_8;
			           else if(flag_dir && (am_freq == am_max_freq))
			               scan_op = SCAN_8;
			           else 
			     	       scan_op = SCAN_3;
			     }	     	      	   
			     break;
		  case SCAN_3:	  	    		   	   
			   if(band_fm)
			       scan_tm = 1;//5;
			   else 
			       scan_tm = 3;	   
               scan_op = SCAN_4;  
               radio_counter = 0;
			   break;
		  case SCAN_4:
		       j = 0;
		  	   for(i=0; i<1000; i++)
		  	   {
		  	   	   if(tuner_stop) 
		  	   	  	  j++;
		  	   }
			   if(j > 950)	     //收到台	
			      radio_counter ++;

			   scan_op = SCAN_5;  
               break;
		  case SCAN_5:
		       j = 0;
		  	   for(i=0; i<1000; i++)
		  	   {
		  	   	   if(tuner_stop) 
		  	   	  	  j++;
		  	   }
			   if(j > 950)	     //收到台	
			      radio_counter ++;

			   scan_op = SCAN_6;  
               break;
		  case SCAN_6:
		       j = 0;
		  	   for(i=0; i<1000; i++)
		  	   {
		  	   	   if(tuner_stop) 
		  	   	  	  j++;
		  	   }
			   if(j > 950)	     //收到台	
			      radio_counter ++;

			   if(radio_counter<2)
			   {
			       scan_op = SCAN_2;
				   break;
			   }

			   scan_op = SCAN_7;  
               break;
		  case SCAN_7:
               j = 0;
		  	   for(i=0; i<1000; i++)
		  	   {
		  	   	   if(tuner_stop) 
		  	   	  	  j++;
		  	   }
			   if(j > 950)	     //收到台	
			      radio_counter ++;

			   if(radio_counter<3)
			   {
			       scan_op = SCAN_2;
				   break;
			   }  
          	   scan_op = SCAN_8;	   		      
			   scan_tm = 1;//255;          
			   break;
		  case SCAN_8:
			   play_mo = NORMAL;
			   Mute_7313(0);
			   scan_op = 0;
			   break;
		 default:
			     break;
	  }
}

void Polling_AMS(void)   //搜索所有一个电台
{
    int i, j;

	switch(scan_op)
	{
		case AMS_1:
		     m_time = 0;
		     Polling_Mute( );
			 Refresh_7313( );
			 Mute_7313(1);	
			 if(band_fm)
			 {
			     fm_freq = fm_min_freq;
			     band = 0;
			 }
		 	 else
			 {
			     am_freq = am_min_freq;
			     band = 3;
			 }
			 station = 1;			 
			 dis_station = 0;
			 scan_tm = 1;
			 scan_op = AMS_2;
			 break;
		case AMS_2:
			 if((band_fm && (fm_freq == fm_max_freq)) || (band_am && (am_freq == am_max_freq)))
			 {
			     station = 1;
			     if(band_fm)
				       band = 0;
			     if(band_am)
				      band = 3;
			     scan_op = AMS_8;
				 break;
			 }
		     if((band_fm)&&(!(fm_freq%10)))
	  		      Key_Tuninc( );	      
			 Key_Tuninc( );
			     
			 if(band_fm)
			     scan_tm = 1;//5;
			 else 
			     scan_tm = 3;
			 scan_op = AMS_3;
		     break;
		case AMS_3:
			 if(band_fm)
			     scan_tm = 1;//5;
			 else 
			     scan_tm = 3;
			 scan_op = AMS_4;
			 radio_counter = 0;
			 radio_oldcounter = 4;
			 break;
 	    case AMS_4:
			 j = 0;
		  	 for(i=0; i<1000; i++)
		  	 {
		  	    if(tuner_stop) 
		  	   	  j++;
		  	 }
	         if(j > 950)	     //收到台	
			    radio_counter ++;

             scan_op = AMS_5;	  	     
			 break;
		case AMS_5:
		     j = 0;
		  	 for(i=0; i<1000; i++)
		  	 {
		  	    if(tuner_stop) 
		  	   	  j++;
		  	 }
			 if(j > 950)	     //收到台	
			    radio_counter ++;

		     scan_op = AMS_6;		     
			 break;
		case AMS_6:
		     j = 0;
		  	 for(i=0; i<1000; i++)
		  	 {
		  	    if(tuner_stop) 
		  	   	  j++;
		  	 }
			 if(j > 950)	     //收到台	
			    radio_counter ++;

			 if(radio_counter<2)
             {
			      scan_op = AMS_2;
				  scan_tm = 1;
				  radio_oldcounter = 4;
				  break;
			 }

		     scan_op = AMS_7;		     
			 break;
	    case AMS_7:
		     j = 0;
		  	 for(i=0; i<1000; i++)
		  	 {
		  	    if(tuner_stop) 
		  	   	  j++;
		  	 }
			 if(j > 950)	     //收到台	
			    radio_counter ++;

			 if(radio_counter<4)
             {
			      scan_op = AMS_2;
				  scan_tm = 1;
				  radio_oldcounter = 4;
				  break;
			 }
             
			 if(radio_counter>radio_oldcounter)
			     station--;
			 radio_oldcounter = radio_counter;
              
			 if(band_fm && (fm_freq == fm_max_freq)) 
			 {
			     scan_op = AMS_2;
			     break;
			 }
                      
   		     Save_Station(station);
			 station ++;
			 if(station == 7)
			 {
			      station = 1;
			      band ++;
			      if((band == 3)||(band == 5))
			      {
				       band --;
				       scan_op = AMS_8;
					   break;
				  }
			 }
			 scan_tm = 1;
			 scan_op = AMS_2;
			 break;
  		case AMS_8:
			 if(band_fm) 
			    band = 0;
			 else
			    band = 3;

			 Call_Station(1);
			 play_mo = NORMAL;
			 Mute_7313(0);
			 scan_op = 0;
			 break;

	  default:
	  		 break;
	 }
}

void Polling_APS(void)		//polling every 100ms , 循环收听电台,每5S换一电台
{
    switch(scan_op)
	{
		  case APS_1:
			     if(band_fm) 
			     	   band = 0;
			     if(band_am) 
			     	   band = 3;
			     Call_Station(1);
			     scan_tm = 100;	//5 second
			     scan_op = APS_2;
			     break;
		  case APS_2:
			     scan_tm = 1;
			     station ++;
			     if(station == 7)
			     {
				        station = 1;
				        band ++;
				        if((band == 3) || (band == 5))
				        {
					           if(band == 3)
						             band = 0;
					           else
						             band = 3;
					           play_mo = NORMAL;
					           scan_op = NORMAL;
					           Call_Station(1);
					           break;
				         }
			     }
			     Mute_7313(1);
			     scan_op = APS_3;
			     break;
		  case APS_3:
			     Call_Station(station);
			     scan_tm = 100;		 
			     scan_op = APS_2;
			     break;
		  default:
			     break;
    }
}

void Polling_Tuner(void)
{
    if(source !=RADIO) return;
    if(scan_tm) return;

	switch(play_mo)
	{
		case AUTOSCAN:
			 Polling_Scan( );
			 break;
		case AUTOMEM:
			 Polling_AMS( );
			 break;
		case AUTOPLAY:
			 Polling_APS( );
			 break;
		default://NORMAL
			 break;
	}
}



⌨️ 快捷键说明

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