方法PICTEA5767数码管显示调频收音机Word文件下载.docx
《方法PICTEA5767数码管显示调频收音机Word文件下载.docx》由会员分享,可在线阅读,更多相关《方法PICTEA5767数码管显示调频收音机Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
![方法PICTEA5767数码管显示调频收音机Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/1/708690fb-3e5f-49d9-b52a-180dda5c7da1/708690fb-3e5f-49d9-b52a-180dda5c7da11.gif)
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
/**************************************************************************************************************/
sbitSDA=P3^0;
//接在TEA5767的数据端口
sbitSCL=P3^1;
//接在TEA5767的时钟端口
sbitKEY1=P3^4;
//频率增加按键端口
sbitKEY2=P3^5;
//频率减小按键端口
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_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<
<
1;
uchariic_rdbyt()//从总线上读取一个字节的数据
uchara=0,i=0;
for(i=0;
i<
8;
i++)
SDA=1;
if(SDA==1)
{
a=(a<
1)+1;
}
elseif(SDA==0)
a=a<
return(a);
voiddelays(unsignedcharb)//按键消抖用的延时程序
unsignedchari;
for(b;
b>
b--)
250;
i++);
voidradio_write(void)//写入TEA5767
iic_start();
//启动总线传输
iic_write8bit(0xc0);
//TEA5767写地址
if(!
iic_testack())
for(i=0;
5;
iic_write8bit(radio_write_data);
//写一个字节的数据到总线上
iic_ack();
//发送应答位
iic_stop();
//结束总线传输
//将显示的频率算好后写到TEA5767芯片里面实现调节,不用考虑TEA5767用于搜台的相关位:
SM,SUD
//写模式
//数据字节1数据字节2数据字节3数据字节4数据字节5
voidsearch()
{
PLL=(unsignedint)((float)((frequency+225))/(float)8.192);
//计算合成频率数据频率单位:
k
//数据字节1的格式radio_write_data[0]
//位7(高位)位6位5位4位3位2位1位0(低位)
//MUTESMPLL13PLL12PLL11PLL10PLL9PLL8
//7MUTE如果MUTE=1则左右声道被静音;
MUTE=0左右声道正常工作。
//6SM如果SM=1则处于搜索模式SM=0不处于搜索模式。
//5到0PLL[13:
8]设定用于搜索和预设的可编程频率合成器。
radio_write_data[0]=PLL/256;
//将算好的频率高位数据存入将要TEA5767的数组里
//数据字节2的格式radio_write_data[1]
//PLL7PLL6PLL5PLL4PLL3PLL2PLL1PLL0
//PLL[7:
0]设定用于搜索和预设的可编程频率合成器。
radio_write_data[1]=PLL%256;
//将算好的频率低位数据存入将要TEA5767的数组里
//数据字节3的格式radio_write_data[2]
//SUDSSL1SSL0HLSIMSMLMRSWP1
//SUDSUD=1增加频率搜索SUD=0减小频率搜索。
//SLL[1:
0]搜索停止标准:
见下表1。
//SSL0SSL1搜索停止标准
//00在搜索模式下禁止
//01低:
ADC输出大小为5
//10中:
ADC输出大小为7
//11高:
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]
//SWP2STBYBLXTALSMUTEHCCSNCSI
//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=1SWPORT1输出准备好信号SI=0SWPORT1作为软件可编程端口1用。
radio_write_data[3]=0x16;
//中国制式采用32768晶振软静音关立体声消噪声开
//数据字节5的格式radio_write_data[4]
//PLLREFDTC------------
//若PLLREF=16.5MHz的锁相环参考频率启用;
若PLLREF=06.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的格式
//RFBLFPLL13PLL12PLL11PLL10PLL9PLL8
//7RF准备好标志:
RF=1有一个频道被搜到或者一个制式已经符合;
RF=0没有频道被搜到。
//6BLF波段制式:
BLF=1一个制式已经符合BLF=0没有制式已经符合。
8]用于搜索和预设后的可编程频率合成器设定结果。
//数据字节2的格式
//数据字节2的各个位描述
0]设定用于搜索和预设后的可编程频率合成器设定结果。
//数据字节3的格式
//STEREOIF6IF5IF4IF3IF2IF1IF0
//7STEREO立体声标志位:
STEREO=1立体声接收STEREO=0单声道接收。
//6到0IF[6:
0]中频计数器结果。
//数据字节4的格式
//LEV3LEV2LEV1LEV0CI3CI2CI10
//7到4LEV[3:
0]ADC的输出。
//3到1CI[3:
1]芯片验证号。
//0------该位内部置0。
//数据字节5的格式
//00000000
//7到0------预留为扩展用由内部置0。
voiddelay()
uchark;
for(k=0;
k<
100;
k++);
voiddesplay(uintaa)
duan=tab[aa/1000]|0x80;
//关这位数码管的小数点
led1=0;
delay();
led1=1;
duan=tab[aa%1000/100]|0x