Sakura板--收音机模块
#include
#include
#define uchar unsigned char
#define uint unsigned int
uchar radio_write_data[5] = {0x29,0xc2,0x20,0x11,0x00};//要写入TEA5767的数据
uint radio_read_data[5];
uint pll = 0x29c2; //默认电台的pll=87.8MHZ
uint max_pll = 0x339b; //108MHz时的pll,
uint min_pll = 9000; //70MHz时的pll
uint max_freq = 1000;
uint min_freq = 0;
uint frequency;
int get_pll();
int get_frequency();
void radio_write()
{
uchar i;
Wire.begin();
Wire.write(0xc0);//TEA5767写地址
while(!Wire.available())
{
for(i = 0;i < 5;i++)
{
Wire.beginTransmission(0);
Wire.write(radio_write_data[i]);
}
}
Wire.endTransmission();
}
void radio_read()
{
uchar i;
uchar temp_l,temp_h;
uchar pll = 0;
Wire.begin();
Wire.write(0xc1); //TEA5767读地址
if(!Wire.available())
{
for(i=0;i<5;i++)
{
Wire.beginTransmission(0);
radio_read_data[i] = Wire.read();
}
}
Wire.endTransmission();
temp_l=radio_read_data[1];
temp_h=radio_read_data[0];
temp_h&=0x3f;
pll=temp_h*256+temp_l;
get_frequency();
}
//由频率计算PLL
int get_pll()
{
uchar hlsi;
uint twpll=0;
hlsi = radio_write_data[2]&0x10;
if (hlsi)
pll=(unsigned int)((float)((frequency+225)*4)/(float)32.768);
//频率单位:kMZ
else
pll=(unsigned int)((float)((frequency-225)*4)/(float)32.768);
//频率单位:k
return pll;
}
//由PLL计算频率
int get_frequency()
{
unsigned char hlsi;
unsigned int npll=0;
npll=get_pll();
hlsi=radio_write_data[2]&0x10;
if (hlsi)
frequency=(unsigned long)((float)(npll)*(float)8.192-225);
//频率单位:KHz
else
frequency=(unsigned long)((float)(npll)*(float)8.192+225);
//频率单位:KHz
return frequency;
}
//手动设置频率,mode=1,+0.1MHz; mode=0:-0.1MHz ,不用考虑TEA5767
//用于搜台的相关位:SM,SUD
void search(char mode)
{
int frequency1 = get_frequency();
radio_read();
if(mode)
{
frequency+=100;
if(frequency>max_freq)
frequency=min_freq;
}
else
{
frequency-=100;
if(frequency
frequency=max_freq;
}
get_pll();
radio_write_data[0]=pll/256;
radio_write_data[1]=pll%256;
radio_write_data[2]=0x20;
radio_write_data[3]=0x11;
radio_write_data[4]=0x00;
radio_write();
}
void setup()
{
TwoWire ();
Wire.begin();
radio_write();
radio_read();
get_pll();
get_frequency();
}
void loop()
{
while(1)
{
search(1);
}
}