TEA5767的簡(jiǎn)單收音機(jī)設(shè)計(jì)
TEA5767HN 基本資料:
高靈敏、低噪聲高頻放大器,
收音頻率:87.6MHz~108MHz,(支持頻率范圍在76MHz~87.5MHz 之間的校園收音頻道),
LC 調(diào)諧振蕩器使成本更低,RF AGC 電路
內(nèi)置調(diào)頻中頻選擇 ,I2C 總線控制
內(nèi)置FM 立體聲解調(diào)器 ,PLL 合成調(diào)諧解碼器
兩個(gè)可編程端口 ,軟靜音,SNC(立體聲噪聲消除)
自適應(yīng)立體聲解碼,自動(dòng)搜索功能
等待模式,需要一個(gè)32.768KHz 晶體
40 腳LQFP 封裝
CPU:STC89C54RD+
晶震:40M
#include
#include
#include
sbit SDA_5767=P1^0;
sbit SCL_5767=P1^1;
sbit BUS_MODE=P1^2;
sbit BUS_ENABLE=P1^3;
#define max_freq 108000
#define min_freq 87500
#define max_pll 0x339b
#define min_pll 0x299d
#define KEY
#define WADDR
#define RADDR
unsigned char write_data[5]={0x2b,0x05,0x61,0x11,0x40};
//write_data[0] 第二位為1為搜索模式 后6為表示收音機(jī)頻率的高6位
//write_data[1] 表示收音機(jī)頻率的低8位
//write_data[2] 最高位表示搜索模式是向上還是向下 后兩位表示搜索的靈敏度 第四位立體聲和單聲道選擇位后四為左右聲道設(shè)置
//write_data[3] 第三位表示日本頻率和國(guó)際頻率選擇位 第四位 震蕩頻率選擇位(與第五字節(jié)最高位共同決定)第七為數(shù)字降噪功能選擇
//write_data[4] 最高位決定內(nèi)部震蕩頻率
unsigned char read_data[5];
unsigned long frequencry=0;
unsigned int pll;
void delay(void) //延時(shí)函數(shù)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
void start_5767(void)//起始
{
BUS_ENABLE=1;
SDA_5767=1;
SCL_5767=1;
delay();
SDA_5767=0;
delay();
SCL_5767=0;
}
void stop_5767(void)//停止
{
SDA_5767=0;
SCL_5767=1;
delay();
SDA_5767=1;
delay();
SCL_5767=0;
BUS_ENABLE=0;
}
void Check_Ack(void) //檢查應(yīng)答信號(hào)
{
SDA_5767=1;
SCL_5767=1;
F0=0;
delay();
if(SDA_5767) //如果數(shù)據(jù)為高 置位非應(yīng)答標(biāo)志FO
F0=1;
SCL_5767=0;
}
void Ack(void) //發(fā)響應(yīng)信號(hào)
{
SDA_5767=0;
delay();
SCL_5767=1;
delay();
SCL_5767=0;
}
void no_Ack(void) //發(fā)非響應(yīng)信號(hào)
{
SDA_5767=1;
SCL_5767=0;
delay();
SCL_5767=1; //迫使數(shù)據(jù)傳輸結(jié)束
delay();
}
void send_byte(unsigned char temp) //發(fā)送一字節(jié)數(shù)據(jù)
{
unsigned char i=8;
while(i--)
{
}
SCL_5767=0;
delay();
SDA_5767=1; //釋放SDA數(shù)據(jù)線
}
unsigned char read_byte(void) //讀一字節(jié)數(shù)據(jù)
{
unsigned char i=8;
unsigned char temp;
while(i--)
{
}
SCL_5767=0;
delay();
SDA_5767=1; //釋放SDA數(shù)據(jù)線
return (temp);
}
void write_radio()
{
unsigned char i;
start_5767();
send_byte(WADDR);
Check_Ack();
if(F0)
{
}
Ack();
for(i=0;i<5;i++)
{
send_byte(write_data[i]);
Check_Ack();
if(F0)
{
}
Ack();
}
stop_5767();
}
void
{
unsigned char i;
start_5767();
send_byte(RADDR);
Check_Ack();
if(F0)
{
}
Ack();
for(i=0;i<5;i++)
{
read_data[i]=read_byte();
Check_Ack();
if(F0)
{
}
Ack();
}
stop_5767();
}
unsigned int get_radio()
{
}
void get_frequencry() //將數(shù)據(jù)轉(zhuǎn)換為標(biāo)準(zhǔn)頻率
{
}
void get_pll() //將頻率轉(zhuǎn)換數(shù)據(jù)
{
}
void search(bit mode)
{
}
void auto_search(bit mode)
{
}
{
}
unsigned char GetKey()
{