📄 tunerctr.c
字号:
***************************************************************************************/
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 + -