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

📄 radio.c

📁 TDA7451source TDA7451source
💻 C
📖 第 1 页 / 共 4 页
字号:
					Radio.WorkMode=RADIO_WORK_ASPSBREAK;
				}
				else
				{
					Radio.WorkMode=RADIO_WORK_SEEKREQ;
				}
			}
			
			break;

		case S_AD_AS:
		case S_RM_AS:
			M_RadioNewKey;
			if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
			{
				Radio.WorkMode=RADIO_WORK_SEEKBREAK;
			}
			else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
			{
				Radio.WorkMode=RADIO_WORK_ASPSBREAK;
			}
			else
			{
				Radio.WorkMode=RADIO_WORK_PSREQ;
			}
			break;

		case L_AD_AS:
		case L_RM_AS:
			M_RadioNewKey;
			if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
			{
				Radio.WorkMode=RADIO_WORK_SEEKBREAK;
			}
			else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
			{
				Radio.WorkMode=RADIO_WORK_ASPSBREAK;
			}
			else
			{
				Radio.WorkMode=RADIO_WORK_ASREQ;
			}
			break;

		case S_AD_BAND:
		case S_RM_BAND:
			M_RadioNewKey;
			if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
			{
				Radio.WorkMode=RADIO_WORK_SEEKBREAK;
			}
			else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
			{
				Radio.WorkMode=RADIO_WORK_ASPSBREAK;
			}
			Radio.CurrentBand=MaxMinChangeProtect(Radio.CurrentBand,1, 4, 0, 0);
			Radio.ReqFreq=Radio.Band[Radio.CurrentBand].BandFreq;
			Radio.F_ForceSetBuff=1;
			RadioMute(SOFTON);
			RadioSetFreq(Radio.ReqFreq);
			RadioMute(SOFTOFF);
			Radio.F_TunerDispReq=1;
			break;
			
		case S_AD_LOC:
			M_RadioNewKey;
			Radio.F_LocDx=~Radio.F_LocDx;
			Radio.F_ForceSetBuff=1;
			RadioMute(SOFTON);
			RadioSetFreq(Radio.ReqFreq);
			RadioMute(SOFTOFF);
			F_DISP_LOC=Radio.F_LocDx;
			Radio.F_TunerDispReq=1;
			break;

		case L_AD_DISP://scan
			M_RadioNewKey;
			if(AFTAShowTimer>1)AFTAShowTimer=1;
			//if(AudioWorkMode!=AUDIO_MODE_IDLE)break;
			if(RADIO_IN_SEEK)
			{
				Radio.WorkMode=RADIO_WORK_SEEKBREAK;
			}
			else if(RADIO_IN_AS||RADIO_IN_PS)
			{
				Radio.WorkMode=RADIO_WORK_ASPSBREAK;
			}

			if(Radio.F_Scan)
			{
				Radio.F_Scan=0;
			}
			else
			{
				Radio.Direction=1;
				Radio.F_Scan=1;
				Radio.ScanBackupFreq=Radio.Freq;
				Radio.WorkMode=RADIO_WORK_SEEKREQ;
			}
			break;			
	}

}

/*********************************************
	Function:		RadioDisplay
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:29
*********************************************/
void RadioDisplay(void)
{
	unsigned int i;
	unsigned char j;

	if(System.DispMode.Next==DISPMODE_RADIO)
	{
		Radio.F_TunerDispReq=1;
	}
	if(System.DispMode.Last==DISPMODE_RADIO)
	{
		DisplayClear(CLEARNUM9);
		F_DISP_P=0;
		F_DISP_ST=0;
	}
	// display others
	if(System.DispMode.Current!=DISPMODE_RADIO)return;
	
	if(F_HalfSecondOut)
	{
		ShowVolBar();
		if(F_SpecOK)
		{
			F_SpecOK=0;
			ShowSpectrum();
		}
		RadioTunerRead();
		if (F_TunerStereo)
			F_DISP_ST=1;
		else
			F_DISP_ST=0;
	}
	
	if(!Radio.F_TunerDispReq)return;
	Radio.F_TunerDispReq=0;
		
	if(RADIO_IN_SEARCH&&Radio.WorkMode!=RADIO_WORK_SCANWAIT)
	{
		if(RADIO_IN_AS)
		{
			//PrintLine2("   Auto Store");
			DispNum[0]=' ';
			DispNum[1]='S';
			DispNum[2]='T';
			DispNum[3]='O';
			DispNum[4]='R';
			DispNum[5]='E';
			DispNum[6]=' ';
			DispNum[7]=' ';
			DisplayRefresh();
		}
		else if(Radio.F_Scan)
		{
			DispNum[0]=' ';
			DispNum[1]=' ';
			DispNum[2]='S';
			DispNum[3]='C';
			DispNum[4]='A';
			DispNum[5]='N';
			DispNum[6]=' ';
			DispNum[7]=' ';
			DisplayRefresh();
		}
		else
		{
			/*if(RDS.F_PISeek)
				PrintLine2("     PI Seek");
			else if(RDS.F_TAEnable)
				PrintLine2("     TA Seek");
			else
				PrintLine2("   Auto Seek");*/
			DispNum[0]=' ';
			DispNum[1]=' ';
			DispNum[2]='S';
			DispNum[3]='E';
			DispNum[4]='E';
			DispNum[5]='K';
			DispNum[6]=' ';
			DispNum[7]=' ';
			DisplayRefresh();
		}
		DispNum[8]=' ';
		F_DISP_P=0;
		return;
	}
	
	if(Radio.Band[Radio.CurrentBand].CurrentMem==0)
	{
		DispNum[8]=' ';
	}
	else
	{
		DispNum[8]=Radio.Band[Radio.CurrentBand].CurrentMem;
	}
	
	if(FreqInFM(Radio.Freq))
	{
		if(FreqInWBFM(Radio.Freq))
		{
			DispNum[0]='W';
			DispNum[1]='B';
			DispNum[2]='1';
			DispNum[3]='6';
			i=Radio.Freq;
			j=i%10;
			DispNum[7]=j;
			i=i/10;
			j=i%10;
			DispNum[6]=j;
			i=i/10;
			j=i%10;
			DispNum[5]=j;
			i=i/10;
			j=i%10;
			DispNum[4]=j;
			F_DISP_P=0;
		}
		else
		{
			DispNum[0]='F';
			DispNum[1]='M';
			DispNum[2]=Radio.CurrentBand+1;
			
			i=Radio.Freq;
			j=i%10;
			if(Radio.Area==AREA_USA ||Radio.Area==AREA_LATIN)
				DispNum[7]=' ';
			else
				DispNum[7]=j;
			i=i/10;
			j=i%10;
			DispNum[6]=j;
			i=i/10;
			j=i%10;
			DispNum[5]=j;
			i=i/10;
			j=i%10;
			DispNum[4]=j;
			i=i/10;
			j=i%10;
			if(j==0)
				DispNum[3]=' ';
			else
				DispNum[3]=j;
			F_DISP_P=1;
		}
		DisplayRefresh();
	}
	else
	{
		if(FreqInLWAM(Radio.Freq))
		{
			DispNum[0]='L';
			DispNum[1]='W';
			DispNum[2]=' ';
			DispNum[3]=' ';
		}
		else
		{
			DispNum[0]='M';
			DispNum[1]='W';
			DispNum[2]=' ';
			DispNum[3]=' ';
		}
		i=Radio.Freq;
		j=i%10;
		DispNum[7]=j;
		i=i/10;
		j=i%10;
		DispNum[6]=j;
		i=i/10;
		j=i%10;
		DispNum[5]=j;
		i=i/10;
		j=i%10;
		if(j==0)
			DispNum[4] = ' ';
		else
			DispNum[4]=j+48;
			
		DisplayRefresh();
		F_DISP_P=0;
	}
	
}


/*********************************************
	Function:		RadioSeek
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:27
*********************************************/
void RadioSeek(void)
{
	switch(Radio.SeekMode)
	{
		case RADIO_SEEK_IDLE:
			
			break;
		case RADIO_SEEK_INIT:
			Radio.SeekMode=RADIO_SEEK_CHANGE_FRE;
			
		case RADIO_SEEK_CHANGE_FRE:
			RadioSetFreq(Radio.ReqFreq);
			if(FreqInFM(Radio.Freq))
			{
				//Wait10us(60);//wait for SMeter stable
				Wait10us(200);
				if(GetSMeter()>DB10)
				{
					RadioWaitTimer=4;//wait for SSTOP in FM
					Radio.SeekMode=RADIO_SEEK_WAIT;
					#ifdef DEBUG_MODE
					DebugShow("Radio.Freq=",Radio.Freq," Smeter is GOOD!");
					#endif
				}
				else
				{
					Radio.SeekMode=RADIO_SEEK_IDLE;
				}
				
			}
			else
			{
    				RadioWaitTimer=6;
    				Radio.SeekMode=RADIO_SEEK_AMFSU_WAIT;
			}
			break;
			
		case RADIO_SEEK_AMFSU_WAIT:
			if(RadioWaitTimer>0)break;
			if(GetSMeter()>30)
			{
				RadioWaitTimer=12;//wait for SSTOP in AM
				Radio.SeekMode=RADIO_SEEK_WAIT;

				#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Smeter is GOOD!");
				#endif
			}
			else
			{
				Radio.SeekMode=RADIO_SEEK_IDLE;
			}
			break;

		case RADIO_SEEK_WAIT:
			if(RadioWaitTimer>0)break;
			/*if(FreqInFM(Radio.Freq))
			{
				if (CheckIFC(50,1000))
					Radio.F_GoodStation=1;
			}
			else*/
			{
				if (CheckIFC(50,1000))
				{
					Radio.F_GoodStation=1;
					#ifdef DEBUG_MODE
					DebugShow("Radio.Freq=",Radio.Freq," IFC is good!");
					#endif
				}
			}
   			Radio.SeekMode=RADIO_SEEK_IDLE;
			break;
			
		case RADIO_SEEK_CHECK:
			
			break;
		case RADIO_SEEK_GOOD_STATION:

			break;
		case RADIO_SEEK_BAD_STATION:
			
			break;
		
	}
	
}

/*********************************************
	Function:		RadioWork
	Description:	
	Write/Modify:	Perry.Liang
	Time:		2006-1-24- 15:38:25
*********************************************/
void RadioWork(void)
{
	unsigned char i,j;
	
	switch(Radio.WorkMode)
	{
		case RADIO_WORK_IDLE:
			if(System.DispMode.Current!=DISPMODE_RADIO)
				break;
				
			if(F_HalfSecondOut)
			{
				Radio.Smeter=GetSMeter();
				/*AniBuff[23]=Radio.Smeter/100+'0';
				i=Radio.Smeter%100;
				AniBuff[24]=i/10+'0';
				AniBuff[25]=i%10+'0';

				Radio.F_TunerDispReq=1;*/
			}
			break;
		case RADIO_WORK_SEEKREQ:
			//Radio.Band[Radio.CurrentBand].CurrentMem=0;
			Radio.F_TunerDispReq=1;
			Radio.WorkMode=RADIO_WORK_SEEKWAIT;
			Radio.BackupFreq=Radio.Freq;
			SeekOn();
			RadioMute(SOFTON);
			Radio.SeekMode=RADIO_SEEK_IDLE;
			//break;//!!!!!!!!
		case RADIO_WORK_SEEKWAIT:
			if(Radio.SeekMode!=RADIO_SEEK_IDLE)break;
			if(Radio.F_GoodStation)
			{
				Radio.F_GoodStation=0;
				if((FreqInFM(Radio.Freq)&&!FreqInJapanFM(Radio.Freq)&&!FreqInWBFM(Radio.Freq))&&(RDS.F_AFEnable||RDS.F_TAEnable||RDS.F_PTYEnable||RDS.F_PISeek))
				{
					if(FreqInNormalFM(Radio.Freq))
					{
						if(Radio.Freq%10==0)
						{
							Radio.WorkMode=RADIO_WORK_SEEKWAITRDS;
							RadioWorkTimer10ms=25;
						}
						else
							Radio.WorkMode=RADIO_WORK_SEEKNEXT;
					}
					else
						Radio.WorkMode=RADIO_WORK_SEEKNEXT;
				}
				else
					Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
				break;
			}
		case RADIO_WORK_SEEKNEXT:
			Radio.ReqFreq=RadioFreqCal(Radio.SeekStep);
			Radio.SeekMode=RADIO_SEEK_INIT;
			Radio.WorkMode=RADIO_WORK_SEEKWAIT;
			if(!Radio.F_Scan)
			{
				if((Radio.BackupFreq==Radio.ReqFreq)
					||(Radio.BackupFreq==Radio.ReqFreq+5 && Radio.Direction==1)
					||(Radio.BackupFreq==Radio.ReqFreq-5 && Radio.Direction==-1))
				{
					Radio.SeekMode=RADIO_SEEK_IDLE;
					Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
					RadioSetFreq(Radio.BackupFreq);
					if(RDS.F_PTYEnable)
					{
					F_NoPTY=1;
					PTYSelectTimer=50;
					System.DispMode.Requst=DISPMODE_RDS;
					RDSDispMode=RDSDISP_PTYSELECT;
					}
				}
			}
			else
			{
				if((Radio.ScanBackupFreq==Radio.ReqFreq)
					||(Radio.ScanBackupFreq==Radio.ReqFreq+5 && Radio.Direction==1)
					||(Radio.ScanBackupFreq==Radio.ReqFreq-5 && Radio.Direction==-1))
				{
					Radio.SeekMode=RADIO_SEEK_IDLE;
					Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
					RadioSetFreq(Radio.ScanBackupFreq);
					if(RDS.F_PTYEnable)
					{
					F_NoPTY=1;
					PTYSelectTimer=50;
					System.DispMode.Requst=DISPMODE_RDS;
					RDSDispMode=RDSDISP_PTYSELECT;
					}
					Radio.F_Scan=0;
				}
			}
				

			//Radio.F_TunerDispReq=1;
			break;
		case RADIO_WORK_SEEKWAITRDS:
			if(RDS.F_RDSStation)
			{
				Radio.WorkMode=RADIO_WORK_SEEKWAITPI;
				RadioWorkTimer10ms=100;
				//Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
				#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Wait RDS OK!");
				#endif
				break;
			}
			if(RadioWorkTimer10ms==0)
			{
				Radio.WorkMode=RADIO_WORK_SEEKNEXT;
				/*#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Wait RDS not OK!");
				#endif*/
			}
			break;
		case RADIO_WORK_SEEKWAITPI:
			if(RDS.F_GetNewPI)
			{
				#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Wait PI OK!");
				#endif
				if(RDS.F_TAEnable)
				{
					Radio.WorkMode=RADIO_WORK_SEEKWAITTP;
					RadioWorkTimer10ms=9;
				}
				else if(RDS.F_PTYEnable)
				{
					Radio.WorkMode=RADIO_WORK_SEEKWAITPTY;
					PTYSelectTimer=100;
					RadioWorkTimer10ms=9;
				}
				else if(RDS.F_PISeek)
				{
					if(((RDS.PI==RDS.PIBackup&&RDS.F_REGEnable)
						||((RDS.PI&0x00FF)==(RDS.PIBackup&0x00FF)&&!RDS.F_REGEnable))
						&& RDS.PI!=0)
					{
						Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
						RDS.F_PISeek=0;
					}
					else
					{
						Radio.WorkMode=RADIO_WORK_SEEKNEXT;
					}
				}
				else
					Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
				break;
			}
			if(RadioWorkTimer10ms==0)
			{
				Radio.WorkMode=RADIO_WORK_SEEKNEXT;
				/*#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Wait PI not OK!");
				#endif*/
			}
			break;
		case RADIO_WORK_SEEKWAITTP:
			if(RDS.F_GetNewTP&&RDS.TP)
			{
				Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
				#ifdef DEBUG_MODE
				DebugShow("Radio.Freq=",Radio.Freq," Wait TP OK!");
				#endif
				break;
			}
			if(RadioWorkTimer10ms==0)
			{
				Radio.WorkMode=RADIO_WORK_SEEKNEXT;

⌨️ 快捷键说明

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