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

📄 fmtuner.c

📁 一个panisonic 的收音头驱动程序。不错
💻 C
📖 第 1 页 / 共 2 页
字号:
                        configvalue[3] = 0x00;// Mute off
                        Reset_Tuner_Config();
                        break;
                        }
                        //Delay_X_ms(600);
                    	}
            	}
    	}
    	#if 0
    	else
    	{
             configvalue[2] = 0x00;// SD mode off
             configvalue[3] = 0x00;// Mute off
             Reset_Tuner_Config();
            #ifdef TEST_IF_COUNT
            Fmtuner_Read(0x00,&temp,1);
            if_count = temp&0x3;
            #endif
    	}
    	#endif
	return search_station;
		
}

BYTE Check_Station()
{
	BYTE temp;
	//P3_2=1;
	if (fmamflag== 0) // 0:fm 1:am
	    Set_Freq(fmbak);
	else 
	    Set_Freq(ambak);
    	configvalue[3] = 0x10;// Mute on
    	Reset_Tuner_Config();
    	//Delay_X_ms(100);
       search_station = 0;
	if  (P3_2 == 0) 
	{
        	configvalue[2] = 0x02;// SD mode on
        	Reset_Tuner_Config();
	       found_station = 0;
	       temp = 0x02;
	       Fmtuner_Write(0x83, &temp, 1);
	       Delay_X_ms(100); 
        	Fmtuner_Read(0x00,&temp,1);
        	if ((temp & 0x01)== 0x01)
        	{
        	       found_station = 1;
        		search_station = 1;
                     configvalue[2] = 0x00;// SD mode off
                     configvalue[3] = 0x00;// Mute off
                     Reset_Tuner_Config();
        	}
    	}
    	else
    	{
            configvalue[2] = 0x00;// SD mode off
            configvalue[3] = 0x00;// Mute off
            Reset_Tuner_Config();
       }
       return search_station;
		
}
void Set_Station(BYTE stationnum)
{
	if (fmamflag == 0)
	{
		 WriteToEeprom(stationnum, fmbak);
		 fm_ch=stationnum;
	}
	else
	{
		 WriteToEeprom(stationnum, ambak);
		 am_ch=stationnum;
	}
}
BYTE Get_Station(BYTE stationnum)
{
	if (fmamflag == 0)
	{
		 if (ReadFromEeprom(stationnum) == 0)
		 {
    		     fm_ch=stationnum;
                   curfmfreq = fmbak*FM_STEP_WIDTH- FM_IF_FREQ;
                   return 0;
               }
	}
	else
	{
		 if (ReadFromEeprom(stationnum) == 0)
		 {
		     am_ch=stationnum;
                   curamfreq = ambak*AM_STEP_WIDTH- AM_IF_FREQ;
                   return 0;
		 }
	}
	return 1;

}
BYTE Index_Station(BYTE dir)
{	
	if (fmamflag == 0)
	{
		if (dir == 0)		//cur
		{
			if (ReadFromEeprom(fm_ch) == 1)
			{
			    fmbak = FM_MIN_COUNT;
			    fm_ch = 1;
			    WriteToEeprom(fm_ch,fmbak);
			}
		}
		else if (dir == 1)		// prev
		{
		        if ( (fm_ch > 1))
		        {
        		        fm_ch --;
        		        while ((ReadFromEeprom(fm_ch) == 1) && (fm_ch >1))
        		        {
        		            fm_ch--;
        		        }
		        }
		}
		else if (dir == 2)		// next
		{
		        if ( (fm_ch < FM_MAX_MEM_BAND))
		        {
        		        fm_ch ++;
        		        while ((ReadFromEeprom(fm_ch) == 1) && (fm_ch <FM_MAX_MEM_BAND))
        		        {
        		            fm_ch++;
        		        }
		        }
		}
	       curfmfreq = fmbak*FM_STEP_WIDTH- FM_IF_FREQ;
		
		return fm_ch;
	}
	else
	{
		if (dir == 0)		//cur
		{
			if (ReadFromEeprom(am_ch) == 1)
			{
			    ambak = AM_MIN_COUNT;
			    am_ch = 1;
			    WriteToEeprom(am_ch, ambak);
			}
		}
		else if (dir == 1)		// prev
		{
			if (am_ch >1)
			{
			    am_ch--;
			    if (ReadFromEeprom(am_ch) == 1) 
			    {
			           am_ch++;
			           ReadFromEeprom(am_ch);
			    }
			}
			else
			{
			    am_ch = AM_MAX_MEM_BAND;
			    ReadFromEeprom(am_ch);
			    
			}
		}
		else if (dir == 2)		// next
		{
			if (am_ch < AM_MAX_MEM_BAND)
			{
			    am_ch++;
			    if (ReadFromEeprom(am_ch) == 1)
			    {
			        am_ch--;
			        ReadFromEeprom(am_ch);
			    }
			}
			else
			{
			    am_ch = 1;
			    ReadFromEeprom(am_ch);
			}
		}
	       curamfreq = ambak*AM_STEP_WIDTH- AM_IF_FREQ;		
		return am_ch;
	}
}
void Tuner_Delete_Station()
{
}
BYTE Tuner_Store_Station_Start()
{
        BYTE i;
        
    for(i = 1;i<=FM_MAX_MEM_BAND;i++)
    {
    	if (ReadFromEepromtest(i) == 1)// get empty station
    	{
    	    return i;
    	}
    }
    //return 0;
    return fm_ch;// current channel
}
void Tuner_Store_Station_Stop(BYTE userinputnum)
{
        Set_Station(userinputnum);	 
}
void Tuner_Store_Preset_Station()
{
	 Set_Station(fm_ch);
}

void Step_Search(BYTE dir)
{
	if (fmamflag == 0) // 0:fm 1:am
	{
		if (dir == 1) // up
		{
			fmbak++;
			if (fmbak > FM_MAX_COUNT)
				fmbak = FM_MIN_COUNT;
		}
		else
		{
			fmbak--;
			if (fmbak < FM_MIN_COUNT)
				fmbak = FM_MAX_COUNT;
		}
		curfmfreq = fmbak*FM_STEP_WIDTH-FM_IF_FREQ;
		Check_Station();
	}
	else
	{
		if (dir == 1) // up
		{
			ambak++;
			if (ambak > AM_MAX_COUNT)
				ambak = AM_MIN_COUNT;
		}
		else
		{
			ambak--;
			if (ambak < AM_MIN_COUNT)
				ambak = AM_MAX_COUNT;
		}
		curamfreq = ambak*AM_STEP_WIDTH-AM_IF_FREQ;
		Check_Station();
	}
	
}
void Manual_Search(BYTE dir)
{
	if (fmamflag == 0) // 0:fm 1:am
	{
		while(1)
		{
			if (dir == 1) // up
			{
				fmbak++;
				if (fmbak > FM_MAX_COUNT)
				{
					fmbak = FM_MAX_COUNT;
					break;
				}
			}
			else
			{
				fmbak--;
				if (fmbak < FM_MIN_COUNT)
				{
					fmbak = FM_MIN_COUNT;
					break;
				}
			}
			curfmfreq = fmbak*FM_STEP_WIDTH-FM_IF_FREQ;
			if (Is_Station()== 1)
				break;
		}
	}
	else
	{
		while(1)
		{
			if (dir == 1) // up
			{
				ambak++;
				if (ambak > AM_MAX_COUNT)
				{
					ambak = AM_MAX_COUNT;
					break;
				}
			}
			else
			{
				ambak--;
				if (ambak < AM_MIN_COUNT)
				{
					ambak = AM_MIN_COUNT;
					break;
				}
			}
			curamfreq = ambak*AM_STEP_WIDTH-AM_IF_FREQ;
			if (Is_Station()== 1)
				break;
		}	
	}
}
void Auto_Installation_Search()
{
	BYTE i;
	BYTE search_end;
	search_end = 0;
	i=0;
	if (fmamflag == 0)
	    fmbak = FM_MIN_COUNT;
	else
	    ambak = AM_MIN_COUNT;
	while(1)
	{
		while(1)
		{
			
			if (fmamflag == 0)
			{
        			fmbak++;
        			if (fmbak > FM_MAX_COUNT)
        			{
        				fmbak = FM_MAX_COUNT;
        				search_end = 1;
        				break;
        			}
			}
			else
			{
        			    ambak++;
        			if (ambak >AM_MAX_COUNT)
        			{
        				ambak = AM_MAX_COUNT;
        				search_end = 1;
        				break;
        			}
			}
			if (Is_Station()== 1)
				break;
			
			
		}		
		if(search_station==1)
		{
			i++;
                     Set_Station(i);
			search_station = 0;
		}
		if(search_end == 1)
		{
			search_station = 0;
                    // goto first 
		   	Set_Station(1);
		   	Check_Station();
		       break;
		}
		
	}		
}
void Set_Freq(WORD freq)
{
	BYTE temp;
	temp = freq&0xff;
	configvalue[6]=temp;
	temp = (freq>>8)&0xff;
	configvalue[7]=temp;

}
void Tuner_Main()
{
        #if 0 //def  TEST_IF_COUNT
      BYTE temp;
	if  ((P3_2 == 0) && (if_count_flag == 0)) 
	{
	       temp = 0x02;
	       Fmtuner_Write(0x83, &temp, 1);
	       Delay_X_ms(70); 
        	Fmtuner_Read(0x00,&temp,1);
        	if_count = temp&0x0f;
        	if ((temp & 0x01)== 0x01)
        	{
                      search_station = 1;	
        	        if_count_flag = 1;
        	}
    	}
    	else
    	{
    	    if_count_flag = 0;
    	}
    	#endif
    
}

⌨️ 快捷键说明

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