TEA5767完整收音机程序.docx
- 文档编号:2285083
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:17
- 大小:16.58KB
TEA5767完整收音机程序.docx
《TEA5767完整收音机程序.docx》由会员分享,可在线阅读,更多相关《TEA5767完整收音机程序.docx(17页珍藏版)》请在冰点文库上搜索。
TEA5767完整收音机程序
TEA5767完整收音机程序
/*tea5767完整程序*/
//****************************************************************************************************/
#include
#include
/***********************************************************************************/
#definemax_freq108000//108Mhz
#definemin_freq87500//87.5Mhz
#definemax_pll0x339b//108MHz时的pll.
#definemin_pll0x299d//87.5MHz时的pll.
#defineAdd_Freq1
#defineDec_Freq0
#defineREFERENCE_FREQ32.768
#defineATIIcxxDriverAddressW0xC0
#defineATIIcxxDriverAddressR0xC1
#define_Nop()_nop_(),_nop_(),_nop_(),_nop_(),_nop_()/*定义空指令*/
#defineLEDP0
voidInitialization(void);
voidGet_Pll(void);
voidGet_Frequency(void);
voidSearch(unsignedcharmode);
voidAuto_Search(unsignedcharmode);
unsignedcharGetKey();
voidDelay(unsignedcharTime);
voidLed_Display(unsignedlongi);
voidDelayD(unsignedcharTime);
unsignedcharGetKey();
voidDelay(unsignedcharTime);
voidATIICxx_PWrite(unsignedchar*McuAddress,unsignedcharcount);
voidATIICxx_PRead(unsignedchar*McuAddress,unsignedcharcount);
voidI2C_Send_Byte(unsignedcharsendbyte);
unsignedcharI2C_Receive_Byte(void);
voidI2C_Start(void);
voidI2C_Stop(void);
voidI2C_Ack(void);
voidI2C_Noack(void);
/*********************************************************************/
/*IIC读写程序芯片型号*/
sbitI2C_SCK=P3^0;/*实时时钟时钟线引脚*/
sbitI2C_SDA=P3^1;/*实时时钟数据线引脚*/
sbitk1=P1^7;
sbitk2=P1^6;
sbitk3=P1^5;
sbitk4=P1^4;
/*********************************************************************/
/************************************************************************/
sbitge=P2^3;
sbitshi=P2^2;
sbitbai=P2^1;
sbitqan=P2^0;
unsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳
//0,1,23456789
/************************************************************************/
unsignedcharradio_write_data[5]={0x2d,0x56,0x20,0x11,0x00};//初始化写入TEA5767的数据(FM89.8Mhz)
unsignedcharradio_read_data[5];
unsignedintPll_Data;
unsignedlongFrequency_Data;
/***********************************************************************************/
voidInitialization(void)
{
TMOD=0x11;
TH0=0x5d;
TL0=0x3d;
TR0=0;//25ms
TH1=0x5d;
TL1=0x3d;
TR1=0;//25ms
T2CON=0x30;
RCAP2H=0xFE;
TH2=RCAP2H;
RCAP2L=0xFB;
TL2=RCAP2L;
TR2=0;//2400bps
PCON=0x00;
SCON=0xD0;
IP=0x14;
EX0=1;
IT0=1;
ET0=1;
EX1=1;
IT1=1;
ES=0;
EA=0;
}
/***********************************************************************************/
//读TEA5767状态,并转换成频率
voidRadio_Read(void)
{
unsignedchartemp_l,temp_h;
Pll_Data=0;
ATIICxx_PRead(&radio_read_data[0],5);
temp_l=radio_read_data[1];
temp_h=radio_read_data[0];
temp_h&=0x3f;
Pll_Data=temp_h*256+temp_l;
Get_Frequency();
}
/***********************************************************************************/
//由PLL计算频率
voidGet_Frequency(void)
{
unsignedcharhlsi;
unsignedintnpll=0;
npll=Pll_Data;
hlsi=radio_read_data[2]&0x10;
if(hlsi)
Frequency_Data=(unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25-225);//频率单位:
KHz
else
Frequency_Data=(unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25+225);//频率单位:
KHz
}
/***********************************************************************************/
//由频率计算PLL
voidGet_Pll(void)
{
unsignedcharhlsi;
hlsi=radio_read_data[2]&0x10;
if(hlsi)
Pll_Data=(unsignedint)((float)((Frequency_Data+225)*4)/(float)REFERENCE_FREQ);//频率单位:
k
else
Pll_Data=(unsignedint)((float)((Frequency_Data-225)*4)/(float)REFERENCE_FREQ);//频率单位:
k
}
/***********************************************************************************/
//手动设置频率,mode=1,+0.1MHz;mode="0:
-0".1MHz,不用考虑TEA5767用于搜台的相关位:
SM,SUD
voidSearch(unsignedcharmode)
{
Radio_Read();
if(mode)
{
Frequency_Data+=100;
if(Frequency_Data>max_freq)
Frequency_Data=min_freq;
}
else
{
Frequency_Data-=100;
if(Frequency_Data Frequency_Data=max_freq; } Get_Pll(); radio_write_data[0]=Pll_Data/256; radio_write_data[1]=Pll_Data%256; radio_write_data[2]=0x41; radio_write_data[3]=0x11; radio_write_data[4]=0x40; ATIICxx_PWrite(&radio_write_data[0],5); } /***********************************************************************************/ //自动搜台,mode=1,频率增加搜台;mode="0: 频率减小搜台". voidAuto_Search(unsignedcharmode) { Radio_Read(); Get_Pll(); if(mode) { radio_write_data[2]=0xb1; if(Pll_Data>max_pll) { Pll_Data=min_pll; } } else { radio_write_data[2]=0x41; if(Pll_Data { Pll_Data=max_pll; } } radio_write_data[0]=Pll_Data/256+0x40; radio_write_data[1]=Pll_Data%256; radio_write_data[3]=0x11; radio_write_data[4]=0x40; ATIICxx_PWrite(&radio_write_data[0],5); Radio_Read(); while(! (radio_read_data[0]&0x80))//RF电台就绪标志 { Radio_Read(); } } /***********************************************************************************/ voidmain(void) { //0x2d,0x56,0x20,0x11,0x00 unsignedlongtemp; Initialization(); radio_write_data[0]=0x2A; radio_write_data[1]=0xB6; radio_write_data[2]=0x41; radio_write_data[3]=0x11; radio_write_data[4]=0x40; ATIICxx_PWrite(&radio_write_data[0],5);//初始化TEA5767(89.8Mhz) Frequency_Data=89800; while (1) {temp=Frequency_Data; Led_Display(Frequency_Data); if(k1==0) {DelayD (2); while(k1==0);//等待键松开 Search(Add_Freq); } if(k2==0) {DelayD (2); while(k2==0);//等待键松开 Search(Dec_Freq); } if(k3==0) {DelayD (2); while(k3==0);//等待键松开 Auto_Search(Add_Freq); } if(k4==0) {DelayD (2); while(k4==0);//等待键松开 Auto_Search(Dec_Freq); } } } /*********************************************************************/ structbytedata_2 { unsignedcharByteH; unsignedcharByteL; }; unionint2byte { unsignedintIntData; structbytedata_2ByteData; }; /*********************************************************************/ //启动I2C总线,退出时SCL为低 voidI2C_Start(void) { I2C_SDA=1;/*发送起始条件的数据信号*/ _Nop(); I2C_SCK=1; _Nop();_Nop();_Nop();_Nop();_Nop();/*起始条件建立时间大于4.7us,延时*/ I2C_SDA=0;/*发送起始信号*/ _Nop();_Nop();_Nop();_Nop();_Nop();/*起始条件锁定时间大于4μs*/ I2C_SCK=0;/*钳住I2C总线,准备发送或接收数据*/ _Nop();_Nop();_Nop();_Nop();_Nop();/*起始条件建立时间大于4.7us,延时*/ } //*停止I2C总线 voidI2C_Stop(void) { I2C_SCK=0; I2C_SDA=0;/*发送结束条件的数据信号*/ _Nop();/*发送结束条件的时钟信号*/ I2C_SCK=1;/*结束条件建立时间大于4μs*/ _Nop();_Nop();_Nop();_Nop();_Nop(); I2C_SDA=1;/*发送I2C总线结束信号*/ } //MCU等待应答位(返回0表示应答) bitI2C_WaitAck(void) { unsignedcharucErrTime=200;//因故障接收方无ACK,超时值。 I2C_SCK=0; I2C_SDA=1; _Nop(); I2C_SCK=1; while(I2C_SDA) { ucErrTime--; if(ucErrTime==0) { I2C_Stop(); return0; } } I2C_SCK=0; return1; } //MCU应答信号 voidI2C_Ack(void) { I2C_SCK=0; I2C_SDA=0; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); I2C_SCK=1; _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); I2C_SCK=0; } //MCU发送非应答信号 voidI2C_Noack(void) { I2C_SCK=0; I2C_SDA=1; _Nop(); _Nop(); I2C_SCK=1; _Nop(); _Nop(); I2C_SCK=0; } voidI2C_Send_Byte(unsignedcharsendbyte) { unsignedchari=8; while(i--) { I2C_SCK=0; _Nop();//_Nop(); if(sendbyte&0x80)I2C_SDA=1; elseI2C_SDA=0; _Nop();//_Nop(); I2C_SCK=1; _Nop();//_Nop(); sendbyte<<=1; } I2C_WaitAck(); } staticunsignedcharI2C_Receive_Byte(void) { unsignedchari=8,data_buffer; I2C_SDA=1; while(i--) { I2C_SCK=0; _Nop();_Nop(); I2C_SCK=1; _Nop();_Nop(); data_buffer<<=1; if(I2C_SDA)data_buffer++; } return(data_buffer); } voidATIICxx_PWrite(unsignedchar*McuAddress,unsignedcharcount) { I2C_Start(); I2C_Send_Byte(ATIIcxxDriverAddressW); while(count--) { I2C_Send_Byte(*(unsignedchar*)McuAddress); ((unsignedchar*)McuAddress)++; } I2C_Stop(); } voidATIICxx_PRead(unsignedchar*McuAddress,unsignedcharcount) { I2C_Start(); I2C_Send_Byte(ATIIcxxDriverAddressR); while(count--) { *McuAddress=I2C_Receive_Byte(); I2C_Ack(); McuAddress++; } I2C_Noack(); I2C_Stop(); } voidDelayD(unsignedcharTime) { unsignedchari; while(--Time! =0) { for(i=0;i<125;i++);//i从0加到125,CPU大概就耗时1毫秒。 } } /************************************************************************/ voidLed_Display(unsignedlongi)//显示函数 { LED=tab[i/100000]; qan=0; bai=1; shi=1; ge=1; DelayD(3); LED=tab[(i%100000)/10000]; qan=1; bai=0; shi=1; ge=1; DelayD(3); LED=tab[((i%100000)%10000)/1000]&0x7f; qan=1; bai=1; shi=0; ge=1; DelayD(3); LED=tab[(((i%100000)%10000)%1000)/100]; qan=1; bai=1; shi=1; ge=0; DelayD(3); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TEA5767 完整 收音机 程序
![提示](https://static.bingdoc.com/images/bang_tan.gif)