基于RDA5807的立体声调频收音机
RDA5807P,RDA5802E 模块
产品规格与操作产品名称收音模块产品型号 RDA5807P,RDA5802E 客人名称版本V1.0一、产品概述:KNS-203-B立体声收音模块(FM Stereo radio Module)是最新开发生产的一片高灵敏度、低功耗、超小体积的调频立体声收音模组。
采用RDA5807P,RDA5802E全数字CMOS工艺单晶片IC。
接收灵敏度高、中频选择性好、通用IIC总线控制、外围应用元件少、噪声系数低。
具有体积小、低功耗、低成本、应用简单、使用范围广等优点。
是一款简单易用且具极高性价比的单芯片FM 立体声收音模组。
二、应用范围:移动DVD、TV、MP3、MP4等内置式FM全频段无线接收模组。
工矿、企业、校园、小区、旅游区等公共场所立体声调频广播系统。
无线音响及无线立体声耳机功能。
GPS导航、电视播音系统等无线调频收音。
高档游戏机及无线音频电子玩具。
移动电话、手机、对讲系统、移动收音装置等立体声收音。
PDAS及Notebook PC等周边应用。
三、功能特点:采用通用的102B模块的封装,用户可直接替换使用,无需更改电路设计。
灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11MM Max)、使用极其简单。
64-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108MHz)。
2I C串行数据总线接口通讯,支持外部基准时钟输入方式。
完全整合的COMS工艺单晶片集成电路,功耗极小。
内置高精度A/D(模数转换器)及数字频率合成器。
内置LDO调整、低功耗、超宽电压使用范围(2.7-5.5VDC)。
内置噪声消除、软静音、低音增强电路设计。
高功率32Ω负载音频输出,直接耳机驳接,无需外接音频驱动放大。
应用简便、成本低,性价比高。
五、典型应用:A、引脚功能描述:B、应用电路:六、使用说明:此RDA5807P RDA5802E,FM收音模组直接兼容原采用PHILIPS NXP5767芯片的PL102BC-P模块,客户在使用时可直接替换即可,无需改动电路,但软件部分需做相应更改。
基于RDA5807的收音机
编号:课程设计说明书(信息系统综合实训)题目:立体声调频收音机院(系):信息与通信学院专业:电子信息工程学生姓名:峰之使者学号:指导教师:2016年 1 月 8 日摘要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。
我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。
RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。
关键词:单片机;RDA5807收音模块;FM收音;目录引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。
从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。
本次设计采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。
单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用STC89c52单片机。
此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能。
1 任务要求与设计的背景1.1 设计任务要求本论文的任务是根据调频收音机的特点和应用情况,结合新一代高性能芯片设计一种使用简单、性能优良的收音机。
整个系统以单片机STC89S52控制,RDA5807芯片为核心,配置相应的外设及接口电路。
接收频率可设置、输出音量可数控、显示信号强度和设置静音,用C语言开发,组成一个多功能的程控数字收音机。
rda5807收音机工作原理
rda5807收音机工作原理
RDA5807是一种集成电路芯片,主要用于FM收音机应用。
它采用了单芯片收音机解决方案,包括了FM调谐器、收音机频率锁定环路(PLL)、数字信号处理(DSP)等功能。
以下是RDA5807收音机的工作原理的基本概述:
1.FM调谐器:RDA5807内置了一个FM调谐器,负责接收广播
频道。
用户可以通过控制芯片的寄存器来设置所需的FM频率。
2.PLL(频率锁定环路):频率锁定环路用于确保FM调谐器锁定
在所需的频率上。
这是通过将数字控制信号传递给PLL来实现的。
3.天线输入:天线连接到芯片,用于接收无线电信号。
4.模拟前端:芯片内置了模拟前端,用于处理来自天线的模拟FM
信号。
这个阶段通常包括放大、混频和滤波等功能。
5.数字信号处理(DSP):芯片通过DSP处理模拟信号,进行解
调和去噪等数字信号处理操作,以提高音频质量。
6.数字音频输出:处理后的音频信号通过芯片的数字音频输出端
口传递给连接的音频放大器或扬声器。
7.控制接口:芯片提供了一个控制接口,通常使用I2C或SPI等
协议,用于与微控制器或其他控制设备进行通信,以调整频率、音量、搜索电台等功能。
8.电源管理:RDA5807通常还包括一些电源管理功能,以实现
低功耗操作,例如通过进入睡眠模式来减小功耗。
总体而言,RDA5807采用了集成的设计,将许多FM收音机所需的功能整合在一个芯片中,提供了一种方便、低成本的解决方案。
通过合适的控制,用户可以调谐到不同的FM频道,并享受收音机广播。
数字调频收音机
摘要现如今随着时代的发展,收音机已经遍布于家家户户,然而人们所使用的大多模拟调谐制式的,在收音效果上面还有许多的不足,为了使得收音效果更加,因而出现了数字调谐收音机。
而本次设计的数控调频收音机的收音电路主要是通过STC89C52单片机来控制频率的选择、声音的大小;收音电路内部所使用的芯片为RDA5807M,使得单片机与收音电路之间通过IIC通信协议进行通信的,故使得该数控收音机比一般模拟收音机在频率的选择和声音的控制上更为准确。
由于该收音机大部分都是由集成化电路所组成,因而减少了由于手工布线造成元器件间的相互干扰,使其具有噪音消除、低音增强、灵敏度高、噪声小、抗干扰能力强等优点;其收音范围为(76-108MHz),体积小巧,非常适合于随身携带。
关键词:数控收音机,调频,IIC通信协议AbstractNowadays, with the development of the timesthe radio has been spread all over each and every family. These people use most are analog tuning system and have many shortcomings. In order to make the sound sounds more good, a digital radio appears. Through the STC89C52 single-chip microcomputer he radio circuit NC FM radio is mainly controlled control the selection of frequency, the size of the sound. The radio circuit inside is the chip RDA5807M which can make the MCU and radio circuit through the IIC communication protocol, so that the NC radio is more accuratethan general analog radio in controlling the selection and the sound frequency. As the radio is mostly composed of integrated circuit, it can reduce the manual wiring causing mutual interference between the components which has the advantages of eliminating noise, bass boost, high sensitivity, low noise, strong anti-jamming ability and so on.The radio range is very wide(76-108MHz). It has small size so it is very suitable for carry on.Key words:Digital radio, FM,IIC目录第1章绪论 (1)1.1 数控收音机背景 (1)1.2 数控收音机的国内外发展状况 (2)1.3 主要设计内容和要求 (3)第2章设计方案对比与理论分析 (4)2.1 设计方案对比 (4)2.2 收音机系统原理 (5)2.3 系统架构 (6)2.4 系统各部分的理论分析 (7)2.4.1 单片机最小系统分析 (7)2.4.2 显示模块 (8)2.4.3 收音电路 (9)第3章收音电路设计 (10)3.1 收音电路 (10)3.1.1 收音电路原理 (10)3.1.2 收音电路模块化引脚分析 (10)3.2 收音模块应用电路设计 (11)第4章控制电路设计 (13)4.1 电路控制模块设计 (13)4.2 显示模块设计 (14)4.3 电源模块设计 (15)第5章软件设计 (16)5.1 IIC通信协议分析 (16)5.2 程序流程图 (18)5.2.1 主程序流程图 (18)5.2.2 收音电路流程图设计 (19)5.3 系统主程序 (20)第6章系统调试 (24)6.1 硬件调试 (24)6.2 软件调试 (25)6.3 结果分析 (26)结论 (27)参考文献 (28)致谢 (30)附录 (31)第1章绪论1.1 数控收音机背景1888年德国科学家赫兹,发现了无线电波的存在。
基于RDA5807P芯片的遥控收音机设计和制作
基于RDA5807P芯片的遥控收音机设计和制作
早期的数字FM处理芯片TEA5767由Philips公司开发并被广泛地使用,但该芯片需要外加音频放大电路才能驱动耳机。
鉴于此,国内锐迪科微电子公司独立开发了一颗具备高接收灵敏度的FM立体声数字芯片RDA5807P,具有自动搜台、重低音、静音、休眠、直接驱动耳机等优异的性能。
本文介绍用RDA5807P芯片设计和制作了一款带遥控功能的收音机。
1 收音机总体设计方案
收音机的总体设计框图如图1所示。
本收音机采用单节3.7 V、容量1500 mAh的锂电池作力电源,在使用寿命期内可以用手机充电器反复对它进行充电,使用非常方便。
采用低功耗的AVR单片机ATmega8L作为微控制器,负责处理和协调各模块电路的工作,ATmega8L的工作电压为2.7~5.5 V,片内有512字节的EEPROM,不用专门外接EEPROM芯片就可以将掉电前接收电台的频道和音量信息保存起来,重新开机后又可以恢复原来的信息。
调频收音机模块采用国产芯片RDA5807P加上少量的外围元件组成,由微控制器通过I2C总线接口对芯片内部寄存器进行写/读操作。
通过键盘或红外遥控发射器可以进行自动搜台、手动选台、音量调节、静音操作。
LCD用于显示当前收听电台的频率、音量等级等信息。
音频功率放大器放大当前收听电台的音频信号,驱动扬声器发出声音。
RDA5807m+IIC收音机51单片机C程序上课讲义
R D A5807m+I I C收音机51单片机C程序RDA5807m驱动程序 + IIC 程序/******************************************************************** ********************** 介绍 : RD5807M收音机程序供电3.3v 主控使用51单片机显示使用LCD1602** 作者 : 胖子** 时间: 2016-1-5** 地点:桂林电子科技大学********************************************************************* ********************/#include <reg51.h>#include <string.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ulint unsigned long int#define lint long intuchar code xian[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};uchar code hang[]={0xfe,0xfd,0xfb,0xf7}; //矩阵键盘扫描使用//RDA 的寄存器地址#define RDA_R00 0X00 //读出16个位的ID =0X5800#define RDA_R02 0X02 //DHIZ[15],DMUTE[14]静音,MONO[13]声道,BASS[12]重低音,SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4]时钟源选择,SOFTRESET[1]软复位,ENABLE[0]电源使能#define RDA_R03 0X03//CHAN[15:6],TUNE[4],BAND[3:2],SPACE[1:0] 设置频率带宽步长#define RDA_R04 0X04 //STCIEN[14],DE[11],I2Senable[6],#define RDA_R05 0X05 //INT_MODE[15],SEEKTH[14:8](设定自动搜索信号强度阀值),LNA_PORT_SEL[7:6]=0b10,LNA_ICSEL_BIT[5:4],VOLUME[3:0]音量;#define RDA_R0A 0X0A //STC[14]seek complete SF[13]seek fail readchan[9:0]当前频道#define RDA_R0B 0X0B //RSSI[15:9],FM TRUE[8]当前频道是一个节目台#define RDA_READ 0X23 //读RDA5807#define RDA_WRITE 0X22 //写RDA5807//IO操作函数sbit SDA=P2^1;sbit SCL=P2^0;sbit RW =P1^1;sbit RS=P1^0;sbit EN=P2^5;uchar code a[]="FM: . ";uchar code b[]="Vol: RSSI: ";uchar code shu[]="0123456789";uchar num ;void delayms(uint x) //延迟程序{uint i,j;for(i=x;i>0;i--)for(j=113;j>0;j--);}/*********************************************** 矩阵键盘程序********************************************************************/ uchar ScanKey() //矩阵键盘扫描返回值是当前按键数值如没按下则返回值为零{uint x,y;for(x=0;x<4;x++){uchar temp,gaowei;P3=hang[x]; //分行置零temp=P3&0xf0;if(temp!=0xf0){delayms(10);if(temp!=0xf0){gaowei=P3/16; //判断是第几列的按键按下,将数据装入高四位switch(gaowei){case 0xe:y=0; break;case 0xd:y=1; break;case 0xb:y=2; break;case 0x7:y=3; break;}while(temp!=0xf0){temp=P3&0xf0;}return xian[x][y];}}}return 0;}/******************************************************* LCD1602程序********************************************************************* ***/void write_com(unsigned char com){RS=0;P0=com;delayms(5);EN=1;delayms(5);EN=0;}void write_data(unsigned char date){RS=1;P0=date;delayms(5);EN=1;delayms(5);EN=0;}void init_1602(){P0=0xc0;RW =0;EN=0;write_com(0x38); //éè??16*2??ê?£?5*7μ??ó£?8??êy?Y?ú write_com(0x0c); //éè???a??ê?£?2???ê?1a±êwrite_com(0x06); //D′ò???×?·?oóμ??·?????ó1write_com(0x01); //??ê???á?£?êy?Y??????á?}void DisplayFrq(float Frq) //显示频率{uint F;F=Frq*10;write_com(0x80+3);write_data(shu[F/1000]);delayms(1);write_data(shu[F/100%10]);delayms(1);write_data(shu[F/10%10]);delayms(1);write_com(0x80+7);write_data(shu[F%10]);delayms(1);}void DisplayVol(uint Vol) //显示音量{write_com(0x80+0x40+4);write_data(shu[Vol/10]);delayms(1);write_data(shu[Vol%10]);delayms(1);}void Display_mute() //显示静音{write_com(0x80+0x40+4);write_data('x');delayms(1);write_data('x');delayms(1);}void Display_RSSI(uint RSSI) //显示信号强度{write_com(0x80+0x40+14);write_data(shu[RSSI/10]);delayms(1);write_data(shu[RSSI%10]);delayms(1);}/*----------------------------------------IIC通信程序---------------------------------------------------*/void IIC_delayms() //用于IIC延时{_nop_();_nop_();_nop_();_nop_();}void OpenIIC() //IIC启动信号{SDA=1;SCL=1;IIC_delayms();SDA=0;IIC_delayms();SCL=0;}void CloseIIC() //IIC停止信号{SCL=0;SDA=0;IIC_delayms();SCL=1;SDA=1;IIC_delayms();}uchar IIC_Wait_Ack(void) //IIC发送字节后等待从机发送响应信{uchar ucErrTime=0;SDA=1;IIC_delayms();SCL=1;IIC_delayms();while(SDA==1){ucErrTime++;if(ucErrTime>250){CloseIIC();return 1;}}SCL=0;return 0;}void IIC_Ack(void) //发送应答信号{SCL=0;SDA=0; //0±íê?ó|′eIIC_delayms();SCL=1;IIC_delayms();SCL=0;}void IIC_NAck(void) //IIC 非应答信号{SCL=0;SDA=1;IIC_delayms();SCL=1;IIC_delayms();SCL=0;}void IICsendByte(uchar txd) //IIC·写一个字节{uchar t;SCL=0;for(t=0;t<8;t++){if(((txd&0x80)>>7)==1)SDA=1;elseSDA=0;txd<<=1;IIC_delayms();SCL=1;IIC_delayms();SCL=0;IIC_delayms();}}uchar IICReadByte(unsigned char ack) //IIC读一个字节{unsigned char i,receive=0;SDA=1; //51单片机讲引脚置高可设为输入引脚 for(i=0;i<8;i++ ){SCL=0;IIC_delayms();SCL=1;receive<<=1;if(SDA==1)receive++;IIC_delayms();}if (!ack)IIC_NAck();elseIIC_Ack();return receive;}uint ReadReg(uchar regAddr) //芯片读寄存器{uint buf;OpenIIC();IICsendByte(RDA_WRITE); //发送芯片地址方向为写IIC_Wait_Ack();IICsendByte(regAddr); //发送寄存器地址IIC_Wait_Ack();OpenIIC();IICsendByte(RDA_READ); // 发送芯片地址方向为读IIC_Wait_Ack();buf = IICReadByte(1);buf = buf<<8;buf =buf|IICReadByte(0);CloseIIC();return buf;}void WriteReg(uchar regAddr,uint val) //芯片写寄存器{OpenIIC();IICsendByte(RDA_WRITE); //发送芯片地址方向为写IIC_Wait_Ack();IICsendByte(regAddr); //发送寄存器地址IIC_Wait_Ack();IICsendByte(val>>8);IIC_Wait_Ack();IICsendByte(val&0XFF);IIC_Wait_Ack();CloseIIC();}void Vol_Set(uchar vol) //音量设置 0~15{uint temp=0;temp=ReadReg(RDA_R05);temp&=0xfff0;WriteReg(0x05,vol|temp) ;}void Mute_Set(uchar mute) //静音设置 1为静音0为不静音{uint temp=0;temp=ReadReg(0X02);if(!mute)temp|=1<<14;else temp&=~(1<<14);WriteReg(0X02,temp) ;}void Bass_Set(uchar bass) //频带设置{uint temp=0;temp=ReadReg(0X02);if(bass)temp|=1<<12;else temp&=~(1<<12);WriteReg(0X02,temp) ;}uchar Rssi_Get(void) //信号强度获取0~63{uint temp=0;temp=ReadReg(0X0B);temp=(temp>>9)&0x7f;return temp;}void Seekth_Set(uint rssi) //自动搜台信号阈值强度0~15 默认为8 数值越低搜到的台越多{uint temp;rssi = rssi & 0xf;temp=ReadReg(0X05);temp&=~(0xf<<8);temp|= rssi<<8;WriteReg(0X05,temp) ;}void Seek_direction(uchar direction) //搜台方向 1向上搜索 0向下搜索{uint temp;temp=ReadReg(RDA_R02);temp&=~(1<<9);if(direction == 1)temp|= 1<<9;// if(direction == 0)// temp|= 0<<9;WriteReg(0X05,temp) ;}void Freq_Set(uint freq) //频率设置单位是:10KHz 6500~10800{uint temp;uchar spc=0,band=0;uint fbtm,chan;temp=ReadReg(0X03);temp&=0X001F;band=(temp>>2)&0x03;spc=temp&0x03;if(spc==0)spc=10;else if(spc==1)spc=20;else spc=5;if(band==0)fbtm=8700;else if(band==1||band==2)fbtm=7600;else{fbtm=ReadReg(0X53);fbtm*=10;}if(freq<fbtm)return;chan=(freq-fbtm)/spc;chan&=0X3FF;temp|=chan<<6;temp|=1<<4;WriteReg(RDA_R03,temp) ;delayms(20);// while((ReadReg(0X0B)&(1<<7))==0);}unsigned int seek_channel(void) //半自动搜台{unsigned long temp;temp=ReadReg(RDA_R02);temp |= (1<<8);WriteReg(RDA_R02,temp) ; //SEEK位置一使能自动搜台while( (ReadReg(RDA_R0A)&(1<<14)) == 0 ) // 等待STC位置一表示搜索完成{delayms(10); //?óê±10ms}temp = ((ReadReg(RDA_R0A)&0x3FF) * 100000 + 87000000)/10000 ; //获取当前频率return temp; //返回搜到电台频率单位是:10Khz}void FM_enable(uchar flag) //1 使能芯片 0 禁用芯片{uint temp;temp=ReadReg(RDA_R02);if(flag ==1 )temp |=1;if(flag == 0)temp &= ~0x1;WriteReg(RDA_R02,temp);}void RDA_Init(void) //RDA3?ê??ˉ{WriteReg(RDA_R02,0x0002); //软复位delayms(30);WriteReg(RDA_R02,0xd081); //?§??????32.768Khz ?òé????÷ ??μíò? á¢ì?éù SKMODE = 1???÷μ?±??μê±í£?1WriteReg(RDA_R03,0x0000); //?μ?êéè?a87MHz £?2???100Khz ?μ′??a87M~108MWriteReg(RDA_R04,0x0040); //?ù±?????WriteReg(RDA_R05,0X8882); //ò?á?éè???avol=2 ???÷·§?μ?a8FM_enable(1); //??D???é?μ?Seekth_Set(8); //自动搜台信号阈值强度0~15 默认为8 数值越低搜到的台越多}void display_1602(){write_com(0x80);for(num=0;num<34;num++){write_data(a[num]);delayms(5);}write_com(0x80+0x40);for(num=0;num<34;num++){write_data(b[num]);delayms(5);}}void main(){unsigned char Key_num=0,Vol=1,RSSI=0,mute=1;unsigned int RXFreq=8830,time=0;unsigned int Diantai[40]={8830};char Num=0,station=1;unsigned int test=7896;unsigned int temp=10;init_1602();display_1602();RDA_Init(); //RDA5807初始化Freq_Set(8830); //频率设置Vol_Set(2) ;DisplayFrq(88.3);DisplayVol(2); //显示音量while (1){time++;if(time>1000)Display_RSSI(Rssi_Get()); //显示信号强度Key_num=ScanKey();switch(Key_num){case 1: { if(RXFreq==8800)RXFreq=8800; //频率减else RXFreq-=10;Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);while(0!=ScanKey()); //按键释放break;}case 2:{ if(RXFreq==10800)RXFreq=10800;//频率加else RXFreq+=10;Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);while(0!=ScanKey()); //按键释放break;}case 5: { //声音减if(Vol==0)Vol=0;elseVol-=1;Vol_Set(Vol);DisplayVol(Vol); //显示音量while(0!=ScanKey()); //按键释放break;}case 6:{ if(Vol==15)Vol=15; //声音加else Vol+=1;Vol_Set(Vol);DisplayVol(Vol); //显示音量while(0!=ScanKey()); //按键释放break;}case 7:{ if(mute==1) //静音{Mute_Set(1);Display_mute(); //显示静音while(0!=ScanKey()); //按键释放mute=0;break;}if(mute==0){Mute_Set(0);DisplayVol(Vol); //取消静音显示音量mute=1;}while(0!=ScanKey());break;}case 9:{ //电台减但是必须先按9进行电台搜索while(0!=ScanKey()); //按键释放Seek_direction(0); //向下搜索RXFreq = seek_channel(); //搜索下一个频道Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);break;}case 10:{ //电台加但是必须先按11进行电台搜索while(0!=ScanKey()); //按键释放Seek_direction(1); //向上搜索RXFreq = seek_channel(); //搜索下一个频道Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);break;}default:break;}}}// case 9:{ //电台减但是必须先按11进行电台搜索// if(station==0)break;// if(Num>0)Num-=1;// else Num=station-1;// Freq_Set(Diantai[Num]);// DisplayFrq(Diantai[Num]/100.0);// RXFreq=Diantai[Num];// Display_now(1) ; //显示当前电台号// while(0!=ScanKey()); //按键释放// break;// }// case 10:{ if(station==0)break; //电台加但是必须先按11进行电台搜索// if(Num<(station-1))Num+=1;// else Num=0;// Freq_Set(Diantai[Num]);// DisplayFrq(Diantai[Num]/100.0);// RXFreq=Diantai[Num];// Display_now(Num) ; //显示当前电台号// while(0!=ScanKey()); //按键释放// break;// }//// case 11:{ //自动搜台并且存储按 9 或者 10 可以上下变换电台。
RDA5807M模块规格书
一、产品概述:“RRD-102V2.0”立体声收音模块(FM Stereo radio Module)高灵敏度、低功耗、超小体积的调频立体声收音模组。
采用RDA Microelectronics的RDA5807M(或RDA5802NM),此电路外围元件少、噪声系数极小。
具有体积小、低功耗、低成本、应用简单、使用范围广等优点。
是一款简单易用且具极高性价比的单芯片FM立体声收音模组。
二、应用范围:A: 移动DVD、TV、MP3、MP4等内置式FM全频段无线接收模组。
B:工矿、企业、校园、小区、旅游区等公共场所立体声调频广播系统。
C:无线音响及无线立体声耳机功能。
D:GPS导航、电视播音系统等无线调频收音。
E:高档游戏机及无线音频电子玩具。
F:移动电话、手机、对讲系统、移动收音装置等立体声收音。
G:PDAS及Notebook PC等周边应用。
三、功能特点:A、采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。
B、灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11.2MM Max)、使用极其简单。
C、76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108.5MHz)。
D、I2C串行数据总线接口通讯,支持外部基准时钟输入方式。
E、完全整合的COMS工艺单晶片集成电路,功耗极小。
F、内置高精度A/D(模数转换器)及数字频率合成器。
G、内置LDO调整、低功耗、超宽电压使用范围(2.7-3.6VDC)。
H、内置噪声消除、软静音、低音增强电路设计。
I、高功率32Ω负载音频输出,直接耳机驳接,无需外接音频驱动放大。
J、应用简便、成本低,性价比高。
基于rda的收音机
编号:课程设计说明书(信息系统综合实训)题目:立体声调频收音机院(系):信息与通信学院专业:电子信息工程学生姓名:峰之使者学号:指导教师:2016年 1 月8 日摘要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。
我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。
RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。
关键词:单片机;RDA5807收音模块;FM收音;目录引言 (1)1 任务要求与设计的背景 (1)1.1 设计任务要求 (1)1.2 课题背景 (1)2 调频收音机的分析和设计思路 (1)2.1 系统设计原理 (1)2.2 系统框图分析和设计 (2)3 硬件设计 (2)3.1 单片机最小系统 (2)3.1.1 时钟电路 (3)3.1.2 复位电路 (3)3.2 RDA5807模块 (3)3.2.1 RDA5807模块管脚 (3)3.2.2 RDA5807模块特点 (4)3.2.3 RDA5807模块与单片机接口 (4)3.3原理图 (5)3.4 PCB图 (5)4 软件设计 (5)4.1 IIC通信 (5)4.2 IIC时序 (5)4.3软件流程图 (6)5 调试过程 (9)5.1 电路板制作 (9)5.2 硬件调试 (9)5.3 软件调试 (10)5.4 实物图 (11)6 总结 (11)谢辞 (13)参考文献 (14)附录 (15)引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。
从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。
RDA5807M模块规格书
产品规格书SPECIFICATION FOR PRODUCT 客户CLIENT ————————————————品名RRD-102V2。
0(CPU为RDA5807M)PARTNAME ————————————————规格11.2X11.2X2。
0 SPECIFICATION ————————————————( Mode selectable)(IC RDA5807M)一、产品概述:“RRD-102V2.0”立体声收音模块(FM Stereo radio Module)高灵敏度、低功耗、超小体积的调频立体声收音模组。
采用RDA Microelectronics的RDA5807M(或RDA5802NM),此电路外围元件少、噪声系数极小。
具有体积小、低功耗、低成本、应用简单、使用范围广等优点。
是一款简单易用且具极高性价比的单芯片FM立体声收音模组。
二、应用范围:A: 移动DVD、TV、MP3、MP4等内置式FM全频段无线接收模组。
B:工矿、企业、校园、小区、旅游区等公共场所立体声调频广播系统。
C:无线音响及无线立体声耳机功能。
D:GPS导航、电视播音系统等无线调频收音。
E:高档游戏机及无线音频电子玩具。
F:移动电话、手机、对讲系统、移动收音装置等立体声收音。
G:PDAS及Notebook PC等周边应用。
三、功能特点:A、采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。
B、灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11.2MM Max)、使用极其简单。
C、76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108.5MHz)。
D、I2C串行数据总线接口通讯,支持外部基准时钟输入方式。
E、完全整合的COMS工艺单晶片集成电路,功耗极小。
F、内置高精度A/D(模数转换器)及数字频率合成器。
G、内置LDO调整、低功耗、超宽电压使用范围(2.7-3.6VDC)。
用msp430单片机和RDA5807实现收音机的原理图、代码
RDA5807的MSP430代码、原理图说明:这是我用MSP430G2553单片机实现RDA5807收音芯片实现自动搜台收音机功能的代码(附原理图)。
这个收音机有两个按键,一个用于向上搜台,另一个用于向下搜台。
用耳机做天线。
亲测能用,工作正常,在这里与大家分享。
目录MAIN.C (3)INITG2553.C (6)G2553I2C.C (8)G2553I2C.H (11)INITG2553.H (12)原理图 (13)MAIN.C#include<msp430.h>#include"InitG2553.H"#include"G2553I2C.H"/** main.c*/#define CHIP_ADDR_STD 0x11#define CHIP_ADDR_SQE 0x10#define REG02 0x02#define REG03 0x03#define REG0A 0x0A#define REG0B 0x0B#define R02_SEEK 0x0100#define R02_SEEKUP 0x0200#define R03_TUNE 0x0010#define R0A_STC 0x4000#define R0A_SF 0x2000void RDA5807_init();unsignedint RDA5807_seek();unsignedint RDA5807_readfreq();unsignedint RDA5807_readRSSI();int freq;int rssi;int main(void) {unsignedint i;volatileunsignedint R0a,R0b;WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer init_clk();init_I2C();init_IO();RDA5807_init();_BIS_SR(GIE);while(1);return 0;}// Port 1 interrupt service routine#pragma vector=PORT1_VECTOR__interruptvoid Port_1(void){unsignedint i;unsignedint reg02_temp;for(i=0; i<=60000; i++);for(i=0; i<=60000; i++);if(P1IFG & BIT4)//S2按下{P1IFG=0;if(P1IN & BIT4) return;//向上调台reg02_temp=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG02);reg02_temp |= R02_SEEKUP;WriteI2C_ADDR_WORD(CHIP_ADDR_STD, REG02, reg02_temp);freq=RDA5807_seek();rssi=RDA5807_readRSSI();return;}if(P1IFG & BIT5)//S3按下{P1IFG=0;if(P1IN & BIT5) return;//向下调台reg02_temp=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG02);reg02_temp &= ~R02_SEEKUP;WriteI2C_ADDR_WORD(CHIP_ADDR_STD, REG02, reg02_temp);freq=RDA5807_seek();rssi=RDA5807_readRSSI();return;}}void RDA5807_init(){unsignedint i;for(i=0; i<=60000; i++);for(i=0; i<=60000; i++);for(i=0; i<=60000; i++);for(i=0; i<=60000; i++);WriteI2C_ADDR_WORD(CHIP_ADDR_STD, 0x02, 0x0002);for(i=0; i<=60000; i++);WriteI2C_ADDR_WORD(CHIP_ADDR_STD, 0x02, 0xC201);for(i=0; i<=60000; i++);WriteI2C_ADDR_WORD(CHIP_ADDR_STD, 0x03, 0x0000);WriteI2C_ADDR_WORD(CHIP_ADDR_STD, 0x04, 0x0400);WriteI2C_ADDR_WORD(CHIP_ADDR_STD, 0x05, 0x86B0);RDA5807_seek();}unsignedint RDA5807_seek(){unsignedint i;unsignedint reg02_temp;unsignedint reg03_temp;unsignedint reg0a_temp;//清除调谐位reg03_temp=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG03);reg03_temp &= ~R03_TUNE;WriteI2C_ADDR_WORD(CHIP_ADDR_STD, REG03, reg03_temp);//置seek位reg02_temp=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG02);reg02_temp |= R02_SEEK;WriteI2C_ADDR_WORD(CHIP_ADDR_STD, REG02, reg02_temp);//开始搜台do{for(i=0; i<=60000; i++);reg0a_temp=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG0A);}while(!(reg0a_temp & R0A_STC));return RDA5807_readfreq();}unsignedint RDA5807_readfreq(){unsignedint freq;freq=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG0A);freq&= 0x03ff;freq = 8700+freq*10;return freq;}unsignedint RDA5807_readRSSI(){unsignedint rssi;rssi=ReadI2C_ADDR_WORD(CHIP_ADDR_STD, REG0B);rssi&= 0xfe00;rssi>>= 9;return rssi;}INITG2553.C/** InitG2553.c** Created on: 2014-6-23* Author: Huaqing* 修订于2015年4月5日*//** 适用于MSP430G2553的初始化代码*/#include<msp430.h>void init_clk(){if (CALBC1_16MHZ==0xFF) // If calibration constant erased{while(1); // do not load, trap CPU!!}DCOCTL = 0; // Select lowest DCOx and MODx settings BCSCTL1 = CALBC1_16MHZ; // Set DCODCOCTL = CALDCO_16MHZ;//DCO频率16MHz// BCSCTL2 |= DIVS_2;//将SMCLK4分频,4MHz}void init_TA(){TA0CTL=TASSEL_2+MC_1+TAIE;//TASSEL_2表示时钟源是SMCLK,MC_1表示UP模式,TAIE开中断TA0CCR0=800;//设定这个值是中断设为20kHzP1DIR |= BIT6;P1SEL |= BIT6;//将PWM从P1.6引出TA0CCTL1 = OUTMOD_7;TA0CCR1=200;TA1CTL=TASSEL_2+MC_1;//TASSEL_2表示时钟源是SMCLK,MC_1表示UP模式,TAIE开中断TA1CCR0=800;//设定这个值是中断设为20kHzP2DIR |= BIT1;P2SEL |= BIT1;//将PWM从P2.1引出TA1CCTL1 = OUTMOD_7;TA1CCR1=200;}void init_I2C(){P1SEL |= BIT6 + BIT7; // Assign I2C pins to USCI_B0P1SEL2|= BIT6 + BIT7; // Assign I2C pins to USCI_B0//初始化引脚功能,P1.6是SCL,P1.7是SDAUCB0CTL1 |= UCSWRST; // Enable SW resetUCB0CTL0 = UCMST + UCMODE_3 + UCSYNC; // I2C Master, synchronous mode UCB0CTL1 = UCSSEL_2 + UCSWRST; // Use SMCLK, keep SW resetUCB0BR0=160;UCB0BR1=0;//设定分频UCB0CTL1 &= ~UCSWRST; // Clear SW reset, resume operation }void init_IO(){P1DIR&=~(BIT3+BIT4+BIT5);//P1.345用作按键输入P1REN|=(BIT3+BIT4+BIT5);P1OUT|=(BIT3+BIT4+BIT5);//设定P1.345上拉P1IE|=(BIT3+BIT4+BIT5);//使能P1.345的中断P1IES|=(BIT3+BIT4+BIT5);//P1.345下降沿触发中断P1IFG = 0;P2DIR |= BIT1+BIT2;//test}G2553I2C.C/** i2c.c** Created on: 2014-6-28* Author: Huaqing* 修订于2015年4月5日*/#include<msp430.h>void WriteI2C1(int devaddr,unsignedchar data){UCB0CTL1|=UCTR;//发送模式UCB0I2CSA=devaddr;//地址UCB0CTL1|=UCTXSTT;//起始位while(!(IFG2 & UCB0TXIFG));//在发送中断产生后写缓存UCB0TXBUF=data;while(!(IFG2 & UCB0TXIFG));//在中断标志产生前不能发送停止位UCB0CTL1|=UCTXSTP;//发送停止位IFG2 &= ~UCB0TXIFG;//清除中断标志位}unsignedchar ReadI2C1(int devaddr){UCB0CTL1&=~UCTR;//接收模式UCB0I2CSA=devaddr;//地址UCB0CTL1|=UCTXSTT;while(UCB0CTL1 & UCTXSTT);UCB0CTL1|=UCTXSTP;//发送停止位while(!(IFG2 & UCB0RXIFG));IFG2 &= ~UCB0TXIFG;//中断标志位复位return UCB0RXBUF;}void WriteI2C_ADDR_BYTE(int addr,unsignedchar regaddr,unsignedchar data) {int n=2;UCB0CTL1|=UCTR;//发送模式UCB0I2CSA=addr;//地址UCB0CTL1|=UCTXSTT;//起始位while(n){if(IFG2 & UCB0TXIFG){if(n==2){UCB0TXBUF=regaddr;}if(n==1){UCB0TXBUF=data;while(!(IFG2 & UCB0TXIFG));//在中断标志产生前不能发送停止位UCB0CTL1|=UCTXSTP;//发送停止位IFG2 &= ~UCB0TXIFG;//清除中断标志位}n--;}}}void WriteI2C_ADDR_WORD(unsignedchar addr,unsignedchar regaddr,unsignedint data) {UCB0CTL1|=UCTR;//发送模式UCB0I2CSA=addr;//地址UCB0CTL1|=UCTXSTT;//起始位//发送寄存器地址while(!(IFG2 & UCB0TXIFG));//等待中断,中断标志位表示可以向UCB0TXBUF中写入数据IFG2 &= ~UCB0TXIFG;UCB0TXBUF=regaddr;//发送高字节while(!(IFG2 & UCB0TXIFG));//等待中断,中断标志位表示可以向UCB0TXBUF中写入数据IFG2 &= ~UCB0TXIFG;UCB0TXBUF=(data>>8);//发送低字节while(!(IFG2 & UCB0TXIFG));//等待中断,中断标志位表示可以向UCB0TXBUF中写入数据IFG2 &= ~UCB0TXIFG;UCB0TXBUF=(data & 0x00FF);//发送停止位while(!(IFG2 & UCB0TXIFG));//在中断标志产生前不能发送停止位UCB0CTL1|=UCTXSTP;//发送停止位IFG2 &= ~UCB0TXIFG;//清除中断标志位}void ReadI2C(int devaddr,unsignedchar regaddr, unsignedchar * dataarray, int n) {/* UCB0CTL1|=UCTR;//发送模式UCB0I2CSA=addr;//地址UCB0CTL1|=UCTXSTT;//起始位//先发送一个寄存器地址UCB0TXBUF=regaddr;while(!(IFG2 & UCB0TXIFG));//在中断标志产生前不能发送停止位UCB0CTL1|=UCTXSTP;//发送停止位IFG2 &= ~UCB0TXIFG;//清除中断标志位UCB0CTL1&=~UCTR;//接收模式UCB0CTL1|=UCTXSTT;while(UCB0CTL1 & UCTXSTT);UCB0CTL1|=UCTXSTP;//发送停止位while(!(IFG2 & UCB0RXIFG));IFG2 &= ~UCB0TXIFG;//中断标志位复位*/int iN=n;WriteI2C1(devaddr, regaddr);UCB0CTL1&=~UCTR;//接收模式UCB0I2CSA=devaddr;//地址UCB0CTL1|=UCTXSTT;//发送起始位、芯片地址while(n){if(n==1) UCB0CTL1|=UCTXSTP;//发送停止位while(!(IFG2 & UCB0RXIFG));dataarray[iN-n]=UCB0RXBUF;IFG2 &= ~UCB0TXIFG;n--;}}unsignedint ReadI2C_ADDR_WORD(unsignedchar devaddr,unsignedchar regaddr) {unsignedint i=0;UCB0CTL1|=UCTR;//发送模式UCB0I2CSA=devaddr;//地址UCB0CTL1|=UCTXSTT;//起始位//发送寄存器地址while(!(IFG2 & UCB0TXIFG));UCB0TXBUF=regaddr;//发送转接收while(!(IFG2 & UCB0TXIFG));//确保发送已经完成UCB0CTL1&=~UCTR;//接收模式IFG2 &= ~UCB0TXIFG;//清除中断标志位UCB0CTL1|=UCTXSTT;//发送起始位的同时还发送器件地址//接收高位while(!(IFG2 & UCB0RXIFG));IFG2 &= ~UCB0RXIFG;//中断标志位复位i |= UCB0RXBUF; i<<=8;UCB0CTL1 |= UCTXSTP;//接收低位while(!(IFG2 & UCB0RXIFG));IFG2 &= ~UCB0RXIFG;//中断标志位复位i |= UCB0RXBUF;while(UCB0CTL1 & UCTXSTP);//确保停止位发送return i;}#ifndef __G2553I2C_H#define __G2553I2C_Hvoid WriteI2C_ADDR_BYTE(int addr,unsignedchar regaddr,unsignedchar data);void ReadI2C(int devaddr,unsignedchar regaddr, unsignedchar * dataarray, int n); void WriteI2C1(int devaddr,unsignedchar data);unsignedchar ReadI2C1(int addr);void WriteI2C_ADDR_WORD(unsignedchar addr,unsignedchar regaddr,unsignedint data); unsignedint ReadI2C_ADDR_WORD(unsignedchar devaddr,unsignedchar regaddr);#endif#ifndef __INITG2553 #define __INITG2553 void init_clk(); void init_TA();void init_I2C(); void init_IO();#endif原理图。
RDA5807p收音芯片完整驱动程序
FM单芯片收音IC(RDA5807SP)与LCD型MCU 相结合,集成度高,外围少,基于DSP数字RF架构,彻底免生产调试。
极大地减少了人力,物力,提高生产效率,整体方案比传统PLL方案便宜百分之20以上,性价比高,FM方案成熟,已大批量投产。
本程序RDA5807p驱动程序,是企业级代码,完整规范,可以移植到任何51单片机甚至stm32,毫无压力!注意:此方案在iic总线上挂在多个器件,参考价值很高。
/**********************************I2C.C************************************/#include<string.h>#include <reg51.h>#include <intrins.h>#include "type.h"#include "utility.h"#include "debug.h"#include "I2C.h"#include "gpio.h"//SCL: GPIO_D[1]#define PORT_OUT_SCL GPIO_D_OUT#define PORT_IN_SCL GPIO_D_IN#define PORT_OE_SCL GPIO_D_OE#define MASK_BIT_SCL 0x02//SDA: GPIO_D[0]#define PORT_OUT_SDA GPIO_D_OUT#define PORT_IN_SDA GPIO_D_IN#define PORT_OE_SDA GPIO_D_OE#define MASK_BIT_SDA 0x01//#define SetInputSCL() ClrGpioRegBit(PORT_OE_SCL, MASK_BIT_SCL)#define SetOutputSCL() ClrGpioRegBit(PORT_OE_SCL, MASK_BIT_SCL)#define SetSCL() SetGpioRegBit(PORT_OUT_SCL, MASK_BIT_SCL)#define ClrSCL() ClrGpioRegBit(PORT_OUT_SCL, MASK_BIT_SCL)//#define GetSCL() (GetGpioReg(PORT_IN_SCL) & MASK_BIT_SCL)#define SetInputSDA() SetGpioRegBit(PORT_OE_SDA, MASK_BIT_SDA)#define SetOutputSDA() ClrGpioRegBit(PORT_OE_SDA, MASK_BIT_SDA)#define SetSDA() SetGpioRegBit(PORT_OUT_SDA, MASK_BIT_SDA)#define ClrSDA() ClrGpioRegBit(PORT_OUT_SDA, MASK_BIT_SDA)#define GetSDA() (GetGpioReg(PORT_IN_SDA) & MASK_BIT_SDA)#define KtIICDelay() //WaitUs(2)// send START signal.VOID I2C_Start(){SetSDA();SetSCL();SetOutputSCL();SetOutputSDA();SetSDA();SetSCL();KtIICDelay();ClrSDA();ClrSCL();}// send STOP signal.VOID I2C_Stop(){// DBG(("I2C_Stop()\n"));SetOutputSCL();SetOutputSDA();ClrSDA();KtIICDelay();SetSCL();SetSDA();SetInputSDA();}// send Acknowledgement(ACK or NACK) signal. VOID I2C_SendAck(){// DBG(("I2C_SendAck()\n"));ClrSDA();SetSCL();KtIICDelay();ClrSCL();}// send Acknowledgement(ACK or NACK) signal. VOID I2C_SendNoAck()SetSDA();SetSCL();KtIICDelay();ClrSCL();}// Check Ackowledge signal(ACK/NACK).BOOL I2C_ChkAck(){BOOL Ack;ClrSCL();SetInputSDA();SetSCL();KtIICDelay();Ack = !GetSDA();ClrSCL();return Ack;}// Send one byte via I2C(check ACK).BOOL I2C_WriteByte(BYTE Dat){BYTE i = 8;// DBG(("I2C_WriteByte(%-.2BX)\n", Dat));SetOutputSDA();ClrSCL();while(i--){if(Dat & 0x80) //MSB output first{SetSDA();}else{ClrSDA();}Dat <<= 1;SetSCL();KtIICDelay();ClrSCL();}return I2C_ChkAck();}// Receive one byte via I2C.BYTE I2C_ReadByte(){BYTE i = 8;BYTE Dat = 0;SetInputSDA();while(i--){Dat <<= 1;if(GetSDA()){Dat |= 0x01;}SetSCL();KtIICDelay();ClrSCL();}SetOutputSDA();return Dat;}BOOL I2C_WriteBytes(BYTE* Buf, BYTE Len) {while(Len--){if (!I2C_WriteByte(*(Buf++))){DBG(("write data err\n"));return FALSE;}}return TRUE;}// Read data via I2C.BOOL I2C_ReadBytes(BYTE* Buf, BYTE Len) {while(Len--){*(Buf++) = I2C_ReadByte();if(Len == 0){I2C_SendNoAck();}else{I2C_SendAck();}}return TRUE;}// Write data to eeprom from bufferBOOL I2C_WriteNByte(BYTE devAddr,WORD Addr, BYTE* Buf, BYTE Len) {#ifdef IIC_SENDADDRMACRO_ENBOOL acktemp = FALSE;acktemp = I2C_SendAddr(devAddr, Addr, IIC_WRITE);acktemp &= I2C_WriteBytes(Buf, Len);I2C_Stop();// DBG_APP(("I2C_WriteNByte,ACK: %bu\n",(BYTE)acktemp));return acktemp;#elseBYTE PageAddr = (((BYTE*)&Addr)[0] & 0x07) << 1;I2C_Start();if(!I2C_WriteByte(devAddr | PageAddr)){WaitMs(EEPROM_WRITE_TIME);I2C_Start();if(!I2C_WriteByte(devAddr | PageAddr)){I2C_Stop();return FALSE;}}if(I2C_WriteByte(((BYTE*)&Addr)[1])){if(I2C_WriteBytes(Buf, Len)){I2C_Stop();return TRUE;}}I2C_Stop();return FALSE;#endif}// Read data from eeprom.BOOL I2C_ReadNByte(BYTE devAddr,WORD Addr, BYTE* Buf, BYTE Len) {#ifdef IIC_SENDADDRMACRO_ENBOOL acktemp = FALSE;acktemp = I2C_SendAddr(devAddr,Addr,IIC_READ);acktemp &= I2C_ReadBytes(Buf, Len);I2C_Stop();return acktemp;#elseBYTE PageAddr = (((BYTE*)&Addr)[0] & 0x07) << 1;I2C_Start();if(!I2C_WriteByte(devAddr | PageAddr)){WaitMs(EEPROM_WRITE_TIME);I2C_Start();if(!I2C_WriteByte(devAddr | PageAddr)){I2C_Stop();return FALSE;}}if(I2C_WriteByte(((BYTE*)&Addr)[1])){I2C_Start();if(I2C_WriteByte(devAddr | 0x01 | PageAddr))if(I2C_ReadBytes(Buf, Len)){I2C_Stop();return TRUE;}}}I2C_Stop();return FALSE;#endif}// send address via IIC.#ifdef IIC_SENDADDRMACRO_ENBOOL I2C_SendAddr(unsigned char icAddr,unsigned int wAddr,unsigned char ucRW){I2C_Start();if (!I2C_WriteByte(icAddr)){WaitMs(EEPROM_WRITE_TIME); // Wairt for Programming-time.I2C_Start();if(!I2C_WriteByte(icAddr))// | PageAddr)){I2C_Stop();return FALSE;}}if(!I2C_WriteByte((unsigned char)wAddr)){I2C_Stop();return FALSE;}if (ucRW == IIC_READ){I2C_Start();if(!I2C_WriteByte(icAddr| IIC_READ))I2C_Stop();return FALSE;}}return TRUE;}#endif //I2C_SendAddr/********************************RDA5807P.c************************************/ #include "syscfg.h"#include "RDA5807P.h"#include "i2c.h"#include "radio_ctrl.h"#include "utility.h"#include "debug.h"#ifdef FUNC_RADIO_ENWORD CODE RDA5807P_RegMap[32] ={// 0x02,0x0401, //MUTE on //high impendance 327680x03,0x0000, //freq 0//band 875--1080//space 100k//turn off//turn on 0x00100x04,0x0400,0x05,0x86AF, //0x8AAF//SEEK threshold //VOL0x06,0x8000,0x07,0x5F1A,0x12,0xF000,0x13,0x7F0B,0x14,0x0071,0x15,0x42C0,0x1A,0x10C0,0x1C,0x6015,0x21,0x4580,0x24,0x0601,0x26,0x0D04,0x2C,0x3C3B,0x35,0x3877};BOOL RDA5807WriteReg(WORD addr, WORD dat){return I2C_WriteNByte(RDA5807_CHIP_ADDR,addr,(BYTE*)&dat,2);}WORD RDA5807ReadReg(BYTE Register_Address){WORD TempData;I2C_ReadNByte(RDA5807_CHIP_ADDR, Register_Address,(BYTE*)(&TempData),2);return TempData;}VOID RDA5807P_Init(){BYTE i;WORD temp;RDA5807WriteReg(0x02,0x0002);WaitMs(50);#if MACRADIO_XTAL_12MRDA5807WriteReg(0x02,0x0411);#elseRDA5807WriteReg(0x02,0x0001);WaitMs(650);#endiffor(i = 0;i < RDA5807_REG_LEN;){RDA5807WriteReg(*(RDA5807P_RegMap + i),*(RDA5807P_RegMap+1 + i));i += 2;}temp = ((gRadioCtrl.Freq -870) << 6) | 0x0010;RDA5807WriteReg(0x03,temp); //FREQ //tune//band//spaceWaitMs(40);}BOOL RDA5807P_ReadID(){WORD READID;DBG(("RDA5807P_ReadID()\n"));if(!RDA5807WriteReg(0x02,0x0002))//reset{DBG(("RDA5807P_ReadID() FALSE!\n"));return FALSE;}WaitMs(300);READID = RDA5807ReadReg(0x0E);DBG(("readID:%X\n",READID));if(READID == 0x5804){DBG(("FM_ReadID,RDA5807P!\n"));return TRUE;}return FALSE;}VOID RDA5807P_Mute(BOOL MuteFg){WORD temp;temp = RDA5807ReadReg(0x02);if(MuteFg){temp &= 0xBFFF; //mute on}else{temp |= 0x4000; // mute oFF}RDA5807WriteReg(0x02,temp);}VOID RDA5807P_PowerDownDis(){RDA5807WriteReg(0x02, (RDA5807ReadReg(0x02) | 0xC000)); }VOID RDA5807P_PowerDownEn(){RDA5807WriteReg(0x02, (RDA5807ReadReg(0x02) & 0x3FFF));}VOID RDA5807P_FreqSet(){WORD Freq;WORD temp;Freq = gRadioCtrl.Freq;RDA5807P_Mute(TRUE); //if((Freq < 875) || (Freq > 1080)){Freq = 875;}temp = ((Freq -870) << 6) | 0x0010;RDA5807WriteReg(0x03,temp); //FREQ //tune//band//space }BYTE RDA5807P_SeekResultGet(){WORD readData0B;readData0B = RDA5807ReadReg(0x0B);if(readData0B & 0x0080) //ready{if(readData0B & 0x0100){return RADIO_SEEK_VALIDSTATION;}return RADIO_SEEK_STC;}return RADIO_SEEK_FALSE;}#endif数字存台,用at24c02芯片即可,驱动代码如下:#include<string.h>#include <reg51.h>#include <intrins.h>#include "type.h"#include "utility.h"#include "debug.h"#include "i2c.h"#include "24Cxx.h"#define EEPROM_WRITE_TIME 10 //10ms#define EEPROM_PAGE_SIZE 8 //8 bytes/page#if 1// Read data to buffer from eepromBOOL EEPROM_ReadBytes(BYTE Addr, BYTE* Buf, BYTE Len){#ifdef IIC_SENDADDRMACRO_ENreturn I2C_ReadNByte(EEPROM_WRITE_ADDR,((WORD)Addr),((BYTE*)Buf),(BYTE)Len); #else //!IIC_SENDADDRMACRO_ENI2C_Start();if(!I2C_WriteByte(EEPROM_WRITE_ADDR)){WaitMs(EEPROM_WRITE_TIME);I2C_Start();if(!I2C_WriteByte(EEPROM_WRITE_ADDR)){I2C_Stop();return FALSE;}}if(I2C_WriteByte(Addr)){I2C_Start();if(I2C_WriteByte(EEPROM_READ_ADDR)){if(I2C_ReadBytes(Buf, Len)){I2C_Stop();return TRUE;}}}I2C_Stop();return FALSE;#endif // !IIC_SENDADDRMACRO_EN}#endif // EEPROM_ReadBytes// Read one byte from eepromBYTE EEPROM_ReadByte(BYTE Addr){BYTE Temp = 0;EEPROM_ReadBytes(Addr, &Temp, 1);return Temp;}// Write data to eeprom from buffer#if 1BOOL EEPROM_WriteBytesInOnePage(BYTE Addr, BYTE* Buf, BYTE Len){#ifdef IIC_SENDADDRMACRO_ENreturn I2C_WriteNByte(EEPROM_WRITE_ADDR, ((WORD)Addr), ((BYTE*)Buf), ((BYTE)Len)); #elseI2C_Start();if(!I2C_WriteByte(EEPROM_WRITE_ADDR)){WaitMs(EEPROM_WRITE_TIME);I2C_Start();if(!I2C_WriteByte(EEPROM_WRITE_ADDR)){I2C_Stop();return FALSE;}}if(I2C_WriteByte(Addr)){if(I2C_WriteBytes(Buf, Len)){I2C_Stop();return TRUE;}}I2C_Stop();return FALSE;#endif}#endif // EEPROM_WriteBytesInOnePage// Write data to eeprom from bufferBOOL EEPROM_WriteBytes(BYTE Addr, BYTE* Buf, BYTE Len){while(Len){BYTE n = EEPROM_PAGE_SIZE - (Addr % EEPROM_PAGE_SIZE);if(n > Len){n = Len;}if(!EEPROM_WriteBytesInOnePage(Addr, Buf, n)){return FALSE;}Addr += n;Buf += n;Len -= n;}return TRUE;}// Write one byte to eepromBOOL EEPROM_WriteByte(BYTE Addr, BYTE Dat){return EEPROM_WriteBytes(Addr, &Dat, 1);}。
rda5807简介
11.数字音量控制;
12.线性模拟输出电压;
13.模块面积:6mm*6mm
5.强大的数字信号处理技术(DSP),实现自动频率控制和自动增益控制;
6.数字自适应噪声抑制
7.接收灵敏度高、音质出色、立体声效果优异;
8.支持重低音,可调式电台搜寻、柔软静音和混音等功能;
9.外部参考时钟输入32.768kHz,12Mhz,24Mhz,13Mhz,26Mhz,19.2Mhz,38.4Mhz,(500ppm);
rda5807m寄存器说明电子电路工程科技专业资料暂无评价0人阅读0次下载举报文档rda5807m寄存器说明电子电路工程科技专业资料
rda5807简介
RDA5807FP产品简介:
1.驱动能力强,可直接驱动耳机及放大器;
2.频率覆盖从65M-108M 的各国调频波段;
3.I2C总线控制模式;
4.强大的LOW-IF数字音频结构;
RDA5807m+IIC收音机51单片机C程序
RDA5807m驱动程序+ IIC 程序/****************************************************************************** ************ 介绍: RD5807M收音机程序供电3.3v 主控使用51单片机显示使用LCD1602** 作者: 胖子** 时间:2016-1-5** 地点:桂林电子科技大学******************************************************************************* **********/#include <reg51.h>#include <string.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define ulint unsigned long int#define lint long intuchar code xian[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};uchar code hang[]={0xfe,0xfd,0xfb,0xf7}; //矩阵键盘扫描使用//RDA 的寄存器地址#define RDA_R00 0X00 //读出16个位的ID =0X5800#define RDA_R02 0X02 //DHIZ[15],DMUTE[14]静音,MONO[13]声道,BASS[12]重低音,SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4]时钟源选择,SOFTRESET[1]软复位,ENABLE[0]电源使能#define RDA_R03 0X03 //CHAN[15:6],TUNE[4],BAND[3:2],SPACE[1:0] 设置频率带宽步长#define RDA_R04 0X04 //STCIEN[14],DE[11],I2Senable[6],#define RDA_R05 0X05 //INT_MODE[15],SEEKTH[14:8](设定自动搜索信号强度阀值),LNA_PORT_SEL[7:6]=0b10,LNA_ICSEL_BIT[5:4],VOLUME[3:0]音量;#define RDA_R0A 0X0A //STC[14]seek complete SF[13]seek fail readchan[9:0]当前频道#define RDA_R0B 0X0B //RSSI[15:9],FM TRUE[8]当前频道是一个节目台#define RDA_READ 0X23 //读RDA5807#define RDA_WRITE 0X22 //写RDA5807//IO操作函数sbit SDA=P2^1;sbit SCL=P2^0;sbit RW =P1^1;sbit RS=P1^0;sbit EN=P2^5;uchar code a[]="FM: . ";uchar code b[]="Vol: RSSI: ";uchar code shu[]="0123456789";uchar num ;void delayms(uint x) //延迟程序uint i,j;for(i=x;i>0;i--)for(j=113;j>0;j--);}/*********************************************** 矩阵键盘程序********************************************************************/uchar ScanKey() //矩阵键盘扫描返回值是当前按键数值如没按下则返回值为零{uint x,y;for(x=0;x<4;x++){uchar temp,gaowei;P3=hang[x]; //分行置零temp=P3&0xf0;if(temp!=0xf0){delayms(10);if(temp!=0xf0){gaowei=P3/16; //判断是第几列的按键按下,将数据装入高四位switch(gaowei){case 0xe:y=0; break;case 0xd:y=1; break;case 0xb:y=2; break;case 0x7:y=3; break;}while(temp!=0xf0){temp=P3&0xf0;}return xian[x][y];}}}return 0;}/******************************************************* LCD1602程序************************************************************************/void write_com(unsigned char com)RS=0;P0=com;delayms(5);EN=1;delayms(5);EN=0;}void write_data(unsigned char date){RS=1;P0=date;delayms(5);EN=1;delayms(5);EN=0;}void init_1602(){P0=0xc0;RW =0;EN=0;write_com(0x38); //éè??16*2??ê?£?5*7μ??ó£?8??êy?Y?úwrite_com(0x0c); //éèa??ê?£?2ê?1a±êwrite_com(0x06); //D′ò×?·?oóμ??·ó1write_com(0x01); //??êá?£?êy?Yá?}void DisplayFrq(float Frq) //显示频率{uint F;F=Frq*10;write_com(0x80+3);write_data(shu[F/1000]);delayms(1);write_data(shu[F/100%10]);delayms(1);write_data(shu[F/10%10]);delayms(1);write_com(0x80+7);write_data(shu[F%10]);delayms(1);}void DisplayVol(uint Vol) //显示音量{write_com(0x80+0x40+4);write_data(shu[V ol/10]);delayms(1);write_data(shu[V ol%10]);delayms(1);}void Display_mute() //显示静音{write_com(0x80+0x40+4);write_data('x');delayms(1);write_data('x');delayms(1);}void Display_RSSI(uint RSSI) //显示信号强度{write_com(0x80+0x40+14);write_data(shu[RSSI/10]);delayms(1);write_data(shu[RSSI%10]);delayms(1);}/*----------------------------------------IIC通信程序---------------------------------------------------*/ void IIC_delayms() //用于IIC延时{_nop_();_nop_();_nop_();_nop_();}void OpenIIC() //IIC启动信号{SDA=1;SCL=1;IIC_delayms();SDA=0;IIC_delayms();SCL=0;}void CloseIIC() //IIC停止信号{SCL=0;SDA=0;IIC_delayms();SCL=1;SDA=1;IIC_delayms();}uchar IIC_Wait_Ack(void) //IIC发送字节后等待从机发送响应信{uchar ucErrTime=0;SDA=1;IIC_delayms();SCL=1;IIC_delayms();while(SDA==1){ucErrTime++;if(ucErrTime>250){CloseIIC();return 1;}}SCL=0;return 0;}void IIC_Ack(void) //发送应答信号{SCL=0;SDA=0; //0±íê?ó|′eIIC_delayms();SCL=1;IIC_delayms();SCL=0;}void IIC_NAck(void) //IIC 非应答信号{SCL=0;SDA=1;IIC_delayms();SCL=1;IIC_delayms();SCL=0;}void IICsendByte(uchar txd) //IIC·写一个字节{uchar t;SCL=0;for(t=0;t<8;t++){if(((txd&0x80)>>7)==1)SDA=1;elseSDA=0;txd<<=1;IIC_delayms();SCL=1;IIC_delayms();SCL=0;IIC_delayms();}}uchar IICReadByte(unsigned char ack) //IIC读一个字节{unsigned char i,receive=0;SDA=1; //51单片机讲引脚置高可设为输入引脚for(i=0;i<8;i++ ){SCL=0;IIC_delayms();SCL=1;receive<<=1;if(SDA==1)receive++;IIC_delayms();}if (!ack)IIC_NAck();elseIIC_Ack();return receive;}uint ReadReg(uchar regAddr) //芯片读寄存器{uint buf;OpenIIC();IICsendByte(RDA_WRITE); //发送芯片地址方向为写IIC_Wait_Ack();IICsendByte(regAddr); //发送寄存器地址IIC_Wait_Ack();OpenIIC();IICsendByte(RDA_READ); // 发送芯片地址方向为读IIC_Wait_Ack();buf = IICReadByte(1);buf = buf<<8;buf =buf|IICReadByte(0);CloseIIC();return buf;}void WriteReg(uchar regAddr,uint val) //芯片写寄存器{OpenIIC();IICsendByte(RDA_WRITE); //发送芯片地址方向为写IIC_Wait_Ack();IICsendByte(regAddr); //发送寄存器地址IIC_Wait_Ack();IICsendByte(val>>8);IIC_Wait_Ack();IICsendByte(val&0XFF);IIC_Wait_Ack();CloseIIC();}void Vol_Set(uchar vol) //音量设置0~15{uint temp=0;temp=ReadReg(RDA_R05);temp&=0xfff0;WriteReg(0x05,vol|temp) ;}void Mute_Set(uchar mute) //静音设置1为静音0为不静音{uint temp=0;temp=ReadReg(0X02);if(!mute)temp|=1<<14;else temp&=~(1<<14);WriteReg(0X02,temp) ;}void Bass_Set(uchar bass) //频带设置{uint temp=0;temp=ReadReg(0X02);if(bass)temp|=1<<12;else temp&=~(1<<12);WriteReg(0X02,temp) ;}uchar Rssi_Get(void) //信号强度获取0~63{uint temp=0;temp=ReadReg(0X0B);temp=(temp>>9)&0x7f;return temp;}void Seekth_Set(uint rssi) //自动搜台信号阈值强度0~15 默认为8 数值越低搜到的台越多{uint temp;rssi = rssi & 0xf;temp=ReadReg(0X05);temp&=~(0xf<<8);temp|= rssi<<8;WriteReg(0X05,temp) ;}void Seek_direction(uchar direction) //搜台方向1向上搜索0向下搜索{uint temp;temp=ReadReg(RDA_R02);temp&=~(1<<9);if(direction == 1)temp|= 1<<9;// if(direction == 0)// temp|= 0<<9;WriteReg(0X05,temp) ;}void Freq_Set(uint freq) //频率设置单位是:10KHz 6500~10800{uint temp;uchar spc=0,band=0;uint fbtm,chan;temp=ReadReg(0X03);temp&=0X001F;band=(temp>>2)&0x03;spc=temp&0x03;if(spc==0)spc=10;else if(spc==1)spc=20;else spc=5;if(band==0)fbtm=8700;else if(band==1||band==2)fbtm=7600;else{fbtm=ReadReg(0X53);fbtm*=10;}if(freq<fbtm)return;chan=(freq-fbtm)/spc;chan&=0X3FF;temp|=chan<<6;temp|=1<<4;WriteReg(RDA_R03,temp) ;delayms(20);// while((ReadReg(0X0B)&(1<<7))==0);}unsigned int seek_channel(void) //半自动搜台{unsigned long temp;temp=ReadReg(RDA_R02);temp |= (1<<8);WriteReg(RDA_R02,temp) ; //SEEK位置一使能自动搜台while( (ReadReg(RDA_R0A)&(1<<14)) == 0 ) // 等待STC位置一表示搜索完成{delayms(10); //?óê±10ms}temp = ((ReadReg(RDA_R0A)&0x3FF) * 100000 + 87000000)/10000 ; //获取当前频率return temp; //返回搜到电台频率单位是:10Khz}void FM_enable(uchar flag) //1 使能芯片0 禁用芯片{uint temp;temp=ReadReg(RDA_R02);if(flag ==1 )temp |=1;if(flag == 0)temp &= ~0x1;WriteReg(RDA_R02,temp);}void RDA_Init(void) //RDA3?ê??ˉ{WriteReg(RDA_R02,0x0002); //软复位delayms(30);WriteReg(RDA_R02,0xd081); //?§32.768Khz ?òé÷??μíò? á¢ì?éùSKMODE = 1÷μ?±??μê±í£?1WriteReg(RDA_R03,0x0000); //?μ?êéè?a87MHz £?2100Khz ?μ′??a87M~108MWriteReg(RDA_R04,0x0040); //?ù±WriteReg(RDA_R05,0X8882); //ò?á?éèavol=2 ÷·§?μ?a8FM_enable(1); //??Dé?μ?Seekth_Set(8); //自动搜台信号阈值强度0~15 默认为8 数值越低搜到的台越多}void display_1602(){write_com(0x80);for(num=0;num<34;num++){write_data(a[num]);delayms(5);}write_com(0x80+0x40);for(num=0;num<34;num++){write_data(b[num]);delayms(5);}}void main(){unsigned char Key_num=0,V ol=1,RSSI=0,mute=1;unsigned int RXFreq=8830,time=0;unsigned int Diantai[40]={8830};char Num=0,station=1;unsigned int test=7896;unsigned int temp=10;init_1602();display_1602();RDA_Init(); //RDA5807初始化Freq_Set(8830); //频率设置V ol_Set(2) ;DisplayFrq(88.3);DisplayVol(2); //显示音量while (1){time++;if(time>1000)Display_RSSI(Rssi_Get()); //显示信号强度Key_num=ScanKey();switch(Key_num){case 1: { if(RXFreq==8800)RXFreq=8800; //频率减else RXFreq-=10;Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);while(0!=ScanKey()); //按键释放break;}case 2:{ if(RXFreq==10800)RXFreq=10800;//频率加else RXFreq+=10;DisplayFrq(RXFreq/100.0);while(0!=ScanKey()); //按键释放break;}case 5: { //声音减if(V ol==0)V ol=0;elseV ol-=1;Vol_Set(V ol);DisplayV ol(V ol); //显示音量while(0!=ScanKey()); //按键释放break;}case 6:{ if(V ol==15)V ol=15; //声音加else V ol+=1;V ol_Set(V ol);DisplayV ol(V ol); //显示音量while(0!=ScanKey()); //按键释放break;}case 7:{ if(mute==1) //静音{Mute_Set(1);Display_mute(); //显示静音while(0!=ScanKey()); //按键释放mute=0;break;}if(mute==0){Mute_Set(0);DisplayV ol(V ol); //取消静音显示音量mute=1;}while(0!=ScanKey());break;}case 9:{ //电台减但是必须先按9进行电台搜索while(0!=ScanKey()); //按键释放Seek_direction(0); //向下搜索RXFreq = seek_channel(); //搜索下一个频道DisplayFrq(RXFreq/100.0);break;}case 10:{ //电台加但是必须先按11进行电台搜索while(0!=ScanKey()); //按键释放Seek_direction(1); //向上搜索RXFreq = seek_channel(); //搜索下一个频道Freq_Set(RXFreq);DisplayFrq(RXFreq/100.0);break;}default:break;}}}// case 9:{ //电台减但是必须先按11进行电台搜索// if(station==0)break;// if(Num>0)Num-=1;// else Num=station-1;// Freq_Set(Diantai[Num]);// DisplayFrq(Diantai[Num]/100.0);// RXFreq=Diantai[Num];// Display_now(1) ; //显示当前电台号// while(0!=ScanKey()); //按键释放// break;// }// case 10:{ if(station==0)break; //电台加但是必须先按11进行电台搜索// if(Num<(station-1))Num+=1;// else Num=0;// Freq_Set(Diantai[Num]);// DisplayFrq(Diantai[Num]/100.0);// RXFreq=Diantai[Num];// Display_now(Num); //显示当前电台号// while(0!=ScanKey()); //按键释放// break;// }//// case 11:{ //自动搜台并且存储按9 或者10 可以上下变换电台。
基于RDA5807的收音机讲解
编号:课程设计说明书(信息系统综合实训)题目:立体声调频收音机院(系):信息与通信学院专业:电子信息工程学生姓名:峰之使者学号:指导教师:2016年 1 月8 日摘要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。
我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。
RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。
关键词:单片机;RDA5807收音模块;FM收音;目录引言 (1)1 任务要求与设计的背景 (1)1.1 设计任务要求 (1)1.2 课题背景 (1)2 调频收音机的分析和设计思路 (1)2.1 系统设计原理 (1)2.2 系统框图分析和设计 (2)3 硬件设计 (2)3.1 单片机最小系统 (2)3.1.1 时钟电路 (2)3.1.2 复位电路 (3)3.2 RDA5807模块 (3)3.2.1 RDA5807模块管脚 (3)3.2.2 RDA5807模块特点 (4)3.2.3 RDA5807模块与单片机接口 (4)3.3原理图 (5)3.4 PCB图 (5)4 软件设计 (5)4.1 IIC通信 (5)4.2 IIC时序 (6)4.3软件流程图 (7)5 调试过程 (9)5.1 电路板制作 (9)5.2 硬件调试 (9)5.3 软件调试 (10)5.4 实物图 (11)6 总结 (11)谢辞 (13)参考文献 (14)附录 (15)引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。
从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。
RDA5807的数控收音机教学提纲
R D A5807的数控收音机摘要现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。
为了解决这些问题,本次采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。
单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用stc89c52单片机。
此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强,灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能,所以使用本模块很容易实现。
目录引言 (1)1.方案选择 (2)1.1方案一…………………………………………………………..1.2方案二………………………………………………………….1.3方案确定………………………………………………………2.系统方案设计及各模块原理……………………………………2.1STC89C52核心模块………………………………………………2.1.1STC89C52单片机简介…………………………………………2.1.2STC89C52主要性能………………………………………….2.2RDA5807模块…………………………………………………….2.2.1RDA5807模块特点……………………………………………2.2.2RDA5807模块使用…………………………………………2.3显示模块……………………………………………………………2.3.11602液晶简介…………………………………………………2.3.21602引脚说明…………………………………………………2.4IIC通信…………………………………………………………2.4.1IIC简介……………………………………………………….2.4.2IIC时序………………………………………………………3系统程序设计……………………………………………………4印刷电路板的设计与制作………………………………………4.1印刷电路板的布线设计…………………………………………4.2印刷电路板的制作………………………………………………5 电路板的调试……………………………………………………6 结论………………………………………………………………谢辞……………………………………………………………….参考文献………………………………………………………………附录…………………………………………………………………引言本设计研究FM收音机分为硬件电路和程序设计两个方面。
基于RDA5807的数控FM收音机实训论文
电子线路综合实训论文题目:基于RDA5820的数控FM收音机院(系):信息与通信学院专业:电子信息工程摘要现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。
为了解决这些问题,本次采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。
单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用stc89c52单片机。
此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强,灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能,所以使用本模块很容易实现。
关键词:单片机;RDA5807;FM收音机AbstractNow people often use radio FM radio station manually, using the more cumbersome, and because the receiver sensitivity is not high, narrow band received. To solve these problems, this time using RDA5807 radio module and microcontroller combined to achieve FM radio and display frequency. SCM since the 1970s came to an extremely high cost people's attention and concern, it is very wide application, developed rapidly. SCM is characterized by small, highly integrated, light weight, strong anti-interference ability, less demanding on the environment, low cost, high reliability, flexibility, and development easier, so this uses stc89c52 microcontroller. In addition, RDA5807 module has 65-108MHz band FM receiver compatible global effect, with noise reduction, soft mute, bass boost, high sensitivity, low noise, strong anti-interference ability and other functions, can also have a frequency display, so the use of the modules can be easily achieved.Key words:SCM; RDA5807; FM Radio目录引言 (1)1.方案选择 (2)1.1方案一………………………………………………………….. 1.2方案二………………………………………………………….1.3方案确定………………………………………………………2.系统方案设计及各模块原理……………………………………2.1STC89C52核心模块………………………………………………2.1.1STC89C52单片机简介…………………………………………2.1.2STC89C52主要性能………………………………………….2.2RDA5807模块…………………………………………………….2.2.1RDA5807模块特点……………………………………………2.2.2RDA5807模块使用…………………………………………2.3显示模块……………………………………………………………2.3.11602液晶简介…………………………………………………2.3.21602引脚说明…………………………………………………2.4IIC通信…………………………………………………………2.4.1IIC简介……………………………………………………….2.4.2IIC时序………………………………………………………3系统程序设计……………………………………………………4印刷电路板的设计与制作………………………………………4.1印刷电路板的布线设计…………………………………………4.2印刷电路板的制作………………………………………………5 电路板的调试……………………………………………………6 结论………………………………………………………………谢辞………………………………………………………………. 参考文献………………………………………………………………附录…………………………………………………………………引言本设计研究FM收音机分为硬件电路和程序设计两个方面。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计说明书(信息系统综合实训)题目:立体声调频收音机毕业设计(论文)原创性声明和使用授权说明原创性声明本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。
尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。
对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。
作者签名:日期:指导教师签名:日期:使用授权说明本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。
作者签名:日期:学位论文原创性声明本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。
除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。
对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律后果由本人承担。
作者签名:日期:年月日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
涉密论文按学校规定处理。
作者签名:日期:年月日导师签名:日期:年月日注意事项1.设计(论文)的内容包括:1)封面(按教务处制定的标准封面格式制作)2)原创性声明3)中文摘要(300字左右)、关键词4)外文摘要、关键词5)目次页(附件不统一编入)6)论文主体部分:引言(或绪论)、正文、结论7)参考文献8)致谢9)附录(对论文支持必要时)2.论文字数要求:理工类设计(论文)正文字数不少于1万字(不包括图纸、程序清单等),文科类论文正文字数不少于1.2万字。
3.附件包括:任务书、开题报告、外文译文、译文原文(复印件)。
4.文字、图表要求:1)文字通顺,语言流畅,书写字迹工整,打印字体及大小符合要求,无错别字,不准请他人代写2)工程设计类题目的图纸,要求部分用尺规绘制,部分用计算机绘制,所有图纸应符合国家技术标准规范。
图表整洁,布局合理,文字注释必须使用工程字书写,不准用徒手画3)毕业论文须用A4单面打印,论文50页以上的双面打印4)图表应绘制于无格子的页面上5)软件工程类课题应有程序清单,并提供电子文档5.装订顺序1)设计(论文)2)附件:按照任务书、开题报告、外文译文、译文原文(复印件)次序装订教研室(或答辩小组)及教学系意见摘要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。
我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。
RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。
关键词:单片机;RDA5807收音模块;FM收音;目录引言 (1)1 任务要求与设计的背景 (1)1.1 设计任务要求 (1)1.2 课题背景 (1)2 调频收音机的分析和设计思路 (1)2.1 系统设计原理 (1)2.2 系统框图分析和设计 (2)3 硬件设计 (2)3.1 单片机最小系统 (2)3.1.1 时钟电路 (2)3.1.2 复位电路 (3)3.2 RDA5807模块 (3)3.2.1 RDA5807模块管脚 (4)3.2.2 RDA5807模块特点 (4)3.2.3 RDA5807模块与单片机接口 (5)3.3原理图 (5)3.4 PCB图 (5)4 软件设计 (6)4.1 IIC通信 (6)4.2 IIC时序 (6)4.3软件流程图 (7)5 调试过程 (9)5.1 电路板制作 (9)5.2 硬件调试 (9)5.3 软件调试 (10)5.4 实物图 (11)6 总结 (12)谢辞 (14)参考文献 (15)附录 (16)引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。
从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。
本次设计采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。
单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。
单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用STC89c52单片机。
此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能。
1 任务要求与设计的背景1.1 设计任务要求本论文的任务是根据调频收音机的特点和应用情况,结合新一代高性能芯片设计一种使用简单、性能优良的收音机。
整个系统以单片机STC89S52控制,RDA5807芯片为核心,配置相应的外设及接口电路。
接收频率可设置、输出音量可数控、显示信号强度和设置静音,用C语言开发,组成一个多功能的程控数字收音机。
1.2 课题背景随着科学技术的不断发展,新颖的调频收音机的不断出现,技术不断的提高,设计出来的收音机外型精致和小巧。
从分离元件到集成电路,这标志着收音机的内部电路简单。
用一个集成块就能完成所有的工作。
从早期的调幅收音机到现在的调频收音机,我们可以想象收音机的不断的改进和不断创新,使收音机的发展空间愈来愈大。
现在,出现了新一代高科技产品——数字调频收音机,功能强大,性能优良,设计精巧耐用。
2 调频收音机的分析和设计思路2.1 系统设计原理本文提出的采用RDA5807模块作为解调的核心器件的全数控调频收音机设计方案,根据接收频率可设置、输出音量可数控、显示信号强度和设置静音等要求,本设计外置一根天线,信号从天线进入RDA5807模块,因为内部有一放大器,所以不需要外加放大器,内部AD对信号进行采样,通过单片机的I/O口与RDA5807的IIC总线相连,经过程序控制进行对收音芯片内部的寄存器读写,改写这些寄存器,则可输出对应的频率和音量的信号。
控制电路采用4*4的矩阵键盘,输入的数字信息经STC89C52控制的诺基亚5110液晶屏显示。
2.2 系统框图分析和设计系统结构组成如图2.1所示,主要由单片机控制模块、键盘与显示模块、收音机解调模块、天线组成。
其中,信号接收由单片机控制模块、收音机解调模块和天线实现,键盘与显示模块则用来实现人机交互的功能,通过外接的喇叭或者耳机可以接收到对应频道的信息。
图2.1 收音机系统框图3 硬件设计3.1 单片机最小系统STC89C52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。
使用STC公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。
STC89C52具有以下标准功能:8k字节Flash、256字节RAM、32 位I/O 口线、看门狗定时器、2个数据指针、二个16 位定时器/计数器、一个6向量2级中断结构、全双工串行口、片内晶振及时钟电路。
另外,STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
一般单片机需外接一个时钟电路和一个复位电路,如图3.1和图3.2所示。
3.1.1 时钟电路图3.1 时钟电路XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。
内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。
晶振的频率可以在1MHz-24MHz内选择。
电容取30PF左右。
STC89C52中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别是该放大器的输入端和输出端。
这个放大器与作为反馈元件的片外石英晶体或者陶瓷谐振器一起构成自激振荡器。
片外石英晶体或者陶瓷谐振器及电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程序及温度稳定性,这里采用电容22pF,晶振采用12MHz。
3.1.2 复位电路STC89C52的外部复位电路有上电自动复位和手动按键复位。
上电复位电容充电来实现。
手动按键复位又分为按键电平复位和按键脉冲复位。
按键电平复位电路是在普通RC复位电路的基础上接一个有下拉电阻10K、上拉电容10μf接VCC,电源由开关接至复位脚(和上拉电容并联),上拉电容支路负责在“上电”瞬间实施复位;开关通过10K下拉电阻分压器,保证对单片机实施按键电平复位。
电路图如下图3.2所示:图3.2 复位电路3.2 RDA5807模块3.2.1 RDA5807模块管脚“RRD-102V2.0”立体声收音模块( FM Stereo radio Module)高灵敏度、低功耗、超小体积的调频立体声收音模组。
采用RDA Microelectronics的RDA5807M(或RDA5802NM),此电路外围元件少、噪声系数极小。
具有体积小、低功耗、低成本、应用简单、使用范围广等优点。
是一款简单易用且具极高性价比的单芯片FM立体声收音模组,管脚如图3.3所示,管脚功能如表3.1。
表3.1 管脚功能图3.3 RAD5807模块管脚示意图3.2.2 RDA5807模块特点(1)采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。
(2)、灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11.2MM Max)、使用极其简单。