基于RDA5807的收音机课程设计说明书.doc
编号: 课程设计说明书(信息系统综合实训)题 目: 立体声调频收音机 院 (系): 信息与通信学院 专 业: 电子信息工程 学生姓名: 峰之使者 学 号: 指导教师: 2016年 1 月 8 日摘 要本系统为立体声调频收音机,设计采用RDA5807收音模块,与单片机相结合,使收音解调电路设计变的简单,实现FM收音并显示频率。我们通过矩阵键盘设定我们需要的频段,并设置音量大小,通过诺基亚5110液晶屏显示出来,并根据所显示接收信号的强度等级,判断收音所在地的信号强度。RDA5807模块具有65-108MHz全球FM接收频段相容的效果,具备噪声消除、软静音、低音增强、灵敏度高、噪声小、抗干扰能力强等功能,所以使用本模块很容易实现,且系统可靠稳定。关键词:单片机;RDA5807收音模块;FM收音;目录引言11 任务要求与设计的背景11.1 设计任务要求11.2 课题背景12 调频收音机的分析和设计思路12.1 系统设计原理12.2 系统框图分析和设计23 硬件设计23.1 单片机最小系统23.1.1 时钟电路23.1.2 复位电路33.2 RDA5807模块33.2.1 RDA5807模块管脚33.2.2 RDA5807模块特点43.2.3 RDA5807模块与单片机接口43.3原理图53.4 PCB图54 软件设计54.1 IIC通信54.2 IIC时序64.3软件流程图75 调试过程95.1 电路板制作95.2 硬件调试95.3 软件调试105.4 实物图116 总结11谢 辞13参考文献14附 录15引言随着科学技术的发展,调频收音机的应用十分广泛,尤其消费类占有相当的市场。从分离元件组成的收音机到由集成电路组成的收音机,调频收音机技术已达到十分成熟的地步。本次设计采用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所示,主要由单片机控制模块、键盘与显示模块、收音机解调模块、天线组成。其中,信号接收由单片机控制模块、收音机解调模块和天线实现,键盘与显示模块则用来实现人机交互的功能,通过外接的喇叭或者耳机可以接收到对应频道的信息。天线收音解调模块4x4矩阵键盘单片机5110液晶显示模块图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、上拉电容10f接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)、使用极其简单。 (3)、 76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108.5MHz)。 (4)、 I2C串行数据总线接口通讯,支持外部基准时钟输入方式。 (5)、 完全整合的COMS工艺单晶片集成电路,功耗极小。 (6)、 内置高精度A/D(模数转换器)及数字频率合成器。 (7)、 内置LDO调整、低功耗、超宽电压使用范围(2.7-3.6VDC)。 (8)、 内置噪声消除、软静音、低音增强电路设计。 (9)、 高功率32负载音频输出,直接耳机驳接,无需外接音频驱动放大。 3.2.3 RDA5807模块与单片机接口 RDA5807是以I2C协议为通信方式的芯片,通过CLK时钟总线和SDA数据总线与单片机相连,如图3.3所示。图3.4 RAD5807与单片机接口3.3原理图本原理图是实现一个收音功能的电路,通过天线接收广播,并利用RDA5807收音模块,解调出音频信号,通过耳机播放出来,如图3.5所示。图3.5系统原理图3.4 PCB图利用软件DXP,将原理图导入进行制作PCB图,通过白色线的指引,把各个部分的电路连接起来,如图3.6所示。图3.6 PCB图4 软件设计4.1 IIC通信 IIC是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化了信号输总线。 IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。 4.2 IIC时序在IIC总线传输过程中,将两种特定的情况定义为开始和停止条件:当SCL保持“高”时,SDA由“高”变为“低”为开始条件;当SCL保持“高”且SDA由“低”变为“高”时为停止条件。开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。 SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟SCL后,数据传输继续进行。I2C数据总线传送时序。 数据传送具有应答是必须的。与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产生停止条件。图4.1为RDA5807寄存器写时序,图4.2为RDA5807寄存器读时序。图4.1 I2C写时序图4.2 I2C读时序4.3软件流程图在应用系统中,系统软件的设计是建立在具体硬件电路基础之上,根据系统功能要求可靠地实现系统的各种功能。好的软件设计能够充分发挥微控制器的运算和逻辑控制功能,从而提高仪器的精度和使用的方便性。先初始化接收频率,并实现对频率和音量步进的控制。处理用户由键盘键入的频率值和音量值,判断是否超出范围,生成频率和音量控制字,经I2C方式送入解调模块并改写寄存器数据,设置用户所需的接收频段和音量,并通过程序实现频率、音量和信号强度的显示,程序流程图如图4.3所示。开始RDA5807初始化5110液晶初始化键盘扫描改写当前频率、音量显示当前频率、音量结束图4.3 总程序流程图根据图4.3的总程序流程图。程序从main函数开始,先对LCD5110液晶屏进行初始化,主要对液晶屏进行忙或不忙检测,当液晶屏忙时,程序等待中;当液晶屏不忙时,程序继续。再对LCD清屏,为显示作准备。再显示我们需要的信息。最后初始设置频率和音量,初始化程序如下:LCD_init(); /lcd初始化LCD_clear(); /清屏xianshi(); /显示初始化RDA_Init(); /RDA5807初始化Freq_Set(8830); /频率初始设置为88.30MHZVol_Set(10); /音量初始设置为10矩阵键盘扫描程序,当按键按下时,程序执行对应功能;当键盘没有按下时,程序结束且这个过程不断循环。键盘扫描程序如下:keyscan();/键盘不断扫描当键1被按下时,频率值加100KHZRXFreq+=10; /频率加,步进100KHZFreq_Set(RXFreq); /频率设置当键2被按下时,频率值减100KHZRXFreq-=10; /频率减,步进100KHZFreq_Set(RXFreq); /频率设置当键3被按下时,音量值加1Vol+=1; /音量加Vol_Set(Vol); /音量设置 015当键4被按下时,音量值减1Vol-=1; /音量减Vol_Set(Vol); /音量设置 015当键5被按下时,设置静音成功;当键5再次按下时静音取消Mute_Set(mute);/设置静音mute+;键盘不断扫描时,也不断的显示,分别对频率、音量、信号强度和静音标志进行显示,显示程序如下:display_2(RXFreq); /显示频率display_1(Vol); /显示音量display_3(Rssi_Get(); /显示信号强度display_4(mute); /显示是否静音,1为否,0为是以上步骤不断的循环。5 调试过程5.1 电路板制作画图:根据原理图画PCB图,画封装。打印PCB:通过转印机把PCB转印到电路板上。腐蚀:把电路板放进腐蚀液里腐蚀掉没有被保护的铜。钻孔:根据洞口大小选择合适的钻针钻孔。清洗:把导线表面的油墨打磨清洗干净。涂松香:把松香和天那水的混合液涂在打磨清洗后的板子上,防止铜线被氧化和有助于焊接。插器件,焊接:等松香干了,插元器件,并且焊接好。5.2 硬件调试刚开始调试的时候,我是根据一个文档上写的,耳机接口的公共端可以用作天线,并通过一个磁珠与地隔开,当时一个劲的怀疑软件问题,没有认真检查硬件,经过仔细查阅资料,了解到耳机接口的公共端为地,所以不能用作天线。解决;天线端与耳机公共端断路,耳机公共端直接接地。如图5.1所示。图5.1解决后电路还有一个问题,芯片RDA5807的输出口有两个声道,之前我是用两个磁珠相连,因为磁珠是电感,具有隔交流信号的作用,音频信号为交流信号,磁珠滤除掉了音频信号,所以耳机端不可能接收到音频信号,解决:移除两个磁珠,用导线把两端连接起来。如图5.3所示红色框原为两个磁珠,现在为两导线相连. 如图5.2所示。图5.2解决后电路5.3 软件调试软件遇到的主要问题是RDA5807的I2C协议通信的时序问题,I2C协议通过时钟总线CLK和数据总线SDA与单片机相连,我们所用的单片机没有I2C接口,给我们造成了很大的不便,我们是根据I2C时序,通过拉低或拉高总线和延时函数模拟I2C。在写I2C读一个字节的数据时,数据只能读出16位数据的高8位,而不能读出数据的低8位,。解决:在读数据前,将SDA总线拉高,因为51单片机讲引脚置高可设为输入引脚,即可读出数据。部分程序如下: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();else IIC_Ack(); return receive; 5.4 实物图如图5.3所示,调试出来的电路由矩阵键盘、诺基亚5110液晶屏、RDA5807模块组成。可以显示接收频率、音量、信号强度,如图5.3所示。图5.3无线发射控制电路6 总结 本次信息系统综合实训,我用了两个星期,在第一个星期我查阅关于收音机的资料和学习一些单片机的基础,第二个星期我做板并调试程序,这两星期可以说是充实,紧张而又愉快的。在这两个星期的实训中,我学到了很多东西,不管是在知识架构上,还是在动手动脑能力上都起着潜移默化的影响。刚开始做收音机,脑袋里面没有一点头绪,通过几天的查阅资料和班里面的同学交流,了解到了FM是如今的一种收音机常用的调制解调方式,这也是我本次实训的芯片RDA5807里面的调制解调方式。硬件做出来后,调试软件遇到了不少的问题,刚开始把5110液晶屏点亮,费了一段时间,通过查找网上一些关于5110液晶屏的驱动和参考别人的一些程序,终于可以在屏幕上随意读写数据,并且可以显示汉字。关于RDA5807的程序,我也是上网找了一堆资料,其实它的驱动程序有点难写,特别是I2C协议读写数据,但我们参考别人的程序,对照时序图,可以很快写好RDA5807的驱动程序,通过调用里面的子函数,设置所需的接收频段和音量。关于矩阵键盘的程序,按键扫描是单片机的一个基本的知识,不过矩阵键盘扫描比较困难,它是8个IO口控制16个键盘,在观看郭天祥的十天学会单片机后,对矩阵有了一定了解,最后能运用矩阵键盘实现对频率设置的功能。这次实训不仅巩固了以前所学过的知识,锻炼自己动手制作能力,更是让我深刻认识到我对理论知识所学欠缺,理论知识的重要性,这些我会在以后得学习总补习回来,做到理论与实践相结合,更好的提高自己的实际动手能力和独立思考的能力。谢 辞首先,感谢为我们安排了这次单片机设计实训。非常感谢学院领导和老师给我们提供硬件条件和在理论知识方面的帮助。还要感谢老师的授课和实训操作指导,在任务开始前,老师首先就全面的为我们讲注意事项,让我们在实训过程中少犯了不少错,节约了宝贵的时间。特别感谢老师,是她在整个实训过程中对我们严格要求,耐心指导,反复为我们讲解要点,给与我们极大的帮助以及鼓励,使得我最终完成实训。参考文献1 郭天祥.51单片机C语言教程:电子工业出版社,20082 李欧儒主编.短波单边带收发信机原理与调制.北京:人民邮电出版社,19853 董在望.陈雅琴,雷有华,肖华庭.通信电路原理.第二版.北京:高等教育出版社,20024 孙育才. MCS-51系列单片机及应用(第4版):东南大学出版社,20045 阎石. 数字电子技术基础(第5版):清华大学出版社,20056 谭浩强.C语言程序设计(第3版):清华大学出版社,20057 郑学坚、周斌. 微型计算机的原理及应用:清华大学出版社,20028 胡伟、季晓衡单片机c程序设计及应用实例:北京人民邮电出版社2003附 录#include <reg51.h>#include <string.h>#include <intrins.h>#include <lcd5110.h>#define uchar unsigned char#define uint unsigned int#define ulint unsigned long int#define lint long intunsigned int RXFreq=8980;/RDA 的寄存器地址#define RDA_R000X00 /读出16个位的ID =0X5800#define RDA_R020X02 /DHIZ15,DMUTE14静音,MONO13声道,BASS12重低音,SEEKUP9,SEEK8,SKMODE7,CLK_MODE6:4时钟源选择,SOFTRESET1软复位,ENABLE0电源使能#define RDA_R030X03 /CHAN15:6,TUNE4,BAND3:2,SPACE1:0 设置频率 带宽 步长#define RDA_R040X04 /STCIEN14,DE11,I2Senable6,#define RDA_R050X05 /INT_MODE15,SEEKTH14:8(设定自动搜索信号强度阀值),LNA_PORT_SEL7:6=0b10,LNA_ICSEL_BIT5:4,VOLUME3:0音量;#define RDA_R0A0X0A /STC14seek complete SF13seek fail readchan9:0当前频道#define RDA_R0B0X0B /RSSI15:9,FM TRUE8当前频道是一个节目台#define RDA_READ 0X23 /读RDA5807#define RDA_WRITE0X22 /写RDA5807sbit SDA=P01;/IIC接口sbit SCL=P00;uchar *table="0","1","2","3","4","5","6","7","8","9"uchar temp,key,Vol=8,mute=1;uint Diantai20=8830;void delay(uchar z)uchar i,j;for(i=z;i>0;i-)for(j=110;j>0;j-);/*-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;else SDA=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(); else IIC_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)/音量设置 015uint 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)/信号强度获取063uint temp=0;temp=ReadReg(0X0B); temp=(temp>>9)&0x7f; return temp; void Seekth_Set(uint rssi) /自动搜台信号阈值强度015 默认为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; else if(direction = 0)temp|= 0<<9;WriteReg(0X05,temp) ;void Freq_Set(uint freq)/频率设置 单位是:10KHz 650010800uint 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 short seek_channel(void) /半自动搜台uint 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 ; /获取当前频率return temp/10000; /返回搜到电台频率 单位是: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,0xd281); /晶振选择32.768Khz 向上搜索 重低音 立体声 SKMODE = 1搜索到边频时停止 WriteReg(RDA_R03,0x0000); /频率设为87MHz ,步进100Khz 频带为87M108MWriteReg(RDA_R04,0x0040); /基本配置WriteReg(RDA_R05,0X8882); /音量设置为vol=2 搜索阀值为8 FM_enable(1); /给芯片上电 /*显示初始化*/void xianshi() LCD_write_english_string(0,0,"Freq:000.00MHZ"); LCD_write_english_string(0,1,"Vol : "); LCD_write_english_string(0,2,"Rssi: ");