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

📄 radio.h

📁 lc72130.收音机软件 #include "saa6588.c" #include "ba1924.c"
💻 H
字号:
#ifndef RADIO_H
#define RADIO_H
#include "lc72130.h"
//#define FM				0
//#define AM				1
//以下定义不同规格收音调谐器
#define CET7000				0			//LA1787,AM中频10.71M
#define CET6000				1			//AM中频450K
#define CET_FM				2			//单波段
#define CET_JAPAN			3
#define TUNNER_MAX			CET_JAPAN

//#define ST_SMETER			//通过SMETER判断ST

#ifdef LA1844
#define ADC_SMETER_SEEK		400//573//450
#define ADC_SMETER_SEEK_LOC	300
#define ADC_SMETER_ST		300
#else
#define ADC_SMETER_SEEK		280
#endif
#define UP					1
#define DOWN				0
#define DEFAULT_FREQ		8750		//默认开机频率87.5M
#define ORIT_JUMP_FREQ1		7400		//
#define ORIT_JUMP_FREQ2		8750		//
#define ORIT_LOW_STEP		1			//ORIT 低端步调
#define AM_COUNT			12
#define FM_COUNT			18

#define RADIO_TYPE_FM1		1			//FM1
#define RADIO_TYPE_FM2		2			//FM2
#define RADIO_TYPE_FM3		3			//FM3
#define RADIO_TYPE_AM1		4			//AM1
#define RADIO_TYPE_AM2		5			//AM2

// auto search status
#define FOUND_STATION		0
#define SEARCH_UP_TO_END	1			//搜索到头
#define SEARCH_BREAK		2			//用户终止搜索
#define PREVIEW_SECONDS		10			//预览时间,单位0.5秒


#if F_CPU==7372800
#ifdef LA1844
	#define WAIT_RDS_READY_LOOPS	25000//35000		//8000
#else
	#define WAIT_RDS_READY_LOOPS	20000		//8000
#endif
#elif F_CPU==8000000
	#define WAIT_RDS_READY_LOOPS	30000		//ms
#elif F_CPU==11059200
	#define WAIT_RDS_READY_LOOPS	30000		//ms
#endif

#define RA_INITED			0x01	//收音是否已经初始化
//#define RA_BAND				0x02	//FM=0 AM=1
#define RA_AM_WORK			0x04	//1=AM Work, 0= FM Work
//#define RA_PREVIEW			0x08	//预览中
//#define RA_IN_AMS			0x10	//自动搜索中
#define RA_ST				0x20	//立体声
//#define RA_SEEKING			0x40	//搜索中
#define RA_LOC				0x80	//本地台

//以下为参数下标
#define REGION_COUNT		7
#define FM_FREQ_START		0
#define FM_FREQ_END			1
#define FM_FREQ_STEP		2
#define FM_FREQ_FINE		3
#define AM_FREQ_START		4
#define AM_FREQ_END			5
#define AM_FREQ_STEP		6

#define RA_PRESET1			1
#define RA_PRESET2			2
#define RA_PRESET3			3
#define RA_PRESET4			4
#define RA_PRESET5			5
#define RA_PRESET6			6

#define REGION_EUR			0
#define REGION_USA			1
#define REGION_LATIN		2
#define REGION_ASIA1		3
#define REGION_ASIA2		4
#define REGION_ORIT			5
#define REGION_JAPAN		6

//#define PRESET_SAVE_IN_RAM	//记忆电台是否保存在RAM中
void radio_stop_scan(void);
void radio_init(void);
void radio_go_preset(BYTE band,BYTE preset);
void radio_ams(BYTE band,BYTE rds,BYTE disp);
void radio_seek(char band,UINT16 * start_freq,unsigned char dir,unsigned char *status,BYTE disp);
void radio_set_channel(char band,unsigned char channel);
void radio_is_preset(unsigned char band,UINT16 freq);
void radio_go_next(BYTE dir);
void radio_go_band_preset(unsigned char channel);
void radio_detect_sd(void);
void sys_event_seek(void);
void radio_seek_delay(char band,UINT16 freq);
#ifndef __DECL_RADIO__
#define __DECL_RADIO__	extern
//__DECL_RADIO__ BYTE radioMultiBand;
__DECL_RADIO__ BYTE tunnerType;
__DECL_RADIO__ BYTE radioParam;
__DECL_RADIO__ UINT16 amPresetFreq[REGION_COUNT][AM_COUNT];
__DECL_RADIO__ UINT16 fmPresetFreq[REGION_COUNT][FM_COUNT];

__DECL_RADIO__ UINT16 fmDeftPresetFreq[REGION_COUNT][AM_COUNT];
__DECL_RADIO__ UINT16 amDeftPresetFreq[REGION_COUNT][AM_COUNT];

