📄 radio2.c
字号:
#include "radio2.h"
static eRaStatus raStatus = RA_IDEL;
static RADIO radioInfo;
static IN1 in1;
static IN2 in2;
static BYTE ifcTimeout = 0;
static BYTE pllDataBuff[3];//保存返回的值
static UINT afTimeout = 0;
static UINT taTimeout = 0;
void radio_background(void)
{
switch(raStatus)
{
case RA_IDEL:
break;
case RA_SEEK_STOP:
in2.STRQ = RECV;
break;
case RA_SEEK_FWD: //向后搜索
radioInfo.dir = FWD;
raStatus = RA_CHK_BAND;
break;
case RA_SEEK_REV: //向前搜索
radioInfo.dir = REV;
raStatus = RA_CHK_BAND;
break;
case RA_CHK_BAND: //波段判断
if(radioInfo.band==FM)
{
if(radioInfo.loc==ON)
in2.LOC = OPEN;
else
in2.LOC = LOW;
}
raStatus = RA_NEXT_FREQ;
break;
case RA_NEXT_FREQ: //切换频率
if(radioInfo.dir==FWD)
radioInfo.freq += radioInfo.step;
else
radioInfo.freq -= radioInfo.step;
radioCheckFreq(&radioInfo);
radioSetFreq(&radioInfo);
radioResetCTE();
in2.STRQ = SEEK;
ifcTimeout = 0;
raStatus = RA_CHK_IFC; //等待 DI拉低进入中频读取状态
break;
case RA_CHK_IFC:
if(IFC_GETTING)
{
ifcTimeout++;
}else{
raStatus = RA_END_UC; // DI 拉低,进入中频读取状态
break;
}
if(ifcTimeout<IFC_TIMEOUT)
{
ifcTimeout++;
}else{
raStatus = RA_NEXT_FREQ; //超时继续下一个频率
break;
}
break;
case RA_END_UC:
spiReceiveByte(LC72130_OUT,pllDataBuff,4);//读取中频值
if(radioIfLocked(pllDataBuff))//判断中频是否锁定
{
if(radioInfo.smeter==ON) //检查SMETER
{
if()
{
raStatus = RA_PLL_LOCKED;
break;
}
}else{
raStatus = RA_PLL_LOCKED;//已锁定
break;
}
}
raStatus = RA_PLL_UNLOCK; //中频未锁定
break;
case RA_PLL_UNLOCK:
if(radioInfo.mode == MANUAL)
{
raStatus = RA_SEEK_STOP;
}else{
raStatus = RA_NEXT_FREQ;
}
break;
case RA_PLL_LOCKED:
break;
case RA_TOUT_AF:
if(rds_af_exist())
{
raStatus = RA_PLL_LOCKED;
}else{
}
break;
default:
break;
}
}
void radio_timer(void)
{
if(afTimeout)
{
afTimeout--;
}else{
raStatus = RA_TOUT_AF;
return;
}
if(taTimeout)
{
taTimeout--;
}else{
raStatus = RA_TOUT_TA;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -