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

📄 bbktuner.~c

📁 关于收音功能代码,并且显示在OSD和VFD上
💻 ~C
📖 第 1 页 / 共 4 页
字号:
    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 + -