📄 fm.c.bak
字号:
#include "include.h"
#include<stdio.h>
data unsigned long FM_radio_freq;
data unsigned long AM_radio_freq;
bit sstop ;
bit check;
bit FM_AM_Mode ;
bit Seekup ;
#define TunerEEP_ADR 0xA0
unsigned char volatile Tun_Buff[40];
/* =
{
0x91,0x8c,0x07,0x00,0x48,0x17,0x6f,0x00,
0x60,0xc8,0x20,0x05,0xf8,0xf9,0x25,0x4f,
0x00,0x81,0xe0,0xaf,0x8d,0xcf,0x00,0x00,
0xe7,0x1c,0x20,0xeb,0xe5,0x4b,0x81,0xfd,
0x04,0x00,0x00,0x00,0x00,0x00,0xfe,0xfe
};
*/
//*********************************************************************
/*
void WriteTunerRegister(unsigned char start,unsigned char end)
{
unsigned char i;
IIC_Start();
IIC_Tx(TUNER_ADR);
if (start == end)
IIC_Tx(start);
else
IIC_Tx(start+AUTO_INC);
for(i=start;i<=end;i++)
IIC_Tx(Tun_Buff[i]);
IIC_Stop();
}
*/
//**********************************************************************
void ReadTunerEEPROM(unsigned char start,unsigned char end,unsigned char *p)
{
unsigned char i;
IIC_Start();
IIC_Tx(TunerEEP_ADR);
IIC_Tx(start);
IIC_Tx(TunerEEP_ADR | 0x01);
for(i=start;i<=end;i++,p++)
{
if(i == end)
*p=IIC_Rx(NACK);
else
*p=IIC_Rx(ACK);
}
IIC_Stop();
}
//*****************************************************************************
/*
void WriteTunerEEPROM(unsigned char start, unsigned char end, unsigned char *p)
{
unsigned char i;
IIC_Start();
IIC_Tx(TunerEEP_ADR);
IIC_Tx(Start);
for(i=Start;i<=end;i++,p++)
{
IIC_Tx(*p);
}
IIC_Stop();
}
*/
/**************************************************************
Routine : WriteTunerRegister
Input :
Output :
Description
- Write into the tuner register
**************************************************************/
void Delay(time)
{
unsigned char i ;
for (i=time;i>0;i--)
{};
}
void WriteTunerRegister(unsigned char start, unsigned char end)
{
unsigned char i;
IIC_Start ();
IIC_Tx(TUNER_ADR);
if(start==end)
IIC_Tx(start);
else
IIC_Tx(start+AUTO_INC);
for (i=start;i<=end; i++)
IIC_Tx(Tun_Buff[i]);
IIC_Stop();
}
/****************************************************************
Routine : TunerRegisterRefresh
Input :
Output :
Description
- Refresh the tuner register
****************************************************************/
void TunerRegister_Init(void)
{
/*
if (radio_band < MW1)
{
radio_tun_vcoplldiv &= 0xBF; // select FM mode
}
else
{
radio_tun_vcoplldiv |= 0x40; // select AM mode
}
*/
ReadTunerEEPROM(10,49,&Tun_Buff[0]);
Delay(1000);
ReadTunerEEPROM(21,20,&Tun_Buff[0]);
WriteTunerRegister(0,31);
Delay(1000);
WriteTunerRegister(32,39);
}
void Radio_PLL_FMISet(void)
{
data unsigned int buffer;
buffer = ( unsigned int )(FM_radio_freq/100);
if ( buffer >= 986 )
{
if(buffer >= 1069)
{
Tun_Buff[0] = 0x4c;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
Tun_Buff[0] = 0x49;
// WriteTunerRegister(CPUMP_AREA);
}
}
else
{
if(buffer >= 945)
{
Tun_Buff[0] = 0x46;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
// Tun_Buff[0] = 0x43;
WriteTunerRegister(CPUMP_AREA);
}
}
if (buffer > 998)
{
if( buffer > 1061 )
{
Tun_Buff[4] = 0x06;
// WriteTunerRegister(TUNVOLT_AREA);
}
else if( buffer > 1031 )
{
Tun_Buff[4] = 0x04;
// WriteTunerRegister(TUNVOLT_AREA);
}
else
{
Tun_Buff[4] = 0x02;
// WriteTunerRegister(TUNVOLT_AREA);
}
}
else
{
if(buffer > 962)
{
Tun_Buff[4] = 0x00;
// WriteTunerRegister(TUNVOLT_AREA);
}
else if(buffer > 927)
{
Tun_Buff[4] = 0x82;
// WriteTunerRegister(TUNVOLT_AREA);
}
else if (buffer > 901)
{
Tun_Buff[4] = 0x84;
// WriteTunerRegister(TUNVOLT_AREA);
}
else
{
Tun_Buff[4] = 0x86;
// WriteTunerRegister(TUNVOLT_AREA);
}
}
}
void Radio_PLL_AMISet(void)
{
if( AM_radio_freq > 1098 )
{
if (FM_radio_freq > 1386)
{
if( FM_radio_freq >1530 )
{
Tun_Buff[0] = 0xdc;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
Tun_Buff[0] = 0xdb;
// WriteTunerRegister(CPUMP_AREA);
}
}
else
{
if (FM_radio_freq > 1242)
{
Tun_Buff[0] = 0xda;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
Tun_Buff[0] = 0xd9;
// WriteTunerRegister(CPUMP_AREA);
}
}
}
else
{
if(FM_radio_freq > 801)
{
if(FM_radio_freq > 954)
{
Tun_Buff[0] = 0xd8;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
Tun_Buff[0] = 0xd7;
// WriteTunerRegister(CPUMP_AREA);
}
}
else
{
if(FM_radio_freq > 666)
{
Tun_Buff[0] = 0xd6;
// WriteTunerRegister(CPUMP_AREA);
}
else
{
Tun_Buff[0] = 0xd5;
// WriteTunerRegister(CPUMP_AREA);
}
}
}
}
bit stable_check(void)
{
data unsigned int i ,j;
j = 0;
for( i=0;i<2000;i++)
{
if (StopIn() == 1)
j++;
Delay(100);
}
if (j>200)
return (1);
else return (0);
}
void Radio_FreqToPC(void)
{
volatile unsigned long freqbuffer ;
if(FM_AM_Mode == 1)
{
freqbuffer = ( FM_radio_freq + 10700 ) /50 -32;
Radio_PLL_FMISet();
}
else
{
freqbuffer = ( AM_radio_freq + 10700 ) -32;
}
Tun_Buff[1] = (unsigned char)(freqbuffer);
Tun_Buff[2] = (unsigned char)(freqbuffer >> 8);
WriteTunerRegister(TUNVOLT_AREA);
WriteTunerRegister(PLL_AREA);
}
void Radio_main(void)
{
/***********************************
if( (Radiopwron=1)&&(first_turn=1))
{
void TunerRegister_Init();
first_turn=0;
}
**********************************/
data unsigned counter;
if (FM_AM_Mode)
{
TunerRegister_Init();
for(counter=0;counter<=200;counter++)
{
if (Seekup==1)
{
FM_radio_freq += 100;
}
else
{
FM_radio_freq -= 100;
}
if(FM_radio_freq > 108000) FM_radio_freq = 87500; //FM 87.5MHz-108MHz
if(FM_radio_freq < 87500) FM_radio_freq = 108000; //FM 87.5MHz-108MHz
Radio_PLL_FMISet();
Radio_FreqToPC();
check = stable_check();
if (check == 1)
break;
}
}
else
{
TunerRegister_Init();
Tun_Buff[5] = 0x2a;
Tun_Buff[6] = 0x01;
Tun_Buff[7] = 0x21;
Tun_Buff[14] = 0xf5;
Tun_Buff[18] = 0xf8;
Tun_Buff[23] = 0x58;
WriteTunerRegister(IF_AREA);
WriteTunerRegister(7,7);
WriteTunerRegister(VCO_AREA);
WriteTunerRegister(SMETER_AREA);
WriteTunerRegister(SSTOP_AREA);
for(counter=0;counter<=200;counter++)
{
if(Seekup==1)
{
AM_radio_freq += 9;
}
else
AM_radio_freq -= 9;
if(AM_radio_freq > 1629)
AM_radio_freq = 540;
if( AM_radio_freq < 540)
AM_radio_freq = 540;
Radio_PLL_AMISet();
Radio_FreqToPC();
check = stable_check();
if (check == 1)
break;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -