新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > AT89S52+12MHZ+TEA5767的数码管显示调频收音机

AT89S52+12MHZ+TEA5767的数码管显示调频收音机

作者: 时间:2016-11-30 来源:网络 收藏

/**************************************************************************************************************/
//数据字节3的格式 radio_write_data[2]
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// SUD SSL1 SSL0 HLSI MS ML MR SWP1
//SUD SUD=1 增加频率搜索 SUD=0 减小频率搜索。
//SLL[1:0] 搜索停止标准:见下表1。
//SSL0 SSL1 搜索停止标准
// 0 0 在搜索模式下禁止
// 0 1 低:ADC输出大小为5
// 1 0 中:ADC输出大小为7
// 1 1 高:ADC输出大小为10
//HLSI 高/低充电电流切换:HLSI=1 高充电电流 HLSI=0 低充电电流。
//MS 立体声/单声道:MS=1 单声道 MS=0 立体声。
//ML 左声道静音:ML=1 左声道静音并置立体声 ML=0 左声道正常。
//MR 右声道静音:MR=1 右声道静音并置立体声 MR=0 右声道正常。
//SWP1 软件可编程端口1:SWP1=1 端口1高电平 SWP1=0 端口1低电平。
radio_write_data[2] = 0x70; //这是TEA5767开立体声 关静音
/**************************************************************************************************************/
//数据字节4的各个位描述 radio_write_data[3]
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// SWP2 STBY BL XTAL SMUTE HCC SNC SI
//SWP2 软件可编程端口2:SWP2=1,端口2高电平;SWP2=0,端口2低电平。
//STBY 等待:STBY=1 处于待机模式,STBY=0,退出待机模式。
//BL 波段制式:BL=1 日本调频制式 BL=0,美国/欧洲调频制式。
//XTAL 如果XTAL=1 那么fxtal=32.768KHz;如果XTAL=0 那么fxtal=13MHz。
//SMUTE 软件静音:SMUTE=1 软静音打开;SMUTE=0,软静音关闭。
//HCC 白电平切割:HCC=1 高电平切割打开 HCC=0 高电平切割关闭。
//SNC 立体声噪声去除:如果SNC=1,立体声消噪除打开,如果SNC=0,立体声消噪除关闭。
//SI 搜索标志位:SI=1 SWPORT1输出准备好信号 SI=0 SWPORT1作为软件可编程端口1用。
radio_write_data[3] = 0x16; //中国制式 采用32768晶振 软静音关 立体声消噪声开
/**************************************************************************************************************/
//数据字节5的格式 radio_write_data[4]
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// PLLREF DTC -- -- -- -- -- --
//若PLLREF=1 6.5MHz的锁相环参考频率启用;若PLLREF=0 6.5MHz的锁相环参考频率关闭。
//若DTC=1 去加重时间常数为75us;若DTC=0 去加重时间常数为50us。
//位5到0 未用 状态不必考虑。
radio_write_data[4] = 0x80; //6.5M锁相环开 去加重时间50US
/**************************************************************************************************************/
radio_write(); //写入TEA5767
}
/**************************************************************************************************************
//读模式
//数据字节1 数据字节2 数据字节3 数据字节4 数据字节5
//数据字节1的格式
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// RF BLF PLL13 PLL12 PLL11 PLL10 PLL9 PLL8
//7 RF 准备好标志:RF=1 有一个频道被搜到或者一个制式已经符合;RF=0 没有频道被搜到。
//6 BLF 波段制式:BLF=1 一个制式已经符合 BLF=0 没有制式已经符合。
//5到0 PLL[13:8] 用于搜索和预设后的可编程频率合成器设定结果。
//数据字节2的格式
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// PLL7 PLL6 PLL5 PLL4 PLL3 PLL2 PLL1 PLL0
//数据字节2的各个位描述
//PLL[7:0] 设定用于搜索和预设后的可编程频率合成器设定结果。
//数据字节3的格式
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// STEREO IF6 IF5 IF4 IF3 IF2 IF1 IF0
//7 STEREO 立体声标志位:STEREO=1 立体声接收 STEREO=0 单声道接收。
//6到0 IF[6:0] 中频计数器结果。
//数据字节4的格式
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// LEV3 LEV2 LEV1 LEV0 CI3 CI2 CI1 0
//7到4 LEV[3:0] ADC的输出。
//3到1 CI[3:1]芯片验证号。
//0 ------ 该位内部置0。
//数据字节5的格式
//位7(高位) 位6 位5 位4 位3 位2 位1 位0(低位)
// 0 0 0 0 0 0 0 0
//7到0 ------ 预留为扩展用 由内部置0。
/**************************************************************************************************************/
void delay()
{
uchar k;
for(k = 0;k < 100;k++);
}
/**************************************************************************************************************/
void desplay(uint aa)
{
/**************************************************************************************************************
duan = tab[aa / 1000] | 0x80; //关这位数码管的小数点
led1 = 0;
delay();
led1 = 1;
duan = tab[aa % 1000 / 100] | 0x80; //关这位数码管的小数点
led2 = 0;
delay();
led2 = 1;
duan = tab[aa % 100 / 10] & 0x7f; //点亮这位数码管的小数点
led3 = 0;
delay();
led3 = 1;
duan = tab[aa % 10] | 0x80; //关这位数码管的小数点
led4 = 0;
delay();
led4 = 1;
/**************************************************************************************************************/
dula = 0;
if((aa / 1000) == 0)
duan = dispcode[aa / 1000 + 10]; //这位为0数码管不显示
else
duan = dispcode[aa / 1000]; //这位数码管显示频率百位
dula = 1;
dula = 0;
wela = 0;
duan = dispbit[2];
wela = 1;
wela = 0;
delay();
delay();
delay();
delay();
delay();
delay();
dula = 0;
duan = dispcode[aa % 1000 / 100]; //这位数码管显示频率十位
dula = 1;
dula = 0;
wela = 0;
duan = dispbit[3];
wela = 1;
wela = 0;
delay();
delay();
delay();
delay();
delay();
delay();
dula = 0;
#ifdef gy
duan = dispcode[aa % 100 / 10] & 0x7F; //这位数码管显示频率百位 开数码管的小数点
#else
duan = dispcode[aa % 100 / 10] | 0x80; //这位数码管显示频率百位 开数码管的小数点
#endif
dula = 1;
dula = 0;
wela = 0;
duan = dispbit[4];
wela = 1;
wela = 0;
delay();
delay();
delay();
delay();
delay();
delay();
dula = 0;

duan = dispcode[aa % 10]; //这位数码管显示频率小数位
dula = 1;
dula = 0;
wela = 0;
duan = dispbit[5];
wela = 1;
wela = 0;
delay();
delay();
delay();
delay();
delay();
delay();
}


评论


技术专区

关闭