__DECL_RADIO__ UINT16 freqParam[REGION_COUNT][8];
__DECL_RADIO__ UINT16 bandLastFreq[REGION_COUNT][5];
__DECL_RADIO__ BYTE regionIndex;
__DECL_RADIO__ UINT16 cur_freq;
__DECL_RADIO__ UINT16 lastFreq;
__DECL_RADIO__ UINT16 beforeSeekFreq;
__DECL_RADIO__ UINT16 ta_freq;		//保存有TA信号的台
__DECL_RADIO__ BYTE cur_channel;		//当前运行的记忆台
__DECL_RADIO__ BYTE curPreviewChannel;	
__DECL_RADIO__ BYTE lastPreset;
//__DECL_RADIO__ BYTE cur_band;				//当前波段
__DECL_RADIO__ BYTE sub_band;
__DECL_RADIO__ __flash__ char * regionName[REGION_COUNT];			//区域名称
__DECL_RADIO__ __eeprom__ char *TurnerList[];
//__DECL_RADIO__ char msgSeekTA[26];
__DECL_RADIO__ BOOL bRadioSeeking;
__DECL_RADIO__ BOOL bRadioInAMS;
__DECL_RADIO__ BOOL bRadioInPreview;
__DECL_RADIO__ char strSearch[];
__DECL_RADIO__ char strSeekPty[];
__DECL_RADIO__ BYTE radioBand;
#else
//BYTE radioMultiBand = ON;
BYTE tunnerType =  CET_FM;//CET7000;	//默认为1787高频头
BYTE radioParam=RA_ST;		//保存当前收音状态
UINT16 cur_freq = DEFAULT_FREQ;
UINT16 lastFreq = DEFAULT_FREQ;
UINT16 beforeSeekFreq;
UINT16 ta_freq;		//保存有TA信号的台
BYTE cur_channel=0;		//当前运行的记忆台
BYTE curPreviewChannel=1;	//当前预览的台	
BYTE lastPreset=1;
BYTE sub_band=RADIO_TYPE_FM1;
BOOL bRadioSeeking = 0;		//是否正在搜索中
BOOL bRadioInAMS = 0;		//是否正在AMS
BOOL bRadioInPreview;		//是否正在预览
BYTE radioBand = FM;

__eeprom__ char strT7000[] = "T7000";
__eeprom__ char strT6000[] = "T6000";
__eeprom__ char strTFmOnly[] = "FM ONLY";
__eeprom__ char strTjapan[] = "T JAPAN";

