毕业设计--基于TEA5767和单片机的数字FM收音机设计 下载本文

内容发布更新时间 : 2024/5/18 7:48:36星期一 下面是文章的全部内容请认真阅读。

基于TEA5767模块的数字FM收音机设计

num5=(Frequency_Data/10); str[0]=num1+'0'; str[1]=num2+'0'; str[2]=num3+'0'; str[3]='.';

str[4]=num4+'0'; str[5]=num5+'0'; str[6]='\\0';

LcdShowStr(0,1,str); }

/////////////////////////////////////////// ////////读TEA5767状态,并转换成PLL值////// void Radio_Read(void) {

unsigned char temp_l,temp_h; Pll_Data = 0;

ATIICxx_PRead(&radio_read_data[0],5); temp_l = radio_read_data[1]; //PLL值 temp_h = radio_read_data[0]; //PLL值 temp_h &= 0x3f;

Pll_Data = temp_h*256+temp_l; Get_Frequency(); }

//////////////////////////////////////// //由PLL计算频率

void Get_Frequency(void) {

unsigned char hlsi; unsigned int npll = 0; npll = Pll_Data;

hlsi = radio_read_data[2]&0x10; if (hlsi)

Frequency_Data =

(unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25-225); else

Frequency_Data =

(unsignedlong)((float)(npll)*(float)REFERENCE_FREQ*(float)0.25+225);} //由频率计算PLL void Get_Pll(void) {

unsigned char hlsi;

hlsi = radio_read_data[2]&0x10; if (hlsi)

Pll_Data = (unsigned

int)((float)((Frequency_Data+225)*4)/(float)REFERENCE_FREQ); //频率单位:k else

Pll_Data = (unsigned

int)((float)((Frequency_Data-225)*4)/(float)REFERENCE_FREQ); //频率单位:k }

///////自动搜台,mode=1,频率增加搜台; mode=\频率减小搜台\void Auto_Search(unsigned char mode) {

LcdShowStr(10,0,\ //当搜索时,显示Auto if(mode) //mode=1,自动向上搜索 {

switch(index) //电平转换

21

基于TEA5767模块的数字FM收音机设计

{

case 0:

radio_write_data[2] = 0xA0;//低电平 低本振立体声非静音 break; case 1:

radio_write_data[2] = 0xC0;//中低电平 低本振立体声非静音 break; case 2:

radio_write_data[2] = 0xE0;//高电平 低本振立体声非静音 break; }

if(Pll_Data > max_pll) //当频率处于最高时, {

Pll_Data = min_pll; //自动转为最低频率 } }

else//向下搜索 {

switch(index) {

case 0:

radio_write_data[2]=0x20; //低电平 break; case 1:

radio_write_data[2]=0x40; //中低电平 break; case 2:

radio_write_data[2]=0x60; //高电平 break; }

if(Pll_Data < min_pll) {

Pll_Data = max_pll; } }

//////////调用I2C总线的写模式////////

ATIICxx_PWrite(&radio_write_data[0],5); Delay();//延时 Radio_Read(); LCDshow();

while(!(radio_read_data[0]&0x80))//RF电台就绪标志 若RF=1 则发现了一个电台或搜索到头;若 RF=0 未找到电台 {

Delay();//延时 Radio_Read();

if((radio_read_data[0]&0x40)==0x40)//搜索到头 {

if(mode) {

//ATIICxx_PWrite(&rdata[0],5);//初始化TEA5767(89.8Mhz) }

else {

//ATIICxx_PWrite(&radio_write_data[0],5);//初始化 TEA5767(89.8Mhz) } }

22

基于TEA5767模块的数字FM收音机设计

LCDshow(); }

LcdShowStr(10,0,\}

/////////////微调程序/////////////////////// void Search10(unsigned char mode) {

LcdShowStr(10,0,\ Delay();//延时 if(mode) {

Frequency_Data += 10;

if(Frequency_Data > max_freq) Frequency_Data = min_freq;

radio_write_data[2] = 0xA0;//低电平 低本振立体声非静音 }

else//向下搜索 {

Frequency_Data -= 10;

if(Frequency_Data < min_freq) Frequency_Data = max_freq;

radio_write_data[2]=0x20; //低电平 ,向下搜索模式 } Get_Pll();

radio_write_data[0] = Pll_Data/256;

radio_write_data[1] = Pll_Data%6; radio_write_data[3] = 0x17;//去噪 radio_write_data[4]=0x00;

ATIICxx_PWrite(&radio_write_data[0],5); LCDshow();

LcdShowStr(10,0,\}

//////////////////////////////////////// /////////抖动延迟程序/////////////////// void delay15ms(void) //误差 0us {

unsigned char i, j;

i = 30; j = 43; do {

while (--j); } while (--i); }

/////////////////////////////////////////

//////////////按键功能/////////////////// void Key() {

unsigned char str[3]; if(Key1==0) {

delay15ms();

while(Key1==0);//自动频道+ Auto_Search(Add_Freq); }

else if(Key2==0)//自动频道- {

23

基于TEA5767模块的数字FM收音机设计

delay15ms(); while(Key2==0);

Auto_Search(Dec_Freq); }

else if(Key3==0) //手动微加0.01 {

delay15ms(); if(Key3==0) {

Search10(Add_Freq); } }

else if(Key4==0) //手动微减0.01 {

delay15ms(); if(Key4==0) {

Search10(Dec_Freq); } }

else if(Key5==0)// {

delay15ms(); while(!Key5); if(index<2) {

index++; } else {

index=0; }

str[0]=index+'0'; str[1]='\\0';

LcdShowStr(15,1,str); } }

///////////////////////////////////// //////////////屏幕初始化///////////// void InitLCD() {

unsigned char str[3]; str[0]=index+'0'; str[1]='\\0'; LcdInit();

LcdShowStr(0,0,\ LcdShowStr(7,1,\ LcdShowStr(10,0,\ LcdShowStr(15,1,str); }

////////////////////////////////////// void main(void) {

InitLCD();//屏幕设置

ATIICxx_PWrite(&radio_write_data[0],5);//初始化TEA5767(89.8Mhz) Delay();

Radio_Read(); //把输入TEA5767的地址转换为频率 LCDshow(); //在屏幕上显示出来

24