radio.h文件如下:
#ifndef _RADIO_H_
#define _RADIO_H_
uint8 radio_read[5];//定义2个五字节数组保存写入控制寄存器及读取数据的内存空间
uint8 radio_write[5]={0x00,0x00,0xd0,0x17,0x00};
//uint16 pll;//14位PLL的值保存于一个字
static unsigned long frequency; //电台频率保存变量
/*-------------------------------------------------------------------------------------------------------------------
写寄存器1
msb lsb
MUTE SM PLL13 PLL12 PLL11 PLL10 PLL09 PLL08
1:静音 1:搜索模式 PLL13->PLL8
0:正常 0:非搜索 预置或搜索电台的频率值高6位
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
写寄存器2
msb lsb
PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0
PLL7->PLL0
预置或搜索电台频率的低8位
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
写寄存器3
msb lsb
SUD SSL1 SSL0 HLSI MS ML MR SWP1
1:向上搜台 0 0:不搜索 1:本振高出电台 1:单声道 1:左声道静音 1:右声道静音 可编程输出口设置
0:向下搜台 0 1:ADC为5停止 225KHz 0:立体声 0:右声道正常 0:右声道正常 1:SWPOR1高
1 0:ADC为7停止 0:本振低于电台 0:SWPOR1低
1 1:ADC为10停止 225KHz
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
写寄存器4
msb lsb
SWP2 STBY BL XTAL SMUTE HHC SNC SI
可编程输出口 1:待机 1:76~91MHz 1:晶振32768Hz 1:软件静音开 1:高电平切割开 1:立体声消噪开
1:SWPOR2高 0:正常 0:87.5~108MHz 0:13MHz 0:软件静音关 0:高电平切割关 0:立体声消噪关
0:SWPOR2低
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
写寄存器5
msb lsb
PLLREF DTC - - - - - -
1:去重时间75uS
0:去重时间50uS
--------------------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------------------
函数功能:电台频率到PLL的转换
调用形式:Convert_PLL();
参数:
返回值:
修改时间:
备注:HLSI为1,采用高本振状态、XTAL=1,32.768KHz、PLLREF=0
---------------------------------------------------------*/
void Convert_PLL(void)
{
uint16 pll;
uint8 pll1,pll2;//高低位pll值暂存变量
pll=((frequency+225000)*4)/32768;// 单位均为Hz
pll1=pll/256;
pll2=pll%256;
radio_write[0]=pll1;
radio_write[1]=pll2;
}
/*---------------------------------------------------------
函数功能:初始化RADIO模块
调用形式:Radio_Init();
参数:
返回值:
修改时间:
备注:转换PLL值、写控制字
---------------------------------------------------------*/
void Radio_Init(void)
{
//frequency=93400000;//初始电台频率93.4MHz
//radio_write[0]=0x00;
//radio_write[1]=0x00;
//radio_write[2]=0xf0;
radio_write[3]=0x40;
//radio_write[4]=0x00;
//Convert_PLL();
frequency=93400000;
SendString(RADIO_ADDRESS,radio_write,5);
}
/*--------------------------------------------------------------------------------------------------------------------
读寄存器1
msb lsb
RF BLF PLL13 PLL12 PLL11 PLL10 PLL9 PLL8
1:发现电台 1:波段到头 PLL13->PLL8
or搜索到头 0:波段未到头 搜索或预置电台频率高6位
0:未发现电台
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
读寄存器2
msb lsb
PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0
PLL7->PLL0
搜索或预置电台频率低8位
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
读寄存器3
msb lsb
STERE0 IF6 IF5 IF4 IF3 IF2 IF1 IF0
1:立体声 IF6->IF0
0:单声道 中频IF计数器结果
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
读寄存器4
msb lsb
LEV3 LEV2 LEV1 LEV0 CI3 CI2 CI1 CI0
LEV3->LEV0 CI3->CI0
ADC输出电平 芯片识别(均为0)
--------------------------------------------------------------------------------------------------------------------*/
/*--------------------------------------------------------------------------------------------------------------------
读寄存器5
均为保留位
--------------------------------------------------------------------------------------------------------------------*/
void Convert_Frequency()
{
frequency=radio_read[0]&0x3f;
frequency<<=8;
frequency|=radio_read[1];
frequency=frequency*8192-225000;
}
void Radio_Ing(void)
{
static bit k=0;
bit i=0;
uint8 n=0;
uint16 j;
if(!k)
{
k=1;
radio_write[3]=0x17;
}[page]
Convert_PLL();
SendString(RADIO_ADDRESS,radio_write,5);
Display_8x16(0,0,frequency%100000000/10000000);
Display_8x16(8,0,frequency%10000000/1000000);
Display_8x16(16,0,10);
Display_8x16(24,0,frequency%1000000/100000);
/*ReceiveString(RADIO_ADDRESS,radio_read,5);
Display_8x16(0,0,(radio_read[3]&0x80)>>7);
Display_8x16(8,0,(radio_read[3]&0x40)>>6);
Display_8x16(16,0,(radio_read[3]&0x20)>>5);
Display_8x16(24,0,(radio_read[3]&0x10)>>4);*/
for(j=0;j<500;j++)
Display();
while(1)
{
if(ir_value==0x16||ir_value==0x0c||ir_value==0x18||ir_value==0x5e||ir_value==0x08||ir_value==0x1c||ir_value==0x5a||ir_value==0x42||ir_value==0x52||ir_value==0x4a)
{
while(1)
{
if(!i)
{
i=1;
ClearBuf();
//Display_8x16(16,0,10);
}
//if(n==4) frequency*=10;
if(ir_value==0x16)
{ir_value=0xff;Display_8x16(8*n,0,0);if(!n)frequency=0;n++;}
else if(ir_value==0x0c)
{ir_value=0xff;Display_8x16(8*n,0,1);if(!n)frequency=100000000;else if(n==1)frequency+=10000000;else if(n==2) frequency+=1000000;else if(n==3)frequency+=100000;n++;}
else if(ir_value==0x18)
{ir_value=0xff;Display_8x16(8*n,0,2);if(!n)frequency=2*100000000;else if(n==1)frequency+=2*10000000;else if(n==2) frequency+=2*1000000;else if(n==3)frequency+=2*100000;n++;}
else if(ir_value==0x5e)
{ir_value=0xff;Display_8x16(8*n,0,3);if(!n)frequency=3*100000000;else if(n==1)frequency+=3*10000000;else if(n==2) frequency+=3*1000000;else if(n==3)frequency+=3*100000;n++;}
else if(ir_value==0x08)
{ir_value=0xff;Display_8x16(8*n,0,4);if(!n)frequency=4*100000000;else if(n==1)frequency+=4*10000000;else if(n==2) frequency+=4*1000000;else if(n==3)frequency+=4*100000;n++;}
else if(ir_value==0x1c)
{ir_value=0xff;Display_8x16(8*n,0,5);if(!n)frequency=5*100000000;else if(n==1)frequency+=5*10000000;else if(n==2) frequency+=5*1000000;else if(n==3)frequency+=5*100000;n++;}
else if(ir_value==0x5a)
{ir_value=0xff;Display_8x16(8*n,0,6);if(!n)frequency=6*100000000;else if(n==1)frequency+=6*10000000;else if(n==2) frequency+=6*1000000;else if(n==3)frequency+=6*100000;n++;}
else if(ir_value==0x42)
{ir_value=0xff;Display_8x16(8*n,0,7);if(!n)frequency=7*100000000;else if(n==1)frequency+=7*10000000;else if(n==2) frequency+=7*1000000;else if(n==3)frequency+=7*100000;n++;}
else if(ir_value==0x52)
{ir_value=0xff;Display_8x16(8*n,0,8);if(!n)frequency=8*100000000;else if(n==1)frequency+=8*10000000;else if(n==2) frequency+=8*1000000;else if(n==3)frequency+=8*100000;n++;}
else if(ir_value==0x4a)
{ir_value=0xff;Display_8x16(8*n,0,9);if(!n)frequency=9*100000000;else if(n==1)frequency+=9*10000000;else if(n==2) frequency+=9*1000000;else if(n==3)frequency+=9*100000;n++;}
else if(ir_value==0x43)
{ir_value=0xff;Convert_PLL();SendString(RADIO_ADDRESS,radio_write,5);n=0;i=0;break;}
//if(n==2)
//n++;
for(j=0;j<100;j++)
Display();
}
}
else if(ir_value==0x15)
{
ir_value=0xff;//清除
frequency=frequency+100000;
Convert_PLL();
SendString(RADIO_ADDRESS,radio_write,5);
break;
}
else if(ir_value==0x07)
{
ir_value=0xff;
frequency=frequency-100000;
Convert_PLL();
SendString(RADIO_ADDRESS,radio_write,5);
break;
}
else if(ir_value==0x44||ir_value==0x40)//自动搜台
{
while(1)
{
if(ir_value==0x40)//向上自动搜台
{frequency+=100000;if(frequency>108000000)frequency=78000000;}
else {frequency-=100000;if(frequency<78000000)frequency=108000000;}
Convert_PLL();
SendString(RADIO_ADDRESS,radio_write,5);
if(frequency>108000000||frequency<78000000)break;
ReceiveString(RADIO_ADDRESS,radio_read,5);
Convert_Frequency();
if(((radio_read[2]&0x7f<0x3E)&(radio_read[2]&0x7f>0x31)|(radio_read[3]>>4)>5|(radio_read[0]&0x80)))
break;
else if(ir_value==0x43){break;}
Display_8x16(0,0,frequency%100000000/10000000);
Display_8x16(8,0,frequency%10000000/1000000);
Display_8x16(16,0,10);
Display_8x16(24,0,frequency%1000000/100000);
Display();
}
ir_value=0xff;
break;
}
else if(ir_value==0x46)//待机or正常
{
if(radio_write[3]&0x40)
radio_write[3]&=0xbf;
else radio_write[3]|=0x40;
ir_value=0xff;
//i=0;
break;
}
else if(ir_value==0x43||matrix.S==FIRST)
{
ir_value=0xff;
// i=0;
k=0;
//Radio_Init();不待机即可后台运行
matrix.S=FIRST;
break;
}
}
}
void Radio_Key(void)
{
if(!KEY_ENTER)
{
DelayMs(SCAN_DELAY);
if(!KEY_ENTER)
{
while(!KEY_ENTER)
;
matrix.S=FIRST;
}
}
}
/*
void Radio_Read1()
{
ReceiveString(0xc0,radio_read,5);
Convert_Frequency();
if(radio_read[0]&0x80)
temp[6]=duanma[1];
else temp[6]=duanma[0];
if(radio_read[0]&0x40)
{
temp[7]=duanma[1];
}
else temp[7]=duanma[0];
temp[0]=duanma[frequency/100];
temp[1]=duanma[frequency%100/10];
temp[2]=duanma[frequency%10];
}
*/
#endif
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』