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

📄 radio.c

📁 这是一个TDA7540的模版程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/***************************************************************************
Project  :   TDA7540 Jig board 
Compiler : ST7 HiCross C (HiWARE)
Module   :  Radio.c
Version  :  V 1.0
Created  :  
Author   :  Jerry HE / ST-ShenZhen
Description
         -  radio main routine
Modified
	  - Jan.24th,2005    
***************************************************************************/

#include "system.h"
//unsigned char RadioTimerBase = 0;
unsigned int l_TempVal;
unsigned char l_TempVal1;
unsigned char l_TempVal2;
unsigned char l_cRadio_SDVal;
unsigned char l_cRadio_SDCnt;
unsigned char l_cSM_Val;
void DispFMFreq(void);
void DispAMFreq(void);
void DispLWFreq(void);
void Radio_PresetLoad(unsigned char);
void RadioBandChange(unsigned char);
void RadioFreqBackUp();

/*--------------------------------------------------------------------------
Routine : Radio_Main
Input   : 
Output  :
Description 
        - Radio main routine
--------------------------------------------------------------------------*/ 
void Radio_Main()
{
       Radio_SKeyProc();
	Disp_RadioMsg();
	Radio_ModeMonitor();
	Radio_StatusMonitor();
	if(F_RadioOK==1) F_RadioOK=0;
	if(SystemWorkMode.Last==SysMode_RADIO)
	{
		Stop_Radio();
	}
	if(SystemWorkMode.Current==SysMode_RADIO) return;
	if(SystemWorkMode.Next == SysMode_RADIO)
	{
		PllRegisterAllRefresh();
		Start_Radio();
	}
	
}

/*--------------------------------------------------------------------------
Routine : Radio_PowerOn
Input   : 
Output  :
Description 
        - Start the radio routine
--------------------------------------------------------------------------*/ 
void Radio_PowerOn()
{
	multi_point.refresh = 1;
	RadioStatus = RADIO_WAITPWRON;
}

/*--------------------------------------------------------------------------
Routine : Radio_Init
Input   : 
Output  :
Description 
        - initial the radio setting
--------------------------------------------------------------------------*/ 

void Radio_Init()
{
	unsigned char l_cBand,l_cPrsNo;   
	radio_band = FM1;

	for (l_cBand = FM1; l_cBand <= LW; l_cBand++)
	{
		radio_pll_lastmem[l_cBand] = 0;
	}

	for (l_cPrsNo = 0; l_cPrsNo < MAX_PRESET_NUM; l_cPrsNo ++)
	{
		radio_pll_memfreq[FM1][l_cPrsNo]=FM_INIT_FREQ[l_cPrsNo];
		radio_pll_memfreq[MW1][l_cPrsNo] = AM_INIT_FREQ[l_cPrsNo];
		radio_pll_memfreq[LW][l_cPrsNo] = LW_INIT_FREQ[l_cPrsNo];
	}
	radio_pll_freq = FM87_5MHZ;
	radio_pll_offset = 0;

       for(l_cBand=FM1;l_cBand<=LW;l_cBand++)
       {
       	radio_pll_lastfreq[l_cBand]=radio_pll_memfreq[l_cBand][0];
		radio_pll_lastoffset[l_cBand]= radio_pll_memoffset[l_cBand][0];
       }

	RadioMode = RM_IDLE;
	
}

/*--------------------------------------------------------------------------
Routine : Radio_SKeyProc
Input   : 
Output  :
Description 
        - radio key functions
--------------------------------------------------------------------------*/ 

void Radio_SKeyProc()
{
	unsigned char i;
	if(SystemWorkMode.Current!=SysMode_RADIO)
	return;
	switch(KeyCode)
	{
		case Key_S1:
			Radio_PresetLoad(1);
			break;
		case Key_S2:
			Radio_PresetLoad(2);
			break;
		case Key_S3:
			Radio_PresetLoad(3);
			break;
		case Key_S4:
			Radio_PresetLoad(4);
			break;
		case Key_S5:
			Radio_PresetLoad(5);
			break;
		case Key_S6:
			Radio_PresetLoad(6);
			break;
		case Key_FMBAND:
			RadioFreqBackUp();
			RadioBandChange(FM1);
			break;
		case Key_MWBAND:
			RadioFreqBackUp();
			RadioBandChange(MW1);
			break;
		case Key_LWBAND:
			RadioFreqBackUp();
			RadioBandChange(LW);
			break;
		case Key_SSEEKUP:
		case Key_SSEEKDN:			
			 F_SearchUpDN=1;
			 if(KeyCode==Key_SSEEKDN) F_SearchUpDN=0;
			 if(ManualSeekTime==0) F_SearchInManual=0;
			 //if(F_TunerInSearch==1)  F_SearchInManual =1;
			 if(F_SearchInManual==1)
			 {
			 	Radio_MTune();
				ManualSeekTime = 50;
			 }
			 else
			 {
			 	Radio_ATune();
			 }
			 
			break;
		case Key_LSEEKUP:
		case Key_LSEEKDN:
			if(KeyCode==Key_SSEEKDN) F_SearchUpDN=0;
			Radio_MTune();
			ManualSeekTime = 50;
			break;

	}
}

/*--------------------------------------------------------------------------
Routine : Disp_RadioMsg
Input   : 
Output  :
Description 
        - display radio message
--------------------------------------------------------------------------*/ 

