AT89S52 12MHZ TEA5767的数码管显示调频收音机Word下载.docx
《AT89S52 12MHZ TEA5767的数码管显示调频收音机Word下载.docx》由会员分享,可在线阅读,更多相关《AT89S52 12MHZ TEA5767的数码管显示调频收音机Word下载.docx(6页珍藏版)》请在冰豆网上搜索。
sbitKEY3=P3^6;
sbitKEY4=P3^7;
#defineduanP0
//频率显示的数码管段选P0端口
//#definegy
//使用共阴极时屏蔽这行
sbitdula=P2^6;
sbitwela=P2^7;
ucharIF,ADC,CH;
//bitRF,STEREO;
#ifdefgy
unsignedcharcodedispbit[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
//显示位码
unsignedcharcodedispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
//数码管显示编码
#else
unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
//数码管显示编码
unsignedcharcodedispbit[]={0x7e,0x7d,0x7b,0x77,0x6f,0x5f};
/*定义点亮的数码管与数组的关系*/
#endif
/**************************************************************************************************************
unsignedcharradio_write_data[5]={0x2c,0xe1,0x70,0x16,0x80};
//频率为93.9MHz广东音乐电台
unsignedcharradio_write_data[5]={0x30,0x5c,0x70,0x16,0x80};
//频率为101.2MHz广东电台音乐之声
unsignedcharradio_write_data[5]={0x31,0x38,0x70,0x16,0x80};
//频率为103.0MHz广东珠江经济电台
unsignedcharradio_write_data[5]={0x31,0xd7,0x70,0x16,0x80};
//频率为104.3MHz宝安广播电台
unsignedcharradio_write_data[5]={0x32,0x20,0x70,0x16,0x80};
//频率为104.9MHz中央人民广播电台华夏之声
unsignedcharradio_write_data[5]={0x33,0x2d,0x70,0x16,0x80};
//频率为107.1MHz中国国际广播电台环球资讯
unsignedcharradio_read_data[5];
unsignedcharradio_write_data[5];
unsignedlongfrequency=104900;
//开机初始化的电台频率为104.9MHz中央民广播电台华夏之声
unsignedintPLL;
//计算频率合成时用的变量
voidDelayus(unsignedcharx)
{
for(;
x>
;
0;
x--);
}
voidiic_start()//启动总线传输
SDA=1;
Delayus(4);
SCL=1;
SDA=0;
SCL=0;
voidiic_stop()//结束总线传输
voidiic_ack()//发送应答位
bitiic_testack()
bitErrorBit;
ErrorBit=SDA;
returnErrorBit;
voidiic_write8bit(unsignedcharinput)//写一个字节的数据到总线上
unsignedchartemp;
for(temp=8;
temp>
temp--)
SDA=(bit)(input&
0x80);
Delayus(4);
SCL=1;
SCL=0;
input=input;
b--)
for(i=0;
i;
>
=4;
//STEREO=radio_read_data[2]&
0x80;
//最高位就是STEREO值
temp_l=radio_read_data[1];
temp_h=radio_read_data[0];
temp_h&
=0x3f;
PLL=temp_h*256+temp_l;
get_frequency();
//读TEA5767状态,并转换成频率
#definemax_freq108000
#definemin_freq87500
//自动搜台,mode=1,频率增加搜台;
mode=0:
频率减小搜台
voidauto_search(uchardec)
intk=0;
//unsignedcharaa[6]={0};
radio_write();
//写收音机芯片数据
if(dec)//自动搜台,mode=1,频率增加搜台
while(frequency;
0x31)&
&
(ADC>
4))//&
(STEREO)&
(RF))//如搜到电台
{
frequency+=100;
return;
}
frequency=min_freq;
//将最小频率下限值赋给当前频率
else//自动搜台,mode=0:
while(frequency>
min_freq)//如果当前频率大于最小频率下限值
get_pll();
//由频率计算PLL
radio_write_data[0]=PLL/256;
radio_write_data[1]=PLL%256;
radio_write_data[2]=0x20;
//减小频率搜索,低:
ADC输出大小为5,高充电电流
radio_write_data[3]=0x11;
//fxtal=32.768KHz,软件静音开
radio_write_data[4]=0x80;
//6.5MHz的锁相环参考频率开,去加重时间常数为50us。
radio_write_data[0]|=0x40;
//01000000=SM/SM=1则处于搜索模式
radio_write();
//写入TEA5767
desplay(frequency/100);
//调用显示
radio_read();
//读收音机芯片数据
//if((radio_read_data[0]&
0x80))//如果有一个频道被搜到或者一个制式已经符合
if((IF;
frequency-=100;
frequency=max_freq;
//将最大频率上限值赋给当前频率
voidmain()
//观察变量用
unsignedcharB,D;
frequency=104900;
PLL=(unsignedint)((float)((frequency+225))/(float)8.192);
B=PLL/256;
D=PLL%256;
delay();
delays(1000);
//延时消抖
search();
//写入初始化电台频率
//radio_read();
while
(1)
if(!
KEY1)//手动设置频率,+0.1MHz;
delays(250);
//延时消抖
if(frequency>
108500)//频率如果大于108.5MHz
frequency=87500;
//频率设定为87.5MHz
search();
//将显示的频率算好后写到TEA5767芯片里面
KEY2)
//手动设置频率,-0.1MHz;
delays(20);
frequency-=100;
if(frequency<
87500)//频率如果小于87.5MHz
frequency=108500;
//频率设定为108.5MHz
KEY3)
//加频率
auto_search
(1);
//自动搜台,mode=1,频率增加搜台
while(!
KEY3)desplay(frequency/100);
//调用显示
KEY4)
//减频率
auto_search(0);
//自动搜台mode=0:
频率减小搜台
KEY4)desplay(frequency/100);