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

📄 tuner.h

📁 一个带收音的功放程序, VFD显示驱动用一个非常实用的方法, 稍加修改即可换成不同的VFD, 功放芯片用M61538
💻 H
字号:
#ifndef  __TUNER_H__
#define  __TUNER_H__


/*==== tuner 主控制IC的定义, 使用SANYO的LV23000M  ======*/
#define     LV23000M


/*
假如你要移植TUNER程序到你的程序中,你需要定义以下变量
以及声明以下函数或者相关函数, 以及管脚定义, 存储地址 
同时为了移植方便, 我们将所有可以用位变量的变量都声明
成字节
*/

/*================  Pin define ===============*/
sbit     Tuner_CS       =  P2^3;
sbit     Tuner_CLK      =  P3^5;
sbit     Tuner_DATA_IN  =  P2^1; //对于TUNER来说是输入
sbit     Tuner_DATA_OUT =  P2^0; //对于TUNER来说是输出

#define  CLEAR_TUNER_CLK 	(Tuner_CLK = 0)
#define  SET_TUNER_CLK    	(Tuner_CLK = 1)

#define  CLEAR_TUNER_DATA 	(Tuner_DATA_IN = 0)
#define  SET_TUNER_DATA   	(Tuner_DATA_IN = 1)

#define  CLEAR_TUNER_CS    	(Tuner_CS = 0)
#define  SET_TUNER_CS      	(Tuner_CS = 1)

#define  TUNER_DATA_HIGH   	(Tuner_DATA_OUT == 1)
#define  TRI_TUNER_DATA   	(Tuner_DATA_OUT = 1)
/*================  Pin define ===============*/


/*========================    tuner define =====================*/

//TUNER有两种输入方式, 输入模式1(地址0x28)主要为写锁相环参数
#define  IN1_MODE           0x28

//输入模式2(地址为0x29)主要为设置及初始化TUNER
#define  IN2_MODE           0x29 

//输出模式, 地址(0x2A),主要是从TUNER IC里面读出各种状态
#define  OUT_MODE           0x2A 


//选择FM还是AM
#define  AM_MODE            0
#define  FM_MODE            1

//选择立体声还是单声道
#define  Tuner_MONO         0
#define  Tuner_STEREO       1

//FM波段的最小频率,在每步25KHz*2时(中国:FM 87.5~108.0MHz)
#define FMRefFreq           50
#define FMFREQMIN			((87500 + 10700)/FMRefFreq)
#define FMFREQMAX			((108000 - 87500)/FMRefFreq) //相对值

//FM跳变的步长
#define FMFREQSTEP  		1//设置的参考频率50K,跳变的频率就是这个的倍数

#define FMIFS	            0x5398//(中频计数1s为10700K, 我们设置的中频计数为32ms,对应的计数值就是0x5398)
#define FMDELTA             0x02  //设置中频计数的偏差范围

//AM波段的最小频率,在每步9KHz时(AM:531KHz~1602KHz)
//AM波段的最小频率,在每步5KHz时(AM:530KHz~1710KHz)
//AM的中频值为450K
#define AMRefFreq           5
#define AMFREQSTEP  		2//设置的参考频率50K,跳变的频率就是这个的倍数
#define AMFREQMIN			((530 + 450)/AMRefFreq)       //0xc4
#define AMFREQMAX			((1710 -530)/AMRefFreq) //0xec

#define AMIFS	            (0x3840 >> 4)//(1s钟计数450000, 32ms计数0x3840, 因为PLL的锁相环参数要移位4位)
#define AMDELTA             0x01//0x04


//手动扫描开始结束标志位
#define Manual_Scan_FF      1
#define Manual_Scan_FB     -1
#define Manual_Scan_End     0

//自动扫描开始结束标志位
#define Auto_Scan_Go        1
#define Auto_Scan_Stop      0


/***************************Tuner lOCK  define ********************/
//中频锁定等待时间定义, 以20ms为单位,在定时器里面加定义
#define Wait_Timer_Out      6

//中频等待时间启动标志
#define Wait_Timer_Start    1

//中频等待时间结束标志
#define Wait_Timer_End      0

//没有到中频锁定的等待时间,RadioLock()函数的返回值
#define Timer_Not_Reach     0xFF
/***************************Tuner lOCK  define ********************/


//FM的频率变化范围值, 从0到((108000 - 87500)/FMRefFreq)
VAR_EXT	 WORD     DeltFMFreq;

//FM的频率变化范围值, 从0到((1710 -530)/AMRefFreq)
VAR_EXT	 BYTE     DeltAMFreq;

//选择FM/AM
VAR_EXT	 BYTE     FM_AM_Select;


//扫描台的计数
VAR_EXT  WORD     Current_Freq;

//选择STEREO/MONO
VAR_EXT	 BYTE     Mono_Stereo_Select;

//REFERENCE
VAR_EXT	 BYTE     ucRadioControl[3];

//中频计数值
VAR_EXT	 WORD 	  uiIFCount;

//自动扫描是否使能
VAR_EXT  BYTE     Auto_Scan_Enable;

//自动扫描是否使能
VAR_EXT  BYTE     Auto_Scan_Start;

//自动扫描是否使能
VAR_EXT  BYTE     Auto_Is_Reach;

//扫描台的计数
VAR_EXT  BYTE     Scan_Channel;

//扫描台的计数
VAR_EXT  SignBYTE Manual_Scan_Enable;

//手动扫描标志位,用于手动扫描时的检测判定
VAR_EXT  SignBYTE Manual_Scan_Flag;
/*
  等待频率锁定的时间, 一般为中频计数时间(可设置为4,8,16,32ms,)+
  锁定等待时间, 一般中频计数设置为32ms,所以一般设置该时间为40ms
  这个值需要在定时器里面增加,我在后面改为延时10ms, 中频计数设为4ms
  实验
*/
VAR_EXT  BYTE     Wait_Lock_40ms;

//记忆按键处理标志
VAR_EXT  BYTE     Memory_Start;

//通道显示时间 
VAR_EXT  BYTE     Channel_Display;

//通道显示时间 
VAR_EXT  BYTE     NumberKey_Dealed;

/*========================    tuner define =====================*/


/*=======================存储定义 define =====================*/
#define  A24C02            0xA0 //用24C02存储, 存储的器件地址为0xA0 

//通道音频的频率值是否初始化,如果无需初始化, 那么24C02的这两个连续
//地址存0x55和0x5A,那么证明已经自己有存台, 无需初始化
//否则,FM的第一个台的频率存87.5M, 90M, 98M, 106M, 108M其他都是87.5MHZ
//AM存的台的频率时530,600,1000,1400,1720,其他存530KHZ
#define  Channel_Test      0x20

//A24C02的存储地址为0x0 ~ 0xFF,预定义FM的存台从0x20开始
#define  FM_Start          0x22

//预定义FM最大存储30个台
#define  FM_MAX_Channel    30

//定义AM存台的起始地址
#define  AM_Start          (FM_MAX_Channel*2 + FM_Start -1)

//预定义FM最大存储30个台
#define  AM_MAX_Channel    10
/*=======================存储定义 define =====================*/



#ifdef   LV23000M
BYTE	ReadByte_FromTuner(void);
void	SendByte_ToTuner(BYTE ucData);
void	SendString_ToTuner(BYTE ucAddr, BYTE ucN, BYTE *ucData);
void	ReadString_FromTuner(BYTE ucAddr, BYTE ucN, BYTE *ucData);
void	RadioInit(void);
void	RadioCountIF(void);
void 	RadioFreq(WORD uiFreq);
void	SetRadioMono(void);
void	RadioMute(void);
void	RadioDown(void);
void	RadioUp(void);
BYTE	RadioLock(void);
void	Tuner_Proc(void);
void	Proc_Tuner_NEXT_KEY(void);
void 	Proc_Tuner_PREV_KEY(void);
void 	Proc_Tuner_FF_KEY(void);
void 	Proc_Tuner_FB_KEY(void);
void 	Proc_Tuner_AUTOSCAN_KEY(void);
void    Proc_FMAM_Change(void);
void    Tuner_Open(void);
void    Tuner_MuteOFF_Display(void);
void 	Proc_Digital_Key(void);
void 	Proc_MEMORY_Key(void);
void    Change_Tuner_Mode(void);
void    Tuner_Step(BYTE Direct);
void 	Tuner_Channel_Init(void);
#endif   //LV23000M


#endif  //__TUNER_H__

⌨️ 快捷键说明

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