void Disp_RadioMsg()
{
	if(DisplayMode.Next == DispMode_NORMAL)
	F_TunerDispReq=1;
	if(DisplayMode.Current != DispMode_NORMAL) return;
	if(!F_TunerDispReq)return;
	 F_TunerDispReq=0;
	 DisplayClear(FIRSTLINE);
	 DisplayClear(SECONDLINE);
	 switch(radio_band)
	 {
	 	case FM1:
			DispFMFreq();
			break;
		case MW1:
			DispAMFreq();
			break;
		case LW:
			DispLWFreq();
			break;
	 }
}

/*--------------------------------------------------------------------------
Routine : DispFMFreq
Input   : 
Output  :
Description 
        - display FM frequency
--------------------------------------------------------------------------*/ 

void DispFMFreq()
{
	DispBuff[16]='F';
	DispBuff[17]='M';
	l_TempVal=875+radio_pll_freq;
	l_TempVal1=(unsigned char)(l_TempVal/10);
	l_TempVal2=l_TempVal1/100;
	if(l_TempVal2!=0) DispBuff[19]=l_TempVal2 + 48;
	else DispBuff[19] = ' ';
	l_TempVal1 %= 100;
	DispBuff[20] =( l_TempVal1/10) + 48;
	DispBuff[21] =(l_TempVal1%10) + 48;
	DispBuff[22] ='.';
	DispBuff[23]=(unsigned char)(l_TempVal%10) + 48;
	DispBuff[24]='M';
	DispBuff[25]='H';
	DispBuff[26]='z';
	LCDDisplay(BYBYTES_REFRESH, SECONDLINE, 0, 11);
}

/*--------------------------------------------------------------------------
Routine : DispAMFreq
Input   : 
Output  :
Description 
        - display the am frequency
--------------------------------------------------------------------------*/ 

void DispAMFreq()
{
	l_TempVal = (unsigned int)radio_pll_freq - 0x11;
	l_TempVal *= 9;
	l_TempVal += (unsigned int)(531 + radio_pll_offset);
	DispBuff[16]='A';
	DispBuff[17]='M';

	l_TempVal1 = (unsigned char)(l_TempVal / 100);
	l_TempVal2 = (unsigned char)(l_TempVal % 100);
	if ((l_TempVal1 / 10) != 0) DispBuff[20] = (l_TempVal1 / 10) + 48;
	else DispBuff[20] = ' ';
	DispBuff[21] = (l_TempVal1 % 10) + 48;
	DispBuff[22] = (l_TempVal2 / 10) + 48;
	DispBuff[23] = (l_TempVal2 % 10) + 48;
	DispBuff[24]='K';
	DispBuff[25]='H';
	DispBuff[26]='Z';
	LCDDisplay(BYBYTES_REFRESH, SECONDLINE, 0, 11);
}

/*--------------------------------------------------------------------------
Routine : DispLWFreq
Input   : 
Output  :
Description 
        - display the LW frequency
--------------------------------------------------------------------------*/ 

void DispLWFreq()
{
	l_TempVal = (unsigned int)(radio_pll_freq * 9);
	l_TempVal += (unsigned int)(144 + radio_pll_offset);
       DispBuff[16]='L';
       DispBuff[17]='W';

	l_TempVal1 = (unsigned char)(l_TempVal / 100);
	l_TempVal2 = (unsigned char)(l_TempVal % 100);
	if ((l_TempVal1 / 10) != 0)
		DispBuff[20] = (l_TempVal1 / 10) + 48;
	else
		DispBuff[20] = ' ';
	DispBuff[21] = (l_TempVal1 % 10) + 48;
	DispBuff[22] = (l_TempVal2 / 10) + 48;
	DispBuff[23] = (l_TempVal2 % 10) + 48;
	DispBuff[24]='K';
	DispBuff[25]='H';
	DispBuff[26]='Z';
	LCDDisplay(BYBYTES_REFRESH, SECONDLINE, 0, 11);
}

/*--------------------------------------------------------------------------
Routine : Radio_ModeMonitor
Input   : 
Output  :
Description 
        - switch the mode of radio
--------------------------------------------------------------------------*/ 
void Radio_ModeMonitor()
{
	switch(RadioMode)
	{
		case RM_IDLE:
			break;
		case RM_SCANING:
				if (RadioStatus == RADIO_IFCHECKEND)
				{
					F_RadioOK =1;		
					if (F_TunerSearchOK ==1)
					{
						//Radio_Start();	
						// pty or AF Pi search
						F_TunerSearchOK=0;
						RadioMode = RM_SCANINGEND;
						break;
					}
					Radio_NextFreq_Scan();	
					if (radio_pll_freq == radio_pll_prefreq)
					{
 					RadioMode = RM_SCANINGEND;
					}	
					break;
				}
			break;
		case RM_SCANINGEND:
			 F_TunerInSearch =0;
			 F_SearchInManual=0;
			 RadioMode = RM_IDLE;
			break;
	}

}

/*--------------------------------------------------------------------------
Routine : Radio_StatusMonitor
Input   : 
Output  :
Description 
        - monitor the status of radio
--------------------------------------------------------------------------*/ 
void Radio_StatusMonitor()
{
  if (RadioDelay!=0)  return;
   switch(RadioStatus)
   {
   	case RADIO_IDLE:
		 break;
	case RADIO_WAITPWRON:
		 TunerRegisterRefresh();
		 RadioStatus = RADIO_TUNERBOOT;
		 break;
	case RADIO_TUNERBOOT:
		 PllRegisterAllRefresh();
		 F_TunerDispReq = 1;
		 RadioStatus = RADIO_IDLE;
		 break;
	case RADIO_SEEK:

⌨️ 快捷键说明

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