__flash__ char *TurnerList[]={
	strT7000,
	strT6000,
	strTFmOnly,
	strTjapan,
};
//预设的18FM台,值*100为实际值
//*FINE 50K step
#ifdef PRESET_SAVE_IN_RAM
UINT16 fmPresetFreq[REGION_COUNT][FM_COUNT]={
	//Eur 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//EUR
	//USA 87.5-108M 200K Step
	{8750,9010,9810,10610,10790,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//USA
	//LATIN 87.5-108M 100K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//LATIN1
	//Asia 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA1
	//Asia 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA2
	//OIRT 65M-74M 50K Step 65 67.0 69.0 72.0 74.0 65 
	{6500,8750,9000,9800,10600,10800,
	6500,8750,9000,9800,10600,10800,
	6500,6700,6900,7200,7400,6500},//OIRT
	//JAPAN 76.0M-92.0M 100K Step 76 79.4 81.3 85.0 90.0 76 
	{7600,8000,8400,8800,9000,7600,
	7600,7600,7600,7600,7600,7600,
	7600,7600,7600,7600,7600,7600},//JAP
};
//预设的12AM台
UINT16 amPresetFreq[REGION_COUNT][AM_COUNT]={
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //Eur
	{530,600,1000,1400,1710,530,530,530,530,530,530,530},//USA
	{520,600,1000,1400,1620,520,520,520,520,520,520,520},//LATIN
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA1
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA2
	{522,603,999,1404,1620,522,522,522,522,522,522,522},//ORIT
	{522,603,999,1404,1629,522,522,522,522,522,522,522},//JAPAN
	};
#else
//永久记忆的频率
__eeprom__ UINT16 fmPresetFreq[REGION_COUNT][FM_COUNT]={
	//Eur 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//EUR
	//USA 87.5-108M 200K Step
	{8750,9010,9810,10610,10790,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//USA
	//LATIN 87.5-108M 100K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//LATIN
	//Asia 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA1
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA2
	//OIRT 65M-74M 50K Step 65 67.0 69.0 72.0 74.0 65 
	{6500,8750,9000,9800,10600,10800,
	6500,8750,9000,9800,10600,10800,
	6500,6700,6900,7200,7400,6500},//OIRT
	//JAPAN 76.0M-92.0M 100K Step 76 79.4 81.3 85.0 90.0 76 
	{7600,8000,8400,8800,9000,7600,
	7600,7600,7600,7600,7600,7600,
	7600,7600,7600,7600,7600,7600},//JAP
};
//预设的12AM台
__eeprom__ UINT16 amPresetFreq[REGION_COUNT][AM_COUNT]={
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //Eur
	{530,600,1000,1400,1710,530,530,530,530,530,530,530},//USA
	{520,600,1000,1400,1620,520,520,520,520,520,520,520},//LATIN
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA1
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA2
	{522,603,999,1404,1620,522,522,522,522,522,522,522},//ORIT
	{522,603,999,1404,1629,522,522,522,522,522,522,522},//JAPAN
	};

__flash__ UINT16 fmDeftPresetFreq[REGION_COUNT][FM_COUNT]={
	//Eur 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//EUR
	//USA 87.5-108M 200K Step
	{8750,9010,9810,10610,10790,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//USA
	//LATIN 87.5-108M 100K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//LATIN1
	//Asia 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA1
	//Asia 87.5-108M 50K Step
	{8750,9000,9800,10600,10800,8750,
	8750,8750,8750,8750,8750,8750,
	8750,8750,8750,8750,8750,8750},//ASIA2
	//OIRT 65M-74M 50K Step 65 67.0 69.0 72.0 74.0 65 
	{6500,8750,9000,9800,10600,10800,
	6500,8750,9000,9800,10600,10800,
	6500,6700,6900,7200,7400,6500},//OIRT
	//JAPAN 76.0M-92.0M 100K Step 76 79.4 81.3 85.0 90.0 76 
	{7600,8000,8400,8800,9000,7600,
	7600,7600,7600,7600,7600,7600,
	7600,7600,7600,7600,7600,7600},//JAP
};
//预设的12AM台
__flash__ UINT16 amDeftPresetFreq[REGION_COUNT][AM_COUNT]={
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //Eur
	{530,600,1000,1400,1710,530,530,530,530,530,530,530},//USA
	{520,600,1000,1400,1620,520,520,520,520,520,520,520},//LATIN
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA1
	{522,603,999,1404,1620,522,522,522,522,522,522,522}, //ASIA2
	{522,603,999,1404,1620,522,522,522,522,522,522,522},//ORIT
	{522,603,999,1404,1629,522,522,522,522,522,522,522},//JAPAN
	};
#endif
//不同地区频率参数 {FM_MIN,FM_MAX,FM_STEP,AM_MIN,AM_MAX,AM_STEP}
UINT16 freqParam[REGION_COUNT][8] = {
	{8750,10800,10,5,522,1620,9,0},	//Eur
	{8750,10790,20,20,530,1710,10,0},//USA
	{8750,10790,10,10,520,1620,10,0},//LATIN
	{8750,10800,10,10,522,1620,9,0},	//ASIA1
	{8750,10800,5,5,522,1620,9,0},	//ASIA2
	{6500,10800,10,5,522,1620,9,0},	//ORIT
	{7600,9000,10,5,522,1629,9,0},	//JAP
	};

//不同地区的每个波段首个频率
UINT16 bandLastFreq[REGION_COUNT][5]={
	{8750,8750,8750,522,522},//Eur
	{8750,8750,8750,530,530},//USA
	{8750,8750,8750,520,520},//LATIN
	{8750,8750,8750,522,522},//Asia1
	{8750,8750,8750,522,522},//Asia2
	{6500,6500,6500,522,522},//ORIT
	{7600,7600,7600,522,522},//JAP
	};//每个波段记忆台
BYTE regionIndex = REGION_EUR;	//默认的地区为欧洲
__eeprom__ char strEurope[] = "EUR";		// 0
__eeprom__ char strAmerica[] = "USA";		// 1
__eeprom__ char strLatin[]	= "LATIN";		// 2
__eeprom__ char strAsia1[] = "ASIA1";			// 3
__eeprom__ char strAsia2[] = "ASIA2";			// 3
__eeprom__ char strOrit[] = "OIRT";			// 4
__eeprom__ char strJapan[] = "JAPAN";		// 5
__eeprom__ char strSearch[] = "SEARCH";
__eeprom__ char strSeekPty[] = "SEEK PTY";
__flash__ char * regionName[REGION_COUNT] = {strEurope,strAmerica,strLatin,strAsia1,strAsia2,strOrit,strJapan};
#endif

#endif

⌨️ 快捷键说明

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