📄 bbktuner.~c
字号:
Parameter :
Return :
***************************************************************************************/
void eeprom_save_tune(void) large
{
fgEepromWriteByte(TUNER_ACTIVE_BAND,_fgAmFm);
fgEepromWriteByte(TUNER_SIGNAL_TYPE,_fgTunerMode);
fgEepromWriteByte(TUNER_FM_PRESET,_bFmPreset);
eeprom_save_fm(TOTAL_SAVE_FM_NUM+1);
fgEepromWriteByte(TUNER_AM_STEP,_fgStep9K10K);
fgEepromWriteByte(TUNER_AM_PRESET,_bAmPreset);
eeprom_save_am(TOTAL_SAVE_AM_NUM+1);
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void eeprom_call_tune(void) large
{
_fgAmFm=bEepromReadByte(TUNER_ACTIVE_BAND);
if(_fgAmFm>1)
{
_fgAmFm=0;
}
_fgTunerMode=bEepromReadByte(TUNER_SIGNAL_TYPE);
if(_fgTunerMode>1)
{
_fgTunerMode=0;
}
_bFmPreset=bEepromReadByte(TUNER_FM_PRESET);
if(_bFmPreset>TOTAL_SAVE_FM_NUM || _bFmPreset<1)
{
_bFmPreset=1;
}
if(!eeprom_call_fm(TOTAL_SAVE_FM_NUM+1))
{
_bFmFreq=0;
}
_fgStep9K10K=bEepromReadByte(TUNER_AM_STEP);
if(_fgStep9K10K>1)
{
_fgStep9K10K=STEP_DEFAULT;
}
_bAmPreset=bEepromReadByte(TUNER_AM_PRESET);
if(_bAmPreset>TOTAL_SAVE_AM_NUM || _bAmPreset<1)
{
_bAmPreset=1;
}
if(!eeprom_call_am(TOTAL_SAVE_AM_NUM+1))
{
_bAmFreq=0;
}
if(_fgAmFm == AMFM_FM)
{
_bPreset=_bFmPreset;
}
else
{
_bPreset=_bAmPreset;
}
_bProgram=_bPreset;
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vInitTuned(void) large
{
eeprom_call_tune();
_fgTuneKey=0;
_fgTunerStMo=T_MONO;
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
_bProcess=RUN_TUNER;
_fgRunTuner=ON;
_bDisplayState=D_mDIS_TUNED;
_bDisplayStep=0;
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vRunWaiting(void) large
{
DWRD dwIFData;
if(_fgAmFm==AMFM_FM)
{
_bComReg++;
_bComReg&=0x7F;
if(_bComReg==0x00)
{
_fgTunerStMo=T_MONO;
dwIFData = dwReadIFCounter();//vReadCcbData( );
if((dwIFData | 0xffbfffff) != 0xffbfffff)
{
return;
}
if(_fgTunerMode==MODE_AUTO)
{
if((dwIFData | 0xff7fffff) == 0xff7fffff)
{
_fgTunerStMo=T_STEREO;
}
}
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vTunerFreqUp(void) large
{
if (_fgAmFm==AMFM_AM)
{
_bAmFreq++;
if((_bAmFreq>MAX_AMFREQ9K)||((_fgStep9K10K==STEP_10K)&&(_bAmFreq>MAX_AMFREQ10K)))
{
_bAmFreq=0;
}
if(_fgAutoSearchTune==ON)
{
if(_bAmFreq==_bIntRegister)
{
if(_bProgram>1)
{
eeprom_call_am(1);
}
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
}
}
}
else
{
_bFmFreq++;
if(_bFmFreq>MAX_FMFREQ)
{
_bFmFreq=0;
}
if(_fgAutoSearchTune==ON)
{
if(_bFmFreq==_bIntRegister)
{
if(_bProgram>1)
{
eeprom_call_fm(1);
}
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
}
}
}
_fgRunTuner=ON;
_fgTunerDir=T_FREQUP;
_fgSaveAmFm=1;
if(_bDisplayState!=D_mDIS_VOLUME)
{
_bDisplayStep=0;
_bDisplayState=D_mDIS_TUNED;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vTunerFreqDown(void) large
{
if (_fgAmFm==AMFM_AM)
{
if(_bAmFreq!=0)
{
_bAmFreq--;
}
else
{
if(_fgStep9K10K==STEP_9K)
{
_bAmFreq=MAX_AMFREQ9K;
}
else
{
_bAmFreq=MAX_AMFREQ10K;
}
}
if(_fgAutoSearchTune==ON)
{
if(_bAmFreq==_bIntRegister)
{
if(_bProgram>1)
{
eeprom_call_am(1);
}
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
}
}
}
else
{
if(_bFmFreq!=0)
{
_bFmFreq--;
}
else
{
_bFmFreq=MAX_FMFREQ;
}
if(_fgAutoSearchTune==ON)
{
if(_bFmFreq==_bIntRegister)
{
if(_bProgram>1) eeprom_call_fm(1);
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
}
}
}
_fgRunTuner=ON;
_fgTunerDir=T_FREQDN;
_fgSaveAmFm=1;
if(_bDisplayState!=D_mDIS_VOLUME)
{
_bDisplayStep=0;
_bDisplayState=D_mDIS_TUNED;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vRunTuner(void) large
{
static BYTE xdata f_tunerok;
static BYTE xdata f_tuning;
static BYTE xdata r_tunerrunstep;
BYTE work;
DWRD dwIFData;
union
{
DWRD dwData;
BYTE bByte[4];
}uIFData;
if (_fgRunTuner==ON)
{
_fgRunTuner=OFF;
f_tunerok=OFF;
f_tuning=ON;
r_tunerrunstep=0;
}
if(f_tuning==ON)
{
switch (r_tunerrunstep)
{
case 0:
vTunerMute(TRUE);
vIFCountReset();
r_tunerrunstep++;
//Terry delete _bTunerWaitTime=D_TIME60ms;//D_TIME100ms;
break;
case 1:
//Terry delete if(_bTunerWaitTime==0)
{
vIFCountStart();
r_tunerrunstep++;
_bTunerWaitTime=D_TIME60ms;//D_TIME100ms;
}
break;
case 2:
if( (_bTunerWaitTime==0)||(ReadDTSDOIo()==0))
{
_fgTunerStMo=T_MONO;
uIFData.dwData = dwReadIFCounter();
dwIFData=uIFData.dwData;
work=uIFData.bByte[1];
if(_fgAmFm==AMFM_FM)
{
if(_fgTunerMode==MODE_AUTO)
{
if((dwIFData | 0xff7fffff) == 0xff7fffff) _fgTunerStMo=T_STEREO;
}
}
work=work & 0x10;// _bTunerOutByte&0X10;
if(work==0x10)
{
if(_fgAmFm==AMFM_FM)
{
dwIFData = (dwIFData & 0xfffff) / 32;
/*It is allowed between a range from 10690 to 10711.The FM's IF IS 10700*/
if((dwIFData > 10695) && (dwIFData < 10703))
{
f_tunerok=ON;
}
}
else
{
dwIFData = (dwIFData & 0xfffff) / 8;
/*It is allowed between a range from 448 to 452.The AM's IF IS 450*/
if((dwIFData > 448) && (dwIFData < 452))
{
f_tunerok=ON;
}
}
}
else
{
vClearDeadZone();
}
if(f_tunerok==ON)
{
r_tunerrunstep=4;
}
else
{
if((_fgAutoSearchTune==ON)||(_fgTuneAuto==ON))
{
if (_fgTunerDir==T_FREQUP) vTunerFreqUp();
else vTunerFreqDown();
}
else
{
r_tunerrunstep=3;
}
}
}
break;
case 3:
vIFCountNormal();
r_tunerrunstep=0;
f_tuning=OFF;
vTunerMute(FALSE);
eeprom_save_tune();
_bProcess=RUN_NOTHING;
#ifdef BBK_RD2_RDS
vRDSSHOWCLR();
#endif
break;
case 4:
if(_bTunerWaitTime==0)
{
if(_fgAutoSearchTune==ON)
{
r_tunerrunstep=5;
_bTunerWaitTime=D_TIME500ms;
_bDisplayStep=4;
_bDisplayState=D_mDIS_TUNED;
}
else
{
_fgTuneAuto=OFF;
r_tunerrunstep=3;
}
}
break;
case 5:
if(_bTunerWaitTime==0)
{
if (_fgAmFm==AMFM_AM)
{
eeprom_save_am(_bProgram);
_bProgram++; // save frequency
if(_bProgram>TOTAL_SAVE_AM_NUM)
{
_bProgram=1;
_bPreset=1;
_bAmPreset=1;
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
r_tunerrunstep=6; // end
}
}
else
{
eeprom_save_fm(_bProgram);
_bProgram++; // save frequency
if(_bProgram>TOTAL_SAVE_FM_NUM)
{
_bProgram=1;
_bPreset=1;
_bAmPreset=1;
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
r_tunerrunstep=6; // end
}
}
if(_fgAutoSearchTune==ON)
{
if (_fgTunerDir==T_FREQUP) vTunerFreqUp();
else vTunerFreqDown();
}
}
break;
case 6:
r_tunerrunstep=7; // end
break;
case 7:
if(_fgAmFm==AMFM_AM)eeprom_call_am(1);
else eeprom_call_fm(1);
_fgRunTuner=ON;
break;
}
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vRunAmFm(void) large
{
switch(_bRunStep)
{
case 0: //KEY:BAND
//_bKeyEnable=ENABLE_TUNER_KEY;
_bRunStep=12;
_fgAutoSearchTune=OFF;
if(_fgTuneAuto==ON)
{
_fgTuneAuto=OFF;
}
else
{
if(_fgAmFm==AMFM_FM)
{
_fgAmFm=AMFM_AM;
_bPreset=_bAmPreset;
}
else
{
_fgAmFm=AMFM_FM;
_bPreset=_bFmPreset;
}
_bProgram=_bPreset;
_fgSaveAmFm=1;
_fgRunTuner=ON;
vTunerMute(TRUE);
}
_bDisplayStep=0;
_bDisplayState=D_mDIS_TUNED;
break;
case 2: //KEY:TUNE+,TUNE-
//_bKeyEnable=ENABLE_TUNER_KEY;
switch(_bDisplayState)
{
case D_mDIS_TUNED:
case D_mDIS_NORMAL:
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
if (_fgTunerDir==T_FREQUP) vTunerFreqUp();
else vTunerFreqDown();
_bDisplayStep=0;
_bRunStep=12;
break;
case D_mDIS_TUNEMEMORY:
break;
default:
_bDisplayStep=0;
_bDisplayState=D_mDIS_TUNED;
_bRunStep=10;
break;
}
break;
case 3: //KEY:AUTOTUNE++,AUTOTUNE--
//_bKeyEnable=ENABLE_TUNER_KEY;
switch(_bDisplayState)
{
case D_mDIS_TUNED:
case D_mDIS_NORMAL:
if(_fgTuneAuto==OFF)
{
_fgTuneAuto=ON;
_fgRunTuner=ON;
if(_fgAmFm==AMFM_FM) _bIntRegister=_bFmFreq;
else _bIntRegister=_bAmFreq;
}
if (_fgTunerDir==T_FREQUP) vTunerFreqUp();
else vTunerFreqDown();
break;
case D_mDIS_TUNEMEMORY:
if(_fgAutoSearchTune==OFF)
{
_bProgram=1;
_bPreset=1;
_fgAutoSearchTune=ON;
_fgTuneAuto=ON;
if(_fgAmFm==AMFM_FM) _bIntRegister=_bFmFreq;
else _bIntRegister=_bAmFreq;
_fgRunTuner=ON;
}
break;
}
_bDisplayStep=0;
_bDisplayState=D_mDIS_TUNED;
_bRunStep=12;
break;
case 5: //KEY:ST\MONO
//_bKeyEnable=ENABLE_TUNER_KEY;
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
if(_fgAmFm==AMFM_FM)
{
if(_fgTunerStMo==T_STEREO) _fgTunerStMo=T_MONO;
else _fgTunerStMo=T_STEREO;
_fgRunTuner=ON;
_bDisplayStep=0;
_bDisplayState=D_mDIS_STEREO;
}
_bRunStep=12;
break;
case 8: //KEY:MODE
//_bKeyEnable=ENABLE_TUNER_KEY;
if(_fgAmFm==AMFM_FM)
{
if(_fgTunerMode==MODE_AUTO) _fgTunerMode=MODE_MANU;
else _fgTunerMode=MODE_AUTO;
_fgSaveAmFm=1;
_fgRunTuner=ON;
vTunerMute(TRUE);
_bComReg=0;
_bDisplayStep=2;
_bDisplayState=D_mDIS_TUNED;
_bRunStep=9;
}
_bRunStep=12;
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
break;
case 9:
_bComReg++;
if(_bComReg>60) _bRunStep=12;
break;
case 10:
_bProcess=RUN_NOTHING;
break;
case 11:
case 12:
_bProcess=RUN_TUNER;
break;
case 13: //KEY:STEP
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
if(_bDisplayState==D_mDIS_STEP)
{
if(_fgStep9K10K==STEP_9K)
{
_fgStep9K10K=STEP_10K;
if(_bAmFreq>=MAX_AMFREQ10K) _bAmFreq-=2;
}
else
{
_fgStep9K10K=STEP_9K;
}
_fgSaveAmFm=1;
}
_bDisplayStep=0;
_bDisplayState=D_mDIS_STEP;
_bRunStep=12;
break;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vRunTunerMemory(void) large
{
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
switch(_bRunStep)
{
case 0:
//_bKeyEnable=ENABLE_NON_KEY; // 按键无效
_bRunStep=1;
_bDisplayStep=0;
if(_bDisplayState!=D_mDIS_TUNEMEMORY) _bDisplayState=D_mDIS_TUNEMEMORY;
else
{
_bVfdTimer=0;
_bProcess=RUN_NOTHING;
_bDisplayState=D_mDIS_NORMAL;
} break;
case 1:
_bProcess=RUN_NOTHING;
break;
}
}
/***************************************************************************************
Function :
Description :
Parameter :
Return :
***************************************************************************************/
void vRunAutoSearch(void) large
{
_fgAutoSearchTune=OFF;
_fgTuneAuto=OFF;
switch(_bRunStep)
{
case 0:
//_bKeyEnable=ENABLE_NON_KEY; // 按键无效
// _bRunStep=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -