📄 radio.c
字号:
#define __DECL_RADIO__
#include "system.h"
//定义默认频道
extern IN1 in1;
extern BYTE cur_pty;
extern BYTE psReadyFlag;
UINT16 lastSmeter=0;
extern BYTE irIndex;
void radio_stop_scan(void)
{
bRadioInPreview = 0;
bRadioInAMS = 0;
bRadioSeeking = 0;
}
void radio_init(void)
{
BYTE i=100;
radio_stop_scan();//radioParam &= ~(RA_SEEKING|RA_PREVIEW|RA_IN_AMS);
disp_clr_cd_flag();
radio_set_band(radioBand);
cur_freq = lastFreq;//恢复最后频率
disp_radio(dispBuff,sub_band,cur_freq);
display();
delay_ms(50);
if(radioParam&RA_AM_WORK)//恢复到上次进入收音的波段
{
//radioParam |= RA_BAND; //AM
radioBand = AM;
rdsTAGet = 0;
rdsTPGet = 0;
rdsAFSeek = 0;//rdsParam &= ~AF_SEEK;
#ifdef _SUPPORT_RDS
disp_set_bit(dispBuff,LCD_BIT_AF,OFF); //turn off AF
disp_set_bit(dispBuff,LCD_BIT_TA,OFF); //turn off TA
disp_set_bit(dispBuff,LCD_BIT_TP,OFF); //turn off TP
#endif
}else{
//radioParam &= ~RA_BAND; //FM
radioBand = FM;
}
pll_set_station(radioBand,cur_freq);
radio_save_last_station(sub_band,cur_freq);
radio_is_preset(radioBand,cur_freq);
#ifdef _SUPPORT_RDS
rds_clear_var();
#endif
//rds_clear_af(); //清除AF表
if(currentPower==_POWER_RADIO)
{
disp_st(radioParam&RA_ST);
}
while(i--) //此处为实时出盘准备
{
dvd_thread();
disp_thread();
delay_ms(8);
}
}
void radio_go_next(BYTE dir)
{
cur_channel=0xFF;
if(dir==UP)
{
if(radioBand==FM)
{
if(cur_freq<=ORIT_JUMP_FREQ1)
cur_freq += ORIT_LOW_STEP; //65.0-74.0M
else
cur_freq += freqParam[regionIndex][FM_FREQ_FINE];
if(cur_freq>freqParam[regionIndex][FM_FREQ_END])//up to top
{
cur_freq = freqParam[regionIndex][FM_FREQ_START];
audio_set_mute(ON);
muteStart=ON;
}
if(cur_freq==ORIT_JUMP_FREQ1+ORIT_LOW_STEP)
{
cur_freq = ORIT_JUMP_FREQ2;
}
}else{ //AM++
cur_freq+=freqParam[regionIndex][AM_FREQ_STEP];
if(cur_freq>freqParam[regionIndex][AM_FREQ_END])
{
cur_freq = freqParam[regionIndex][AM_FREQ_START];
audio_set_mute(ON);
muteStart=ON;
}
}
}else{ //DOWN
if(radioBand==FM)
{
if(cur_freq<=ORIT_JUMP_FREQ1)//ORIT
{
cur_freq -= ORIT_LOW_STEP;
}else{
cur_freq -= freqParam[regionIndex][FM_FREQ_FINE];
}
if(regionIndex!=REGION_ORIT)
{
if(cur_freq<freqParam[regionIndex][FM_FREQ_START])
{
cur_freq = freqParam[regionIndex][FM_FREQ_END];
audio_set_mute(ON);
muteStart=ON;
}
}else{//ORIT
if(cur_freq==(ORIT_JUMP_FREQ2-freqParam[regionIndex][FM_FREQ_FINE]))//87.5-0.5
{
cur_freq = ORIT_JUMP_FREQ1;
}
}
}else{ //AM--
cur_freq-=freqParam[regionIndex][AM_FREQ_STEP];
if(cur_freq<freqParam[regionIndex][AM_FREQ_START])
{
cur_freq = freqParam[regionIndex][AM_FREQ_END];
audio_set_mute(ON);
muteStart=ON;
}
}
}
#ifdef _SUPPORT_RDS
rds_clear_var();//切台,清除当前RDS信息
#endif
disp_radio(dispBuff,sub_band,cur_freq);
pll_set_station(radioBand,cur_freq);
radio_save_last_station(sub_band,cur_freq);
radio_is_preset(radioBand,cur_freq);
#ifdef _SUPPORT_RDS
psReadyFlag=0;
#endif
rdsTPGet = 0;
}
void radio_is_preset(BYTE band,UINT16 freq)
{
BYTE i;
cur_channel=0xFF;
disp_char(dispBuff,DISP_CHANNEL,' ');//clear save channel flag
#ifdef LCD_BIT_CH
#ifndef LCD_316
disp_set_bit(dispBuff,LCD_BIT_CH,OFF);
#endif
#endif
if(band==FM)
{
for(i=(sub_band-RADIO_TYPE_FM1)*6;i<(sub_band-RADIO_TYPE_FM1+1)*6;i++)
{
#ifdef PRESET_SAVE_IN_RAM
if(freq==fmPresetFreq[regionIndex][i])
#else
eeprom_busy_wait();
if(freq==eeprom_read_word(fmPresetFreq[0]+FM_COUNT*regionIndex+i))
#endif
{
lastPreset = i%6+1;
curPreviewChannel = lastPreset;
disp_char(dispBuff,DISP_CHANNEL,ASCII_NUM+lastPreset);
#ifdef LCD_BIT_CH
disp_set_bit(dispBuff,LCD_BIT_CH,ON);
#endif
break;
}
}
}else{
for(i=(sub_band-RADIO_TYPE_AM1)*6;i<(sub_band-RADIO_TYPE_AM1+1)*6;i++)
{
#ifdef PRESET_SAVE_IN_RAM
if(freq==amPresetFreq[regionIndex][i])
#else
eeprom_busy_wait();
if(freq==eeprom_read_word(amPresetFreq[0]+AM_COUNT*regionIndex+i))
#endif
{
lastPreset = i%6+1;
curPreviewChannel = lastPreset;
disp_char(dispBuff,DISP_CHANNEL,ASCII_NUM+lastPreset);
#ifdef LCD_BIT_CH
disp_set_bit(dispBuff,LCD_BIT_CH,ON);
#endif
break;
}
}
}
cur_channel=i;
}
//跳到指定台
void radio_set_channel(char band,BYTE channel)
{
UINT16 freq;
if((cur_channel==channel) && !bRadioInAMS)
return;
cur_channel = channel;
muteStart=ON;
muteTimeout=MUTE_TIMEOUT2;
audio_set_mute(ON);
if(band==FM)
{
#ifdef PRESET_SAVE_IN_RAM
freq = fmPresetFreq[regionIndex][channel];
#else
// eeprom_busy_wait();
freq = eeprom_read_word(fmPresetFreq[0]+FM_COUNT*regionIndex+channel);
#endif
pll_set_station(FM,freq);
sub_band = channel/6+1;
}else{//AM
#ifdef PRESET_SAVE_IN_RAM
freq = amPresetFreq[regionIndex][channel];
#else
// eeprom_busy_wait();
freq = eeprom_read_word(amPresetFreq[0]+AM_COUNT*regionIndex+channel);
#endif
pll_set_station(AM,freq);
sub_band = channel/6+4;
}
disp_radio(dispBuff,sub_band,freq);
disp_char(dispBuff,DISP_CHANNEL,ASCII_NUM+(channel%6)+1);
cur_freq = freq;
radio_save_last_station(sub_band,cur_freq);
lastFreq = cur_freq;
}
void radio_go_preset(BYTE band,BYTE preset)
{
lastPreset = preset;
if(rdsTAGet && rdsTAEnable)//TRAFFIC模式下禁用
return;
#ifdef _SPHE_8100_ //VCD遥控器INT独立,和面板不一致
if((keyParam&KEY_FROM_IR) && (irIndex>KEY_NAME_PLAY))
return;
#endif
//psReadyFlag=0;
if(rdsTASeek)
return; //not work in TA seek
rdsAFActive = 0;//rdsParam &= ~AF_ACTIVE;
#ifdef _SUPPORT_RDS
rds_clear();
#endif
if(band<RADIO_TYPE_AM1)
{
radio_set_channel(FM,(band-1)*6+preset-1);
}else{
radio_set_channel(AM,(band-4)*6+preset-1);
}
disp_char(dispBuff,DISP_CHANNEL,ASCII_NUM+preset);
#ifdef LCD_BIT_CH
disp_set_bit(dispBuff,LCD_BIT_CH,ON);
#endif
}
void radio_detect_sd(void)
{
#ifdef LCD_888
BYTE i;
disp_set_bit(dispBuff,LCD_BIT_ANT,ON);
for(i=0;i<4;i++)
{
if(adcValue[AD_SMETER]<pgm_read_word(antMeterLevel+i))
{
disp_set_bit(dispBuff,pgm_read_byte(antMeterMap+i),OFF);
}else{
disp_set_bit(dispBuff,pgm_read_byte(antMeterMap+i),ON);
}
}
#endif
if ((currentMode==_MODE_RADIO)&&(radioBand==FM))
{
#ifdef LCD_BIT_STEREO
if(isStereo() && (radioParam&RA_ST))
{
disp_set_bit(dispBuff,LCD_BIT_STEREO,ON);
}else{
disp_set_bit(dispBuff,LCD_BIT_STEREO,OFF);
}
#endif
}else{
#ifdef LCD_BIT_STEREO
disp_set_bit(dispBuff,LCD_BIT_STEREO,OFF);
#endif
#ifdef LCD_BIT_ST
disp_set_bit(dispBuff,LCD_BIT_ST,OFF);
#endif
}
}
void radio_ams(BYTE band,BYTE rds,BYTE disp)
{
//UINT16 freq;//自动搜索的开始频率
BYTE channel=0;
BYTE status=0;
bRadioInAMS = 1;//radioParam |= RA_IN_AMS;
//#ifndef LA1844
UINT16 rdsWaitLoops;
//#endif
disp_char(dispBuff,DISP_CHANNEL,' ');
if(band==FM)
{
#ifdef _SUPPORT_RDS
disp_set_bit(dispBuff,LCD_BIT_TP,OFF);
//disp_set_bit(dispBuff,LCD_BIT_PTY,OFF);
#endif
//从最小频率前一格开始搜索
if(regionIndex==REGION_ORIT)
{
cur_freq = freqParam[regionIndex][FM_FREQ_START] - ORIT_LOW_STEP;
}else{
cur_freq = freqParam[regionIndex][FM_FREQ_START] - freqParam[regionIndex][FM_FREQ_STEP];
}
if(disp==ON)//AUX/CD模式下后台搜索
{
#ifdef DISP_PROGRESS
if(rds==ON)
disp_radio(dispBuff,sub_band,cur_freq);
else
disp_radio(dispBuff,(BYTE)(channel/6)+1,cur_freq);
#endif
}
do
{
if(currentPower==_POWER_RADIO)//如果是收音模式mute
{
audio_set_mute(ON);
}
status=0;
rdsActive = 0;//rdsParam &= ~RDS_ACTIVE;
radio_seek(band,&cur_freq,UP,&status,disp);
if(status==0) //搜索到台
{
if(disp==ON)//AUX/CD模式下后台搜索
{
#ifdef DISP_PROGRESS
if(rds==ON)
{
disp_radio(dispBuff,sub_band,cur_freq);
}
else
disp_radio(dispBuff,(BYTE)(channel/6)+1,cur_freq);
#endif
}
//#ifndef LA1844
if(rds==ON)
{
#ifdef _SUPPORT_RDS
pll_set_station(band,cur_freq);
disp_thread();//display();
//sys_delay_loops(WAIT_RDS_READY_LOOPS);
rdsWaitLoops=0;
while(!rdsTPGet)
{
rdsWaitLoops++;
if(rdsWaitLoops>WAIT_RDS_READY_LOOPS)
break;
sys_delay_loops(1);
}
if(rdsTPGet && !rdsPTYSeek)
{
ta_freq = cur_freq;
if(rdsTAEnable && !(radioParam&RA_AM_WORK))//TA+FM记忆最后频率为TA
lastFreq = cur_freq;
status=SEARCH_BREAK;
//rdsParam &= ~TA_SEEK;//dont seek TA
rdsTASeek = 0;
}else{
if(rdsPTYSeek)
{
if(nCurrentPty==cur_pty)
{
status=SEARCH_BREAK;
rdsPTYGet = 1;//rdsParam |= PTY_FOUND;
}
}
}
#endif
}else{
disp_char(dispBuff,DISP_CHANNEL,ASCII_NUM+(channel%6+1));
if(channel%6==0)//修改每个波段的首个电台
{
bandLastFreq[regionIndex][channel/6]=cur_freq;
}
//#ifndef LA1844
if(rdsAFEnable)
{
#ifdef _SUPPORT_RDS
pll_set_station(band,cur_freq);
disp_thread();//display();
//sys_delay_loops(WAIT_RDS_READY_LOOPS);
rdsWaitLoops=0;
while(!rdsActive)
{
rdsWaitLoops++;
if(rdsWaitLoops>WAIT_RDS_READY_LOOPS)
break;
sys_delay_loops(1);
}
if(rdsActive)
{
rdsActive = 0;//rdsParam &= ~RDS_ACTIVE;
#ifdef PRESET_SAVE_IN_RAM
fmPresetFreq[regionIndex][channel++] = cur_freq;
#else
eeprom_busy_wait();
eeprom_write_word(fmPresetFreq[0]+FM_COUNT*regionIndex+channel,cur_freq);
channel++;
#endif
}
#endif
}else{
#ifdef PRESET_SAVE_IN_RAM
fmPresetFreq[regionIndex][channel++]=cur_freq;
#else
eeprom_busy_wait();
eeprom_write_word(fmPresetFreq[0]+FM_COUNT*regionIndex+channel,cur_freq);
channel++;
#endif
}
}
}
} while( (channel<FM_COUNT) && (status==0));
}else{ //AM
cur_freq = freqParam[regionIndex][AM_FREQ_START] - freqParam[regionIndex][AM_FREQ_STEP];
//radio_seek_delay(band,cur_freq);
#ifdef DISP_PROGRESS
disp_radio(dispBuff,(BYTE)(channel/6)+RADIO_TYPE_AM1,cur_freq);
#endif
if(currentPower==_POWER_RADIO)//如果是收音模式mute
{
audio_set_mute(ON);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -