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

📄 radio.c

📁 lc72130.收音机软件 #include "saa6588.c" #include "ba1924.c"
💻 C
📖 第 1 页 / 共 2 页
字号:
#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 + -