51单片机控制的FM收音机Word下载.docx
《51单片机控制的FM收音机Word下载.docx》由会员分享,可在线阅读,更多相关《51单片机控制的FM收音机Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
1.2.1调频广播收音机的原理:
一个典型的调频广播收音机的电路原理图如下:
122本设计用到的TEA5767HN勺功能介绍:
(1)具有集成的高灵敏度低噪声射频输入放大器;
(2)具有射频自动增益控制电路RFAGC
(3)LC调谐振荡器采用廉价的固定片式电感;
(4)具有内部实现的FM中频选择性;
(5)具有完全集成的FM鉴频器,无需外部解调;
(6)可选择32.768kHZ或13MHZ勺晶体参考频率振荡器,也可使用
外部
6.5MHZ的参考频率;
(7)采用PLL合成器调谐系统;
(8)引脚BUSMODE选择IIC和3-wire总线;
(9)总线可输出7位中频计数器;
(10)总线可输出4位信号电平信息;
(11)具有软件静音功能;
(12)具有免调整立体声解调功能;
(13)具有电台自动搜索功能;
123TEA5767HN的IIC总线说明:
TEA5767HN的IIC总线地址是C0H是可收发的从器件结构,无内部地址。
最大低电平是0.2VCCD最大高电平是0.45VCCD
当使用IIC总线时,引脚BUSMOD必须接地。
因总线的最高时钟频率是400kHZ故芯片的时钟频率不能高于该值。
当向TEA5767HN写入数据时,地址的最低位是0,即写地址是
C0H当从TEA5767Hr读出数据时,地址的最低位是1,即读地址是
C1H
TEA5767HN遵守通用的IIC总线通信协议,IIC总线的写模式和读模
式格式分别为:
IIC写模式
开始位
写地址
应答位
数据字节
停止位
IIC读模式
读地址
数据字节1
1.2.4写数据:
TEA5767HN内部有一个5字节的控制寄存器,在IIC上电复位
后,必须先通过总线接口向其写入适当控制字,TEA5767HN才能正常
工作。
写入控制字应按照以下顺序:
地址,字节1,字节2,字节3,字节4,字节5
首先发送每个字节的最高位。
在时钟下降沿后写入的数据才有效
写模式字节1格式
位7(MSB
位6
位5
位4
位3
位2
位1
位0(LSB
MUTE
SM
PLL13
PLL12
PLL11
PLL10
PLL9
PLL8
写模式字节1各位说明
位
符号
说明
7
左右声道静音设置。
1:
左右声道静音;
0:
左右声道
非静音
6
搜索模式设置。
搜索模式;
非搜索模式
5~0
PLL13~
8
预置或搜索电台的频率数据高6位
写模式字节2格式
PLL7
PLL6
PLL5
PLL4
PLL3
PLL2
PLL1
PLL0
写模式字节2各位说明
7~0
PLL7~0
预置或搜索电台的频率数据低8位
写模式字节3格式
SUD
SSL1
SSL0
HLSI
MS
ML
MR
SWP1
写模式字节3各位说明
上下搜索设置。
向上搜索;
向下搜索
6,5
SSL1~0
设定搜索停止电平,见下表
4
设定咼低本振。
咼端本振注入;
低端
本振注入
3
单声道或立体声设置。
强制单声道;
0:
开立体声
2
左静音设置。
左声道静音强制单声道;
左声道非静音
1
右静音设置。
1:
右声道静音强制单声道;
右声道非静音
软件可编程输出口1设置。
SWPOF为高;
SWPORM氐
搜索停止电平设置
搜索停止电平
不搜索
低电平,ADC输出值为5
中电平,ADC输出值为7
高电平,ADC输出值为10
(本设计用的是
第三种)
125读数据
读地址为C1H
读模式字节1格式
位7
(MSB
位0
(LSB
RF
BLF
读模式字节1各位说明
Ready标志。
1:
发现了一个电台或
搜索到头;
未搜索到头
波段到头标志。
PLL13~8
搜索或预置的电台频率值的高6位
(需换算)
读模式字节2格式
PLL
读模式字节2各位说明
搜索或预置的电台频率值的低8位(需换算)
读模式字节3格式
STEREO
IF6
IF5
IF4
IF3
IF2
IF1
IF0
读模式字节3各位说明
立体声标志。
立体
声;
单声道
6~0
IF6~0
中频计数结果
126根据电台频率换算出PLL控制字写入以及根据PLL控制字换算出电台频率读出。
TEA5767HN勺中频f固定为225khz,参考频率与所使用的晶振有关,具体数值如下:
XTAL是写模式控制字第4字节的位4,PLLREF是写模式控制字第5字节的7位。
FM收音机参考频率
XTAL
PLLREF
参考频率
振荡频率
3000HZ
13MHZ
6.5MHZ
32768HZ
32.768KHZ
fRF=(NDEC*fREFS)/4-(+)fIF式中,fRF为收到的电台频率,
NDE(为控制字的十进制值,fIF为中频频率,fREFS为参考频率。
当采用高本振时,公式用减号,当采用低本振时,公式用加号。
本设计用的参考频率是32768HZ,低本振,计算公式为:
fRF二NDEC*8192+22500(HZ)
2FM收音机流程图:
3FM收音机电路图:
IDDDj
Q-Tj
TQD1
Fdm.
町帖去
珀耳DEFJ咖P3STI
町育□)
KTALI
ISXljlE
■<
C.1_1UlKi■E*.
回
B.»
:
^TT
W.T
L_<
wr
VK?
3SD
nSyz?
HH
r>
-M
器件清单:
器件
规格
件数
电解电容
1000H
47aF
普通电容
0.1aF
电阻
10k
TDA2822
喇叭
4FM收音机实物图:
5.FM收音机核心程序:
#inelude<
reg51.h>
#include<
string.h>
math.h>
uart.h>
i2e.h>
#definemax_freq108000
#definemin_freq87500sbitKEY11二P3A0;
sbitKEY22二卩3八1;
sbitKEY仁P3A2;
sbitKEY2=P3A3;
unsignedcharradio_write_data[5]={0x2a,0xb6,0x40,0x11,0x40};
//要写入TEA5767的数据
unsignedcharradio_read_data[5];
//TEA5767读出的状
态
unsignedintdefault_pll=0x301d;
〃0x29f9;
//
默认存台的pll,95.8MHz
unsignedintmax_pll=0x339b;
//108MHz时的pll,
unsignedintmin_pll=9000;
//70MHz时的pll
unsignedlongfrequency;
unsignedintpll;
unsignedlongFM;
/*voiddelay(unsignedinttime)
{
while(time--);
}*/
voiddelay1ms(unsignedintb)//1ms
for(b;
b>
0;
b--)
{unsignedinti;
for(i=0;
i<
300;
i++)
{;
}
#includevintrins.h>
sbitRS=P2A4;
//定义端口
sbitRW=卩2八3;
sbitEN=P2A2;
sbitP20=P2A0;
//定义锁存使能端口段锁存
sbitP2仁P2A1;
〃位锁存
sbitP35=P3A5;
〃这是为了关闭开发板上的点阵实际应用去掉
#defineRS_CLRRS=0
#defineRS_SETRS=1
#defineRW_CLRRW=0
#defineRW_SETRW=1
#defineEN_CLREN=0
#defineEN_SETEN=1
#defineDataPortP1
/*
uS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是0~255这里使用晶振12M精确延时请使用汇编,大致延时
长度如下T=tx2+5uS
*/
voidDelayUs2x(unsignedchart)
while(--t);
mS延时函数,含有输入参数unsignedchart,无返回值
unsignedchar是定义无符号字符变量,其值的范围是
0~255这里使用晶振12M精确延时请使用汇编
voidDelayMs(unsignedchart)
while(t--)
//大致延时1mS
DelayUs2x(245);
判忙函数
----*/
bitLCD_Check_Busy(void)
DataPort二OxFF;
RS_CLR;
RW_SET;
EN_CLR;
_nop_();
EN_SET;
return(bit)(DataPort&
0x80);
写入命令函数
voidLCD_Write_Com(unsignedcharcom)
while(LCD_Check_Busy());
//忙则等待
RW_CLR;
DataPort二com;
写入数据函数
voidLCD_Write_Data(unsignedcharData){
RS_SET;
DataPort=Data;
清屏函数
voidLCD_Clear(void)
LCD_Write_Com(0x01);
DelayMs(5);
初始化函数
voidLCD_Init(void)
LCD_Write_Com(0x38);
/*显示模式设置*/
显示清屏*/
显示光标移动设置*/
显示开及光标设置*/
/*
LCD_Write_Com(0x06);
LCD_Write_Com(OxOC);
/*}
〃1602显示
voidDISP_FM()
unsignedcharj;
j=(radio_read_data[3]&
0xf0)>
>
4;
LCD_Write_Com(0x8e);
LCD_Write_Data('
O'
+(j/1O));
+(j%1O));
LCD_Write_Com(0x8c);
S'
);
:
'
FM=frequency;
LCD_Write_Com(0x80);
F'
R'
a'
d'
i'
o'
LCD_Write_Com(0xc2);
if(FM/1OOOOO)
+FM/1OOOOO);
elseLCD_Write_Data('
LCD_Write_Com(0xc3);
+(FM%1OOOOO)/1OOOO);
LCD_Write_Com(0xc4);
+(FM%1OOOO/1OOO));
LCD_Write_Com(0xc5);
.'
LCD_Write_Com(0xc6);
+(FM%1OOO)/1OO);
LCD_Write_Com(0xc7);
LCD_Write_Com(0xc8);
+(FM%1O));
LCD_Write_Com(0xc9);
LCD_Write_Com(Oxca);
M'
LCD_Write_Com(Oxcb);
H'
LCD_Write_Com(Oxcc);
Z'
voidradio_write(void)
unsignedchari;
iic_start();
iic_write8bit(0xc0);
//TEA5767
if(!
iic_testack())
5;
iic_write8bit(radio_write_data[i]);
iic_ack();
iic_stop();
//由频率计算PLL
voidget_pll(void)
unsignedcharhlsi;
unsignedinttwpll=0;
hlsi=radio_write_data[2]&
0x10;
//HLSI位
if(hlsi)
pll=(unsigned
频率单
int)((float)((frequency+225)*4)/(float)32.768);
位:
k
else
int)((float)((frequency-225)*4)/(float)32.768);
//由PLL计算频率
voidget_frequency(void)
unsignedintnpll=0;
npll=pll;
hlsi二radio_write_data[2]&
0x10;
频率单位:
KHz
frequency二(unsigned
Iong)((float)(npll)*(float)8.192-225);
Iong)((float)(npll)*(float)8.192+225);
}voidradio_read(void)
unsignedchartemp_l,temp_h;
pll=0;
iic_write8bit(0xc1);
//TEA5767读地址
radio_read_data[i]二iic_read8bit();
temp」二radio_read_data[1];
temp_h二radio_read_data[0];
temp_h&
=0x3f;
pll二temp_h*256+temp_l;
get_frequency();
//手动设置频率,mode=1,+0.1MHz;
mode=0:
-0.1MHz,不用考虑
TEA5767用于搜台的相关位:
SM,SUD
voidsearch(bitmode)
radio_read();
if(mode)
frequency+=100;
if(frequency>
max_freq)
frequency二min_freq;
frequency-=100;
if(frequency<
min_freq)frequency二max_freq;
get_pll();
radio_write_data[0]=pll/256;
radio_write_data[1]=pll%256;
radio_write_data[2]=0x41;
radio_write_data[3]=0x11;
radio_write_data[4]=0x4