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

📄 radio.c

📁 我个人编写的车载dvd上的程序
💻 C
📖 第 1 页 / 共 5 页
字号:
			Radio.FMBand[FmIdx].BandAFNum=0;
			Radio.FMBand[FmIdx].BandPI=0;
		}
	}
}

void RDSLoadBandAF(void)
{
	unsigned char i;

	if(RDS.F_AFEnable||RDS.F_TAEnable)
	{
		if(FreqInFM(Radio.Freq))
		{
			RDS.PI=Radio.FMBand[FmIdx].BandPI;
			RDS.PIBackup=RDS.PI;
			RDS.AFNum=Radio.FMBand[FmIdx].BandAFNum;
			for(i=0;i<8;i++)
				RDS.AF[i]=Radio.FMBand[FmIdx].BandAFList[i];
			if(RDS.AFNum>1)
			{
				SetAFSearch();
			}
			if(RDS.PIBackup!=0)
			{
				RDS.PISeekTimer=PISeek10msTimer;
			}
		}
	}
	Radio.F_TunerDispReq=1;
}

#endif

/*********************************************
	Function:		SeekOn
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:17
*********************************************/
void SeekOn(void)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
	//seek on (ISS time constant)
	Radio.TunerBuff[0] |= 0x80;	
	RadioTunerSend(0,0);
	// enable IFC
  	Radio.TunerBuff[5] |= 0x08;
   	RadioTunerSend(5,5);
	//adjust slider for seek
	SaveSmeterSlider=Radio.TunerBuff[18];
	if(FreqInFM(Radio.Freq)) 
	{	
		Radio.TunerBuff[18] &= y11000000;
		Radio.TunerBuff[18] += y00100000;
	} 
	else
	{	
		//AM short time constant
		//Radio.TunerBuff[7] |= 0x01;
	       //RadioTunerSend(7,7);
		Radio.TunerBuff[18] &= y11000000;
		//Radio.TunerBuff[18] += y00000011;
		Radio.TunerBuff[18] += y00101111;//KSE
	}
	RadioTunerSend(18,18);
	BreakAFCheck();
}
#endif

#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
	//seek on (ISS time constant)
	Radio.TunerBuff[0] =(Radio.TunerBuff[0]&0x7f)|TDA7541_SEEK_ON;
	RadioTunerSend(0,0);
	//No enable/disable IFC in TDA7541
	//Set FSW offset to off, based on this to adjust seek sensitivity according customer spec.
	SaveFSWOffset=Radio.TunerBuff[16];
	Radio.TunerBuff[16]=(Radio.TunerBuff[16]&0x3f);//FSW offset off
	RadioTunerSend(16,16);
	BreakAFCheck();
}
#endif
}

/*********************************************
	Function:		SeekOff
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:15
*********************************************/
void SeekOff(void)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
	//seek off(ISS time constant)
	Radio.TunerBuff[0] &= 0x7F;
	RadioTunerSend(0,0);
	//Disable IFC
	Radio.TunerBuff[5] &= 0xf7;
   	RadioTunerSend(5,5);
	//Normal AGC time constant
	//Radio.TunerBuff[7] &= 0xFE;
	//RadioTunerSend(7,7);
	//Return back to original slider
	Radio.TunerBuff[18]=SaveSmeterSlider; 
	RadioTunerSend(18,18);
}
#endif
#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
	//seek on (ISS time constant)
	Radio.TunerBuff[0] =(Radio.TunerBuff[0]&0x7f)|TDA7541_SEEK_OFF;
	RadioTunerSend(0,0);
	//No need to enable/disable IFC
	//HAVE TO return back to FSW offset because this related to radio performance.
	Radio.TunerBuff[16]=SaveFSWOffset; 
	RadioTunerSend(16,16);

	BreakAFCheck();
}
#endif

}

/*********************************************
	Function:		RadioMute
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:14
*********************************************/
void RadioMute(unsigned char type)
{
	//if(type==SOFTOFF)
		//AFSPin(1);
		
	AudioMute(type);
	
	//if(type==SOFTON)
	//{
		//Wait10us(100);
		//AFSPin(0);
	//}
	
}

/*********************************************
	Function:		PresetOrder
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:13
*********************************************/
void PresetOrder(void)
{
	unsigned char i,j;
	if(TempPresetNum<6)
	{
		if(FreqInFM(Radio.Freq))
		{
			Radio.FMBand[FmIdx].MemFreq[TempPresetNum]=Radio.Freq;
			Radio.FMBand[FmIdx].MemSmeter[TempPresetNum]=GetSMeter();
		}
		else
		{
			Radio.AMBand[AmIdx].MemFreq[TempPresetNum]=Radio.Freq;
			Radio.AMBand[AmIdx].MemSmeter[TempPresetNum]=GetSMeter();
		}
		if(RDS.F_AFEnable)
		{
			if(FreqInFM(Radio.Freq))
			{
				if(RDS.AFNum>1)
				{
					Radio.FMBand[FmIdx].PI[TempPresetNum]=RDS.PI;
					if(RDS.AFNum>8)
						Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=8;
					else
						Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=RDS.AFNum;
					for(j=0;j<8;j++)
						Radio.FMBand[FmIdx].MemAFList[TempPresetNum][j]=RDS.AF[j];
				}
				else
				{
					Radio.FMBand[FmIdx].PI[TempPresetNum]=0;
					Radio.FMBand[FmIdx].MemAFNum[TempPresetNum]=0;
				}
			}
		}
		TempPresetNum++;
	}
	else
	{
		TempPresetSMMin=0xFF;
		if(FreqInFM(Radio.Freq))
		{
			for(i=0;i<6;i++)
			{
				if(TempPresetSMMin>Radio.FMBand[FmIdx].MemSmeter[i])
				{
					TempPresetSMMin=Radio.FMBand[FmIdx].MemSmeter[i];
					TempPresetSMMinNum=i;
				}
			}
		}
		else
		{
			for(i=0;i<6;i++)
			{
				if(TempPresetSMMin>Radio.AMBand[AmIdx].MemSmeter[i])
				{
					TempPresetSMMin=Radio.AMBand[AmIdx].MemSmeter[i];
					TempPresetSMMinNum=i;
				}
			}

		}
		if(GetSMeter()>TempPresetSMMin)
		{
			for(i=TempPresetSMMinNum;i<5;i++)
			{
				if(FreqInFM(Radio.Freq))
				{
					Radio.FMBand[FmIdx].MemFreq[i]=Radio.FMBand[FmIdx].MemFreq[i+1];
					Radio.FMBand[FmIdx].MemSmeter[i]=Radio.FMBand[FmIdx].MemSmeter[i+1];
				}
				else
				{
					Radio.AMBand[AmIdx].MemFreq[i]=Radio.AMBand[AmIdx].MemFreq[i+1];
					Radio.AMBand[AmIdx].MemSmeter[i]=Radio.AMBand[AmIdx].MemSmeter[i+1];
				}
				if(RDS.F_AFEnable)
				{
					if(FreqInFM(Radio.Freq))
					{
						Radio.FMBand[FmIdx].PI[i]=Radio.FMBand[FmIdx].PI[i+1];
						Radio.FMBand[FmIdx].MemAFNum[i]=Radio.FMBand[FmIdx].MemAFNum[i+1];
						for(j=0;j<8;j++)
							Radio.FMBand[FmIdx].MemAFList[i][j]=Radio.FMBand[FmIdx].MemAFList[i+1][j];
					}
				}
			}
			if(FreqInFM(Radio.Freq))
			{
				Radio.FMBand[FmIdx].MemFreq[5]=Radio.Freq;
				Radio.FMBand[FmIdx].MemSmeter[5]=GetSMeter();
			}
			else
			{
				Radio.AMBand[AmIdx].MemFreq[5]=Radio.Freq;
				Radio.AMBand[AmIdx].MemSmeter[5]=GetSMeter();
			}
			if(RDS.F_AFEnable)
			{
				if(FreqInFM(Radio.Freq))
				{
					if(RDS.AFNum>1)
					{
						Radio.FMBand[FmIdx].PI[5]=RDS.PI;
						if(RDS.AFNum>8)
							Radio.FMBand[FmIdx].MemAFNum[5]=8;
						else
							Radio.FMBand[FmIdx].MemAFNum[5]=RDS.AFNum;
						for(j=0;j<8;j++)
							Radio.FMBand[FmIdx].MemAFList[5][j]=RDS.AF[j];
					}
					else
					{
						Radio.FMBand[FmIdx].PI[5]=0;
						Radio.FMBand[FmIdx].MemAFNum[5]=0;
					}
				}
			}
		}

	}
}
/*********************************************
	Function:		RadioTunerSend
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:11
*********************************************/
void RadioTunerSend(unsigned char start, unsigned char end)
{
	unsigned char i;

  	I2CStart ();
  	I2COut8Bit(0xC4);
  	if(start==end)
		I2COut8Bit(start);
	else
	{
		#if TDA7540_TUNER
		if(!Radio.F_TDA7541)
		{
			I2COut8Bit(start+0x40);
		}
		#endif
		#if TDA7541_TUNER//Page mode bit change: Yete June-22-2007
		if(Radio.F_TDA7541)
		{
			I2COut8Bit(start+0x20);
		}
		#endif
	}
	for (i=start;i<=end; i++)
		I2COut8Bit(Radio.TunerBuff[i]);
	I2CStop();

}

/*********************************************
	Function:		RadioTunerRead
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:10
*********************************************/
void RadioTunerRead(void)
{
  	I2CStart ();
  	I2COut8Bit(0xC5);
  	Radio.ReadBuff.byte=I2CIn8Bit();
	I2CNAck();
	I2CStop();
}

/*********************************************
	Function:		Radio_PLL_FMISet
	Description:	
	Write/Modify:	Yete
	Time:		2006-06-02
*********************************************/
unsigned char Radio_PLL_FMISet(unsigned int FMfreq)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{
	if(FreqInOirtFM(FMfreq))//ORIT
	{
		if (FMfreq < FM67_0MHZ)
		{
			return (PLL_HICURRENT_2_5mA);
		}
		if (FMfreq < FM71_0MHZ)
		{
			return (PLL_HICURRENT_3MA);
		}
		return (PLL_HICURRENT_3_5mA);
	}
	else if(FreqInJapanFM(FMfreq))//Japan
	{
		if (FMfreq < FM80_0MHZ)
		{
			return (PLL_HICURRENT_1_5mA);
		}
		if (FMfreq < FM85_0MHZ)
		{
			return (PLL_HICURRENT_2MA);
		}
		return (PLL_HICURRENT_3MA);
	}
	if(FreqInWBFM(FMfreq))//Weather band
	{
		return (PLL_HICURRENT_0_5mA);
	}	
	else//Normal FM
	{
		if (FMfreq < FM94_5MHZ)
		{
			return (PLL_HICURRENT_1_5mA);
		}
		if (FMfreq < FM98_6MHZ)
		{
			return (PLL_HICURRENT_2_5mA);
		}
		if (FMfreq < FM106_9MHZ)
		{
			 return (PLL_HICURRENT_3MA);
		}
		return (PLL_HICURRENT_3_5mA);
	}	
}
#endif

