📄 tuner.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 + -