TEA5767完整收音机程序.docx

上传人:b****1 文档编号:2285083 上传时间:2023-05-03 格式:DOCX 页数:17 大小:16.58KB
下载 相关 举报
TEA5767完整收音机程序.docx_第1页
第1页 / 共17页
TEA5767完整收音机程序.docx_第2页
第2页 / 共17页
TEA5767完整收音机程序.docx_第3页
第3页 / 共17页
TEA5767完整收音机程序.docx_第4页
第4页 / 共17页
TEA5767完整收音机程序.docx_第5页
第5页 / 共17页
TEA5767完整收音机程序.docx_第6页
第6页 / 共17页
TEA5767完整收音机程序.docx_第7页
第7页 / 共17页
TEA5767完整收音机程序.docx_第8页
第8页 / 共17页
TEA5767完整收音机程序.docx_第9页
第9页 / 共17页
TEA5767完整收音机程序.docx_第10页
第10页 / 共17页
TEA5767完整收音机程序.docx_第11页
第11页 / 共17页
TEA5767完整收音机程序.docx_第12页
第12页 / 共17页
TEA5767完整收音机程序.docx_第13页
第13页 / 共17页
TEA5767完整收音机程序.docx_第14页
第14页 / 共17页
TEA5767完整收音机程序.docx_第15页
第15页 / 共17页
TEA5767完整收音机程序.docx_第16页
第16页 / 共17页
TEA5767完整收音机程序.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

TEA5767完整收音机程序.docx

《TEA5767完整收音机程序.docx》由会员分享,可在线阅读,更多相关《TEA5767完整收音机程序.docx(17页珍藏版)》请在冰点文库上搜索。

TEA5767完整收音机程序.docx

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);

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2