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

📄 rds.c

📁 7541数字高频头源程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "public.h"

static const unsigned char PTYDisplayTable[33][8]=
{
	"  None  ",
	"  News  ",
	"Affairs ",
	"  Info  ",
	" Sport  ",
	"Educate ",
	" Drama  ",
	"Culture ",
	"Science ",
	" Varied ",
	" Pop M  ",
	" Rock M ",
	" Easy M ",
	"Light M ",
	"Classics",
	"Other M ",
	"Weather ",
	"Finance ",
	"Children",
	" Social ",
	"Religion",
	"Phone In",
	" Travel ",
	"Leisure ",
	"  Jazz  ",
	"Country ",
	"Nation M",
	" Oldies ",
	" Folk M ",
	"Document",
	"  Test  ",
	" Alarm  ",
	"PTY Seek"
};

void RDSInit(void)
{

	PD_RDSDATA=0;//PA1--floating input
	PO_RDSDATA=0;
	Enable_RDS_Int();
	
	RDSDataInit();
	
	//RDS.F_AFEnable=1;
	//RDS.F_REGEnable=1;
	//RDS.F_EONEnable=1;

	RDS.F_AFEnable=0;
	RDS.F_REGEnable=0;
	RDS.F_EONEnable=0;
	
	AFCheckDisable1sTimer=90;
	AFCheckBetweenList100msTimer=30;
	AFCheckBetweenFreq10msTimer=120;
}

void RDSMain(void)
{
	RDSDataMain();
	RDSDisplay();
	RDSKey();

	if(RDS.F_GetNewCT)
	{
		RDS.F_GetNewCT=0;
		ClockChange(RDS.TimeHour,RDS.TimeMin);
	}

	if(RDS.F_TAEnable&&!F_InEONTASwitch)
	{
		// TA switch
		if(RDS.F_GetNewTA)
		{
			RDS.F_GetNewTA=0;
			if(RDS.TA)
			{
				SwitchToTa();
			}
			else
			{
				TaSwitchBack();
			}
		}

		if(NotRDSStation&&F_InTASwitch&&InTADelayTimer==0)		
		{
			TaSwitchBack();
		}
		
		// Auto TA seek
		if(RDS.TP||RDS.TA)
		{
			AutoTASeekTimer=0;
		}
		else
		{
			if(AutoTASeekTimer==1&&Radio.WorkMode==RADIO_WORK_IDLE&&FreqInFM(Radio.Freq)&&!FreqInJapanFM(Radio.Freq)&&!FreqInWBFM(Radio.Freq))
			{
				Radio.Direction=1;
				Radio.WorkMode=RADIO_WORK_SEEKREQ;
			}
			if(AutoTASeekTimer==0||AutoTASeekTimer==1)
				AutoTASeekTimer=600;

		}

	}

	#ifdef EON_ENABLE
	// EON
	if(RDS.F_TAEnable&&RDS.F_EONEnable&&!F_InTASwitch)
	{
		// EONTA switch
		if(RDS.F_GetNewEONTA&&RDS.EONTA&&RDS.F_GetEONAFList&&!F_InEONTASwitch&&InTADelayTimer==0)
		{
			SwitchToEONTa();
		}
		if(F_InEONTASwitch&&InTADelayTimer==0&&((!RDS.TA)||NotRDSStation))
		{
			EONTaSwitchBack();
		}

	}
	#endif
	
	// PI SEEK
	if(RDS.PISeekTimer==1&&Radio.WorkMode==RADIO_WORK_IDLE&&FreqInFM(Radio.Freq)&&!FreqInJapanFM(Radio.Freq)&&!FreqInWBFM(Radio.Freq))
	{
		RDS.PISeekTimer=0;
		if(RDS.F_AFEnable)
		{
			Radio.Direction=1;
			Radio.WorkMode=RADIO_WORK_SEEKREQ;
			RDS.F_PISeek=1;
		}
	}
	
	if(PTYSelectTimer==1)
	{
		PTYSelectTimer=0;
		F_PTYSelect=0;
		RDS.F_PTYEnable=0;
		
		F_NoPTY=0;
		//Radio.F_TunerDispReq=1;
		System.DispMode.Requst=DISPMODE_RADIO;
		RDSDispMode=RDSDISP_IDLE;
	}
}