#if TDA7541_TUNER
if(Radio.F_TDA7541)
{
	if(FreqInOirtFM(FMfreq))//ORIT
	{
		if (FMfreq < FM67_0MHZ)
		{
			return (TDA7541_PLL_HICURRENT_2_5mA);
		}
		if (FMfreq < FM71_0MHZ)
		{
			return (TDA7541_PLL_HICURRENT_3MA);
		}
		return (TDA7541_PLL_HICURRENT_3_5mA);
	}
	else if(FreqInJapanFM(FMfreq))//Japan
	{
		if (FMfreq < FM80_0MHZ)
		{
			return (TDA7541_PLL_HICURRENT_1_5mA);
		}
		if (FMfreq < FM85_0MHZ)
		{
			return (TDA7541_PLL_HICURRENT_2MA);
		}
		return (TDA7541_PLL_HICURRENT_3MA);
	}
	if(FreqInWBFM(FMfreq))//Weather band
	{
		return (TDA7541_PLL_HICURRENT_0_5mA);
	}	
	else//Normal FM
	{
		if (FMfreq < FM94_5MHZ)
		{
			return (TDA7541_PLL_HICURRENT_1_5mA);
		}
		if (FMfreq < FM98_6MHZ)
		{
			return (TDA7541_PLL_HICURRENT_2_5mA);
		}
		if (FMfreq < FM106_9MHZ)
		{
			 return (TDA7541_PLL_HICURRENT_3MA);
		}
		return (TDA7541_PLL_HICURRENT_3_5mA);
	}	
}
#endif

}

/*********************************************
	Function:		Radio_PLL_AMISet
	Description:	
	Write/Modify:	Yete
	Time:		2006-06-02
*********************************************/
unsigned char Radio_PLL_AMISet(unsigned int AMfreq)
{
#if TDA7540_TUNER
if(!Radio.F_TDA7541)
{

	if (AMfreq < AM530KHZ)//LW
	{
		return (PLL_HICURRENT_2MA);
	}
	if (AMfreq < AM999KHZ)//MW
	{
		return (PLL_HICURRENT_2_5mA);
	}
	if (AMfreq < AM1404KHZ)
	{
		return (PLL_HICURRENT_3MA);
	}
	return (PLL_HICURRENT_3_5mA);
}
#endif

#if TDA7541_TUNER
if(Radio.F_TDA7541)
{

	if (AMfreq < AM530KHZ)//LW
	{
		return (TDA7541_PLL_HICURRENT_2MA);
	}
	if (AMfreq < AM999KHZ)//MW
	{
		return (TDA7541_PLL_HICURRENT_2_5mA);
	}
	if (AMfreq < AM1404KHZ)
	{
		return (TDA7541_PLL_HICURRENT_3MA);
	}
	return (TDA7541_PLL_HICURRENT_3_5mA);
}
#endif

}

/*********************************************
	Function:		Radio10msTimer
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:09
*********************************************/
void Radio10msTimer(void)
{
	if(RadioWaitTimer>0)RadioWaitTimer--;
	if(RadioWorkTimer10ms>0)RadioWorkTimer10ms--;
	
}

/*********************************************
	Function:		Radio100msTimer
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:08
*********************************************/
void Radio100msTimer(void)
{
	if(RadioWorkTimer>0)RadioWorkTimer--;
	if(AFTAShowTimer>1)AFTAShowTimer--;
	if(SeekKeyTimer>0)SeekKeyTimer--;
	if(RadioSeekMuteTimer>0)RadioSeekMuteTimer--;
}

#if 0 //def SINO_MOS
void DisplaySeekFreq(unsigned int setfreq)
{
 unsigned char str[8]="       ";
       unsigned char i;
       unsigned char j;
       if(FreqInFM(setfreq)){
       	str[0] = 'F';
       str[1] = 'M';
       }else if(FreqInAM(setfreq))
       	{
       	str[0] = 'A';
       	str[1] = 'M';
       	}
       str[2] = ' ';
       i = setfreq;
       j = setfreq%10;
       
       
       str[6] = '0' + j;
       i = i/10;
       j = i%10;
       str[5] = '0'+j;
       i = i/10;
    

⌨️ 快捷键说明

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