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

📄 radio.c

📁 7541数字高频头源程序
💻 C
📖 第 1 页 / 共 4 页
字号:
				else
					Radio.Direction=-1;
					
				if(RADIO_IN_SEEK)
				{
					Radio.WorkMode=RADIO_WORK_SEEKBREAK;
				}
				else if(RADIO_IN_AS||RADIO_IN_PS)
				{
					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_NC://YT---060407
			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.Area=MaxMinChangeProtect(Radio.Area,1, 4, 0, 0);
			LoadArea();
			Radio.ReqFreq=Radio.Band[Radio.CurrentBand].BandFreq;
			Radio.F_ForceSetBuff=1;
			RadioMute(SOFTON);
			RadioSetFreq(Radio.ReqFreq);
			RadioMute(SOFTOFF);
			if(System.DispMode.Current==DISPMODE_RADIO)
			{
				switch(Radio.Area)
				{
					case AREA_USA:
						AniBuff[13]='(';
						AniBuff[14]='U';
						AniBuff[15]='S';
						AniBuff[16]='A';
						AniBuff[17]=')';
						break;
					case AREA_LATIN:
						AniBuff[13]='(';
						AniBuff[14]='L';
						AniBuff[15]='A';
						AniBuff[16]='T';
						AniBuff[17]=')';
						break;
					case AREA_EUROPE:
						AniBuff[13]='(';
						AniBuff[14]='E';
						AniBuff[15]='U';
						AniBuff[16]='P';
						AniBuff[17]=')';
						break;
					case AREA_OIRT:
						AniBuff[13]='(';
						AniBuff[14]='O';
						AniBuff[15]='I';
						AniBuff[16]='R';
						AniBuff[17]=')';
						break;
					case AREA_JAPAN:
						AniBuff[13]='(';
						AniBuff[14]='J';
						AniBuff[15]='P';
						AniBuff[16]='N';
						AniBuff[17]=')';
						break;
					}	
			}
			Radio.F_TunerDispReq=1;
			break;			
	}

}

void RadioDisplay(void)
{
	unsigned int i;
	unsigned char j;

	if(System.DispMode.Next==DISPMODE_RADIO)
	{
		Radio.F_TunerDispReq=1;
		if((!RDS.F_AFEnable)&&(!RDS.F_TAEnable))
		{
			switch(Radio.Area)
			{
				/*case AREA_USA:
					PrintAnimation("   Tuner Mode(USA)   SMeter:000  ");
					break;
				case AREA_LATIN:
					PrintAnimation("   Tuner Mode(LAT)   SMeter:000  ");
					break;
				case AREA_EUROPE:
					PrintAnimation("   Tuner Mode(EUP)   SMeter:000  ");
					break;
				case AREA_OIRT:
					PrintAnimation("   Tuner Mode(OIR)   SMeter:000  ");
					break;
				case AREA_JAPAN:
					PrintAnimation("   Tuner Mode(JPN)   SMeter:000  ");
					break;*/
					
				case AREA_USA:
					PrintAnimation("   Tuner Mode(USA)   SMeter:0.00V  ");
					break;
				case AREA_LATIN:
					PrintAnimation("   Tuner Mode(LAT)   SMeter:0.00V  ");
					break;
				case AREA_EUROPE:
					PrintAnimation("   Tuner Mode(EUP)   SMeter:0.00V  ");
					break;
				case AREA_OIRT:
					PrintAnimation("   Tuner Mode(OIR)   SMeter:0.00V  ");
					break;
				case AREA_JAPAN:
					PrintAnimation("   Tuner Mode(JPN)   SMeter:0.00V  ");
					break;

			}
		}
		else
		{
			switch(Radio.Area)
			{
				/*case AREA_USA:
					PrintAnimation("   Tuner Mode(USA)   SMeter:000  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_LATIN:
					PrintAnimation("   Tuner Mode(LAT)   SMeter:000  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_EUROPE:
					PrintAnimation("   Tuner Mode(EUP)   SMeter:000  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_OIRT:
					PrintAnimation("   Tuner Mode(OIR)   SMeter:000  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_JAPAN:
					PrintAnimation("   Tuner Mode(JPN)   SMeter:000  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;*/
				case AREA_USA:
					PrintAnimation("   Tuner Mode(USA)   SMeter:0.00V  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_LATIN:
					PrintAnimation("   Tuner Mode(LAT)   SMeter:0.00V  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_EUROPE:
					PrintAnimation("   Tuner Mode(EUP)   SMeter:0.00V  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_OIRT:
					PrintAnimation("   Tuner Mode(OIR)   SMeter:0.00V  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;
				case AREA_JAPAN:
					PrintAnimation("   Tuner Mode(JPN)   SMeter:0.00V  PS:********  PTY:********  AF:***  TA:***  TP:***");
					break;			
				}
		}
		Animation(ANIMATION_START, AniBuff,20);
	}
	if(System.DispMode.Last==DISPMODE_RADIO)
	{
		//Display(DISP_CLEAR);
		Animation(ANIMATION_STOP);
	}
	
	if(SeekKeyTimer<10&&SeekKeyTimer>0)
	{
		PrintLine2(" Auto Seek Key");
		return;
	}
	
	// display others
	if(System.DispMode.Current!=DISPMODE_RADIO)return;
	if(Radio.F_Tuner_Empty==1&&RadioTunerEepromTimer>0)
	{
		PrintLine2("Tuner EEP Empty!");
		return;
	}
		
	if(!Radio.F_TunerDispReq)return;
	Radio.F_TunerDispReq=0;

	//PrintLine1("   Tuner Mode");

	if(RADIO_IN_SEARCH)
	{
		if(RADIO_IN_AS)
		{
			PrintLine2("   Auto Store");
		}
		else
		{
			if(RDS.F_PISeek)
				PrintLine2("     PI Seek");
			else if(RDS.F_TAEnable)
				PrintLine2("     TA Seek");
			else
				PrintLine2("   Auto Seek");
		}
			
		return;
	}
	
	PrintLine2("FM0 M0       MHz");
	
	if(Radio.Band[Radio.CurrentBand].CurrentMem==0)
	{
		DispBuff[20]=' ';
		DispBuff[21]=' ';
	}
	else
	{
		DispBuff[20]='M';
		DispBuff[21]=Radio.Band[Radio.CurrentBand].CurrentMem+'0';
	}
	
	if(FreqInFM(Radio.Freq))
	{
		DispBuff[16]='F';
		DispBuff[17]='M';
		DispBuff[18]=Radio.CurrentBand+'1';

		DispBuff[29]='M';
		i=Radio.Freq;
		j=i%10;
		if(Radio.Area==AREA_USA ||Radio.Area==AREA_LATIN)
			DispBuff[28]=' ';
		else
			DispBuff[28]=j+'0';
		i=i/10;
		j=i%10;
		DispBuff[27]=j+'0';
		DispBuff[26]='.';
		i=i/10;
		j=i%10;
		DispBuff[25]=j+'0';
		i=i/10;
		j=i%10;
		DispBuff[24]=j+'0';
		i=i/10;
		j=i%10;
		if(j==0)
			DispBuff[23]=' ';
		else
			DispBuff[23]=j+'0';
	}
	else
	{
		DispBuff[16]='A';
		DispBuff[17]='M';
		DispBuff[18]=Radio.CurrentBand-3+'1';

		DispBuff[29]='K';
		i=Radio.Freq;
		j=i%10;
		DispBuff[28]=j+'0';
		i=i/10;
		j=i%10;
		DispBuff[27]=j+'0';
		i=i/10;
		j=i%10;
		DispBuff[26]=j+'0';
		i=i/10;
		j=i%10;
		if(j==0)
			DispBuff[25] = ' ';
		else
			DispBuff[25]=j+'0';
	}
	
}

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);
			Wait10us(60);
			// enable IFC
			/*...*/
			
			if(FreqInFM(Radio.Freq))
			{
				Wait10us(200);//wait for SMeter stable
				if(GetSMeter()>50)//(CheckSD(5,1000))
				{
					RadioWaitTimer=5;
					Radio.SeekMode=RADIO_SEEK_WAIT;
				}
				else
				{
					Radio.SeekMode=RADIO_SEEK_IDLE;
				}
				/*RadioWaitTimer=5;
				Radio.SeekMode=RADIO_SEEK_WAIT;*/
				
			}
			else
			{
				RadioWaitTimer=14;
				Radio.SeekMode=RADIO_SEEK_WAIT;
			}
			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)/*&&GetSMeter()>Radio.SeekTh*/)
					Radio.F_GoodStation=1;
			}
			// disable IFC
			/*...*/
			Radio.SeekMode=RADIO_SEEK_IDLE;
			break;
		case RADIO_SEEK_CHECK:
			
			break;
		case RADIO_SEEK_GOOD_STATION:

			break;
		case RADIO_SEEK_BAD_STATION:
			
			break;
		
	}
	
}

void RadioWork(void)
{
	unsigned char i,j;
	float k;
	
	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';
				
				//AniBuff[28]=Radio.Smeter/100+'0';
				//i=Radio.Smeter%100;
				//AniBuff[29]=i/10+'0';
				//AniBuff[30]=i%10+'0';
				
				k=(5.0/255.0)*(2.0*(float)Radio.Smeter);
				i=(int)(k*100)/100;
				//AniBuff[28]=int(k)+'0';
				AniBuff[28]=i+'0';
				AniBuff[29]='.';
				i=(int)(k*100)%100;
				AniBuff[30]=i/10+'0';
				AniBuff[31]=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_SEEKOK;
				break;
			}
		case RADIO_WORK_SEEKNEXT:
			Radio.ReqFreq=RadioFreqCal(Radio.SeekStep);
			Radio.SeekMode=RADIO_SEEK_INIT;
			Radio.WorkMode=RADIO_WORK_SEEKWAIT;
			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_SEEKOK;
				RadioSetFreq(Radio.BackupFreq);

				if(RDS.F_PTYEnable)
				{
					F_NoPTY=1;
					PTYSelectTimer=50;
					System.DispMode.Requst=DISPMODE_RDS;
					RDSDispMode=RDSDISP_PTYSELECT;
				}
			}

			//Radio.F_TunerDispReq=1;
			break;
		case RADIO_WORK_SEEKWAITRDS:
			if(RDS.F_RDSStation)
			{
				Radio.WorkMode=RADIO_WORK_SEEKWAITPI;
				RadioWorkTimer10ms=100;
				//Radio.WorkMode=RADIO_WORK_SEEKOK;
				break;
			}
			if(RadioWorkTimer10ms==0)
				Radio.WorkMode=RADIO_WORK_SEEKNEXT;
			break;
		case RADIO_WORK_SEEKWAITPI:
			if(RDS.F_GetNewPI)
			{
				if(RDS.F_TAEnable)
				{
					Radio.WorkMode=RADIO_WORK_SEEKWAITTP;
					RadioWorkTimer10ms=9;
				}
				else if(RDS.F_PTYEnable)
				{

⌨️ 快捷键说明

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