📄 radio.c
字号:
/***************************************************************************
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 + -