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

📄 bbktuner.c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 C
📖 第 1 页 / 共 3 页
字号:
						case IR_AMP_TREBLE_UP:
						case IR_AMP_TRENLE_DN:
						case IR_AMP_BASS_BOOST:
							_bIRKey=IR_NONE;
						break;

						default:
						break;
					}
			}
	}
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void eeprom_save_am(BYTE bChannel) large
{
	WORD bAddress;
	
	bAddress = TUNER_AM_STATION1 + (bChannel - 1);
	fgEepromWriteByte(bAddress,_bAmFreq);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void eeprom_clear_am(BYTE bChannel) large
{
	WORD bAddress;
	
	bAddress = TUNER_AM_STATION1 + (bChannel - 1);
	fgEepromWriteByte(bAddress,0xff);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
BYTE eeprom_call_am(BYTE bChannel) large
{
	WORD bAddress;
	WORD wFreqBuf;
	
	bAddress = TUNER_AM_STATION1 + (bChannel - 1);
	wFreqBuf = (WORD)(bEepromReadByte(bAddress));
if((wFreqBuf>MAX_AMFREQ9K)&&(_fgStep9K10K==STEP_9K))
{
wFreqBuf=0;
}
else if((wFreqBuf>MAX_AMFREQ10K)&&(_fgStep9K10K==STEP_10K))
{
wFreqBuf=0;
}

	if(((_fgStep9K10K==STEP_9K) &&(wFreqBuf<=MAX_AMFREQ9K))||(wFreqBuf<=MAX_AMFREQ10K))
	{
		_bAmFreq=wFreqBuf;
		_fgRunTuner=ON;
		return(1);
	}
	return(0);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void eeprom_save_fm(BYTE bChannel) large
{
	WORD bAddress;
	
	bAddress = TUNER_FM_STATION1 + (bChannel - 1) * 2;
	fgEepromWriteByte(bAddress+1, bHiByte(_bFmFreq));
	fgEepromWriteByte(bAddress, bLoByte(_bFmFreq));
	//fgEepromWriteByte(bAddress, bHiByte(_bFmFreq));
	//fgEepromWriteByte(bAddress+1, bLoByte(_bFmFreq));
}

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

	bAddress = TUNER_FM_STATION1 + (bChannel - 1) * 2;
	uChannel.bByte[0] = bEepromReadByte(bAddress);
	uChannel.bByte[1] = bEepromReadByte(bAddress+1);
	//wFreqBuf = uChannel.wWord;
	wFreqBuf = (uChannel.bByte[1]<<8)+uChannel.bByte[0];

	 if(wFreqBuf>MAX_FMFREQ)
	{
		wFreqBuf=0;
	}

	if(wFreqBuf<=MAX_FMFREQ)
	{
		_bFmFreq=wFreqBuf;
		_fgRunTuner=ON;
		return(1);
	}
	return(0);
}

/***************************************************************************************
    Function : 
    Description : 
    Parameter : 
    Return    : 
***************************************************************************************/
void eeprom_clear_fm(BYTE bChannel) large
{
	WORD bAddress;
	
	bAddress = TUNER_FM_STATION1 + (bChannel - 1) * 2;
	fgEepromWriteByte(bAddress, 0xff);
	fgEepromWriteByte(bAddress+1, 0xff);
}

/***************************************************************************************
    Function : 
    Description : 
    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;
	_fgAmFm=AMFM_FM;
	_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++;
				_bTunerWaitTime=4;//D_TIME100ms;
			break;
				
			case 1: 
				if(_bTunerWaitTime==0)
				{
					vIFCountStart();
					r_tunerrunstep++;
					_bTunerWaitTime=D_TIME60ms;//D_TIME100ms;
				}
			break;
				
			case 2:	
				#ifdef PIN_DESIGN89L
				  InitIoPIN_GPIO19(1);//fjw070728
				#endif
				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 > 10693) && (dwIFData < 10706))
							//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);

⌨️ 快捷键说明

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