void RDSKey(void)
{

	switch (KeyCode)
	{
		case P_AD_VOLUP:
			if(F_PTYSelect)
			{
				PTYSelectType=MaxMinChangeProtect(PTYSelectType, 1, 31, 1, 0);
				PTYSelectTimer=100;
			}
			break;
			
		case P_AD_VOLDN:
			if(F_PTYSelect)
			{
				PTYSelectType=MaxMinChangeProtect(PTYSelectType, -1, 31, 1, 0);
				PTYSelectTimer=100;
			}
			break;
			
		case S_AD_AF:
			if (FreqInAM(Radio.Freq)||FreqInJapanFM(Radio.Freq)||FreqInWBFM(Radio.Freq))
				break;
			if (RADIO_IN_SEARCH)
				break;

			RDS.F_AFEnable=~RDS.F_AFEnable;
			if(System.FWorkMode.Current!=WORKMODE_RADIO)break;

			if (!RDS.F_TAEnable)
			{
				if(RDS.F_AFEnable)
					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;
						
					}
					
				else if (!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;
							
					}
			}

			break;

		case S_AD_TA:
		//case S_RM_2ZONE:
			if (FreqInAM(Radio.Freq)||FreqInJapanFM(Radio.Freq)||FreqInWBFM(Radio.Freq))
				break;
			if (RADIO_IN_SEARCH)
				break;

			RDS.F_TAEnable=~RDS.F_TAEnable;
			if(System.FWorkMode.Current!=WORKMODE_RADIO)break;

			if (!RDS.F_AFEnable)
			{
				if(RDS.F_TAEnable)
					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;			
						
					}
				else if (!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;
						}
			}
			
			if (RDS.F_TAEnable)
			{
				if(!RDS.TP)
				{
					Radio.Direction=1;
					Radio.WorkMode=RADIO_WORK_SEEKREQ;
				}
				
				if(RDS.TA)
				{
					SwitchToTa();
				}
			}
			else
			{
				if(F_InTASwitch)TaSwitchBack();
				#ifdef EON_ENABLE
					if(F_InEONTASwitch)EONTaSwitchBack();
				#endif
			}

			break;

		case S_AD_PTY:
			if (System.FWorkMode.Current!= WORKMODE_RADIO)
				break;
			//if (FreqInAM(Radio.Freq)||F_InTASwitch)
			if (FreqInAM(Radio.Freq)||FreqInJapanFM(Radio.Freq)||FreqInWBFM(Radio.Freq)||F_InTASwitch||F_InEONTASwitch)
				break;

			if(F_PTYSelect)
			{
				PTYSelectTimer=1;
				break;
			}
			
			if(PTYSelectType==0)PTYSelectType=1;
			
			F_PTYSelect=1;
			RDS.F_PTYEnable=1;
			PTYSelectTimer=100;
			F_NoPTY=0;
			//Radio.F_TunerDispReq=1;
			System.DispMode.Requst=DISPMODE_RDS;
			RDSDispMode=RDSDISP_PTYSELECT;
		   	 break;	
		}

}

void RDSDisplay(void)
{
	unsigned char i;
	if(System.DispMode.Current==DISPMODE_RADIO)
	{
		if(RDS.F_PSExist)
		{
			for(i=0;i<8;i++)
				//AniBuff[31+i]=RDS.PS[i];
				//AniBuff[36+i]=RDS.PS[i];
				AniBuff[38+i]=RDS.PS[i];
		}

		if(RDS.PTY!=0)
		{
			for(i=0;i<8;i++)
				//AniBuff[45+i]=PTYDisplayTable[RDS.PTY][i];
				//AniBuff[50+i]=PTYDisplayTable[RDS.PTY][i];
				AniBuff[52+i]=PTYDisplayTable[RDS.PTY][i];
		}
		
		if(RDS.F_AFEnable)
		{
			if(RDSStation&&(!RDSAFChecking))
			{
				//AniBuff[58]=' ';
				//AniBuff[59]='O';
				//AniBuff[60]='K';
				
				//AniBuff[63]=' ';
				//AniBuff[64]='O';
				//AniBuff[65]='K';
				AniBuff[65]=' ';
				AniBuff[66]='O';
				AniBuff[67]='K';				
			}
			else
			{
				//AniBuff[58]=' ';
				//AniBuff[59]='O';
				//AniBuff[60]='N';
				
				//AniBuff[63]=' ';
				//AniBuff[64]='O';
				//AniBuff[65]='N';
				
				AniBuff[65]=' ';
				AniBuff[66]='O';
				AniBuff[67]='N';
				
			}
		}
		else
		{
			//AniBuff[58]='O';
			//AniBuff[59]='F';
			//AniBuff[60]='F';
			
			//AniBuff[63]='O';

⌨️ 快捷键说明

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