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

📄 tunerctr.c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 C
📖 第 1 页 / 共 2 页
字号:
***************************************************************************************/
BOOL fgGetRealFreq(WORD *wFreq) large
{
	if(TUNER_BAND_FM == _eTunerBand)
	{
		*wFreq = FM_FREQ_MIN + (*wFreq) * FM_STEP;
		if((*wFreq) > FM_FREQ_MAX)
		{
			*wFreq = FM_FREQ_MAX;
		} 
	}
	else if(TUNER_BAND_AM == _eTunerBand)
	{
		if(AM_STEP_9K == _eAmStep)
		{
			*wFreq = AM_FREQ_9K_MIN + (*wFreq) * AM_9K_STEP;
		}
		else
		{
			*wFreq = AM_FREQ_10K_MIN + (*wFreq) * AM_10K_STEP;
		}

		if((*wFreq) > AM_FREQ_MAX)
		{
			*wFreq = AM_FREQ_MAX;
		}
	}
	else
	{
		return(FALSE);
	}

	return(TRUE);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vEepromDelay(BYTE bDelayNum) large
{
	BYTE i;

	for(i=0; i<bDelayNum; i++)
	{
		/*delay time = (2us * EEPROM_DELAY)*/
		vI2CDelay2us(0xf0);
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerSaveChannelFreq(BYTE bChannel, WORD wFreq) large
{
	BYTE bAddress;

	if(bChannel > _bFmAmStationMax || bChannel < 1)
	{
		return;
	}

	if(TUNER_BAND_FM == _eTunerBand)
	{
		if(wFreq > FM_CH_MAX)
		{
		wFreq = FM_CH_MAX; 
		}

		bAddress = TUNER_FM_STATION1 + (bChannel - 1) * 2;
		fgEepromWriteByte(bAddress, bHiByte(wFreq));
		fgEepromWriteByte(bAddress+1, bLoByte(wFreq));
	}
	else if(TUNER_BAND_AM == _eTunerBand)
	{
		if(AM_STEP_9K == _eAmStep)
		{
			if(wFreq > AM_CH_9K_MAX)
			{
				wFreq = AM_CH_9K_MAX;
			}
		}
		else
		{
			if(wFreq > AM_CH_10K_MAX)
			{
			wFreq = AM_CH_10K_MAX;
			}
		}

		bAddress = TUNER_AM_STATION1 + (bChannel - 1);
		fgEepromWriteByte(bAddress, (BYTE)wFreq);
	}
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
WORD wTunerReadChannelFreq(BYTE bChannel) large
{
	BYTE bAddress;
	WORD wFreqBuf;
	union
	{
		WORD wWord;
		BYTE bByte[2];
	}uChannel;

	if(TUNER_BAND_FM == _eTunerBand)
	{
		bAddress = TUNER_FM_STATION1 + (bChannel - 1) * 2;
		uChannel.bByte[0] = bEepromReadByte(bAddress);
		uChannel.bByte[1] = bEepromReadByte(bAddress+1);
		wFreqBuf = uChannel.wWord;

		if(wFreqBuf > FM_CH_MAX)
		{
			wFreqBuf = FM_CH_MAX; 
		}
	}
	else if(TUNER_BAND_AM == _eTunerBand)
	{
		bAddress = TUNER_AM_STATION1 + (bChannel - 1);
		wFreqBuf = (WORD)(bEepromReadByte(bAddress));

		if(AM_STEP_9K == _eAmStep)
		{
			if(wFreqBuf > AM_CH_9K_MAX)
			{
				wFreqBuf = AM_CH_9K_MAX;
			}
		}
		else
		{
			if(wFreqBuf > AM_CH_10K_MAX)
			{
				wFreqBuf = AM_CH_10K_MAX;
			}
		}
	}

	return(wFreqBuf);
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerSaveChannel(void) large
{
	if(TUNER_BAND_FM == _eTunerBand)
	{
		if(_bStationNo > FM_STATION_MAX)
		{
			_bStationNo = 1;
		}

		fgEepromWriteByte(TUNER_FM_CHANNEL, _bStationNo);
	}
	else if(TUNER_BAND_AM == _eTunerBand)
	{
		if(_bStationNo > AM_STATION_MAX)
		{
			_bStationNo = 1;
		}

		fgEepromWriteByte(TUNER_AM_CHANNEL, _bStationNo);
	}
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
BYTE bTunerReadChannel(void) large
{
	BYTE bChTmp;

	if(TUNER_BAND_FM == _eTunerBand)
	{
		bChTmp = bEepromReadByte(TUNER_FM_CHANNEL);

		if(bChTmp > FM_STATION_MAX ||bChTmp < 1 ) 
		{
			bChTmp = 1;
		}
	}
	else if(TUNER_BAND_AM == _eTunerBand)
	{
		bChTmp = bEepromReadByte(TUNER_AM_CHANNEL);

		if(bChTmp > AM_STATION_MAX || bChTmp <1)
		{
			bChTmp = 1;
		}
	}

	return(bChTmp);
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerSaveBand(void) large
{
	if(_eTunerBand > TUNER_BAND_MAX)
	{
		_eTunerBand = TUNER_BAND_FM;
	}

	fgEepromWriteByte(TUNER_ACTIVE_BAND, _eTunerBand);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerReadBand(void) large
{
	_eTunerBand = bEepromReadByte(TUNER_ACTIVE_BAND);

	if(_eTunerBand > TUNER_BAND_MAX)
	{
		_eTunerBand = TUNER_BAND_FM;
	}
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerSaveAMStep(void) large
{
	if(_eAmStep > AM_STEP_MAX)
	{
		_eAmStep = AM_STEP_10K;
	}

	fgEepromWriteByte(TUNER_AM_STEP, _eAmStep);
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerReadAMStep(void) large
{
	_eAmStep = bEepromReadByte(TUNER_AM_STEP);

	if(_eAmStep > AM_STEP_MAX)
	{
		_eAmStep = AM_STEP_10K;
	}
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerSaveSignalType(void) large
{
	if(_eSignalType > TUNER_SIGNAL_MAX)
	{
		_eSignalType = TUNER_SIGNAL_STEREO;
	}

	fgEepromWriteByte(TUNER_SIGNAL_TYPE, _eSignalType);
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTunerReadSignalType(void) large
{
	_eSignalType = bEepromReadByte(TUNER_SIGNAL_TYPE);

	if(_eSignalType > TUNER_SIGNAL_MAX)
	{
		_eSignalType = TUNER_SIGNAL_STEREO;
	}
}	

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTnrInitRadio(void) large
{
	BYTE i;

	vTunerPower(TRUE);

	/*It must read radio band first!*/
	vTunerReadBand();

	if(TUNER_BAND_FM == _eTunerBand) _bFmAmStationMax=FM_STATION_MAX;
	else if(TUNER_BAND_AM == _eTunerBand) _bFmAmStationMax=AM_STATION_MAX;

	vEepromDelay(EEPROM_DELAY);
	vTunerReadSignalType();
	vEepromDelay(EEPROM_DELAY);
	vTunerReadAMStep();
	vEepromDelay(EEPROM_DELAY);
	_bStationNo = bTunerReadChannel();
	vEepromDelay(EEPROM_DELAY);
	_wActiveFreq = wTunerReadChannelFreq(_bStationNo);

	vStartIFCounter(_wActiveFreq, FALSE);
	vVfdSymbol(VFD_SYM_MEM_ON);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void vTnrStoreRadio(void) large
{
	vTunerMute(TRUE);

	vTunerSaveBand();
	vEepromDelay(EEPROM_DELAY);
	vTunerSaveSignalType();
	vEepromDelay(EEPROM_DELAY);
	vTunerSaveAMStep();
	vEepromDelay(EEPROM_DELAY);
	vTunerSaveChannel();
	vEepromDelay(EEPROM_DELAY);

	vTunerPower(FALSE);
}






// *********************************************************************
// Function : void vTunerMute(BYTE fgMute) large
// Description : Used CD4052,realized mute or not!
// Parameter :   BOOL fgMute: mute or not
// Return    :   none
// *********************************************************************
void vTunerMute(BYTE fgMute) large
{
	
}	

#endif

⌨️ 快捷键说明

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