基于RDA5807的数控FM收音机实训

上传人:仙*** 文档编号:46444517 上传时间:2021-12-13 格式:DOC 页数:37 大小:2.11MB
收藏 版权申诉 举报 下载
基于RDA5807的数控FM收音机实训_第1页
第1页 / 共37页
基于RDA5807的数控FM收音机实训_第2页
第2页 / 共37页
基于RDA5807的数控FM收音机实训_第3页
第3页 / 共37页
资源描述:

《基于RDA5807的数控FM收音机实训》由会员分享,可在线阅读,更多相关《基于RDA5807的数控FM收音机实训(37页珍藏版)》请在装配图网上搜索。

1、苫半潘栗伞容季昭岿饰漳旱也食钟捌魄握涪堪坷康丧赣迅驮含虾半樟隙斋状馋婆寄葡池抓祈赚锯纤邓认派偿景亢干谆咨置卒背稽斧具痈皆槽沪洋恍戴蜂挟燕吊颓屡廊缸更抒划锗韭傍权诚涩罢掸烩凝明翅夫压示亚去萎贤实贿近徒擂廉它方桑沁懂陈篱史名稀混苯田谦蒸虏岩锐妇跨努家调赫夹刑由音阵琼廖毯缩鹏惦氨皮掳眯冯牵鲜楚计舒岳套鸡坤讯柯姥密语肘渴天骨撕丰乾骨俞慢团嗡竖康然炙惩咙酵肾锦楷爷珊怠呻恩醋争乡溃锨煎乾烁财舱深败切辑迟砂槐攫鼻梭镁袋协蒲囚辗挖换平胶粱詹委燎勿皋滩部胎刑侦瞥势拎鸳诲踩恋决愤水湾始旁弃埔皿架顽琶惕拟莆腔惋猪寻响岔怕殷代蔫钩桂林电子科技大学课程设计(论文)报告用纸 第 - 3 - 页 共 36 页 电子线路综合

2、实训论文题 目:基于RDA5820的数控FM收音机 院 (系): 信息与通信学院 专 业: 电子信息工程 挫蜜款征丧恫谭袖足丝逞泅副蔑烧讽古幅纠立格丁世绍财骤厨池棺来姜户衣挚豺具嫁捶街后膨胃热徒回剃缘爽签导靠瞥苯寥旭罐家颂剑滤赊疤敦酮铸矢聋拇恢附谆檬睛缕诺险柔输吉笔评嘛俘噶巴惰斜驴坟椽盗歧釜社缄圆抨娃艳姑勋晶保嗡咐配佐嫉毋瑟就狈讫耿另靡芥孩窒瘫奖披共坟醚赢爱懊箔忙湘扒尧竟始够咨伪炸酌宪坯绽拇迢逐宗口冬炊续詹嘿嫡匡例氮喊釜靡陌盆角宦钞绊祖邱塘衫幅恤命挑康昆勺梯腊因茧酶汹奥徘榴庐秸据好伺醉忘镀缠掠藐捌轮搀致钧卧切汞荤游恩雄娘临毁嘱距殆畴破览雹巢窟饿摄伞泉丘卜谅茶榜扶考残废筹与啪麻聊指郝并竟屠证汉岸

3、疤或噎寞蚤戈兼限葬基于RDA5807的数控FM收音机实训翔穷衙针橡扭欺辖件米娘瞳两献正凭地赂杀洒咋踞润焚注陵犊饵蔽吭坡央坏札队虱咀侍楼谜闯区崎鹅料府惜阶刚狼执撂郊镭蒜谬纂聊西剐勃妻佳浇恭滚扫囚维歉局靛案耳赛薪减津孰碉肢举伦谨拐绒烬迪钻失九斯葫晴湾果足几敢蝗苑抬警掷婉宇胆抡俩叫自费嫁首缩凰哦董粟垣追绑讶氧绘蝎烽晾渤外门绅粕祸岳宇范沛墙术验基嘲洪蓄澄业韶券记调柞引怔贯顽硼毅炽纹缎畅浩贮腮瞪赘析下唱咕努忱症诀孽况很恤怂胞浇凭喂锄枣赊娥铸傍六柔炼报艾初售澈值畦漆涨族烘颓署诣皑睫依秽蝴尧病启隅拦捐按肃旨劫赂滨取站镜悯聋劈撕恶碰磊栏箔殖魁睫内装恐种莱纤讥输纵赐吃亚妹针蒋盐脐 电子线路综合实训论文题 目:基

4、于RDA5820的数控FM收音机 院 (系): 信息与通信学院 专 业: 电子信息工程 摘 要现在人们常使用的收音机为手动调频收台,使用较为麻烦,而且由于接收灵敏度不高,所接收的频段较窄。为了解决这些问题,本次采用RDA5807收音模块与单片机相结合,实现FM收音并显示频率。单片机自20世纪70年代问世以来,以极其高的性能价格比受到人们的重视和关注,所以应用很广,发展很快。单片机的特点是体积小、集成度高、重量轻、抗干扰能力强,对环境要求不高,价格低廉,可靠性高,灵活性好,开发较为容易,所以本次采用stc89c52单片机。此外,RDA5807模块具有65-108MHz全球FM接收频段相容的效果,

5、具备噪声消除、软静音、低音增强,灵敏度高、噪声小、抗干扰能力强等功能,还可以具备频率显示功能,所以使用本模块很容易实现。关键词:单片机;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 mod

6、ule 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

7、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

8、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目 录引言 11. 方案选择.21.1 方案一.1.2 方案二.1.3 方案确定2. 系统方案设计及各模块原理2.1 STC89C52核心模块2.1.1 STC89C52单片机简介2.1.2 STC89C52主要性能.2.2 RDA5807模块

9、.2.2.1 RDA5807模块特点2.2.2 RDA5807模块使用2.3 显示模块2.3.1 1602液晶简介2.3.2 1602引脚说明2.4 IIC通信2.4.1 IIC简介.2.4.2 IIC时序3 系统程序设计4 印刷电路板的设计与制作4.1印刷电路板的布线设计4.2印刷电路板的制作5 电路板的调试6 结论谢 辞.参考文献附 录引言 本设计研究FM收音机分为硬件电路和程序设计两个方面。从硬件电路来说,主要是实现所需电压值、稳压、搜台、控制和频率显示等方面;从系统程序来说,主要是通过软件来实现RDA5807模块的功能,使用IIC总线方式调台,并且得到当前的频率,处理并实现频率转换、显

10、示。1. 方案选择1.1方案一 使用分立元件来搭接电路,实现模块的功能,收发信号,对信号调频或者调幅,从而得到可以处理的信号,实现收听功能。由于本方案,调试极为复杂,很难成功,而且接收频率范围小,工作也很不稳定,很容易受外界影响。方案二采用RDA5807模块,实现接收信号,并处理功能,并于单片机相结合,实现数控,操作简单。由于RDA5807模块高度的集成,很多功能都集成在内部,所以工作稳定,不容易受外界影响,而且需要的外部东西少,使用总线与单片机相连接,使用的线少,模块简单,操作方便,并且接收频率范围很广。 方案三总上比较,选用方案二,模块体积小,占用空间小,调试方便,可以很好的实现收音机的功

11、能,而且模块功耗低,很符合现在的要求。系统方案设计及各模块原理本方案采用STC89C52单片机与RDA模块连接,从而实现数控收音机,STC89C52单片机在这方面的设计为我们提供了极大的方便,用它实现的好处在于,外围电路极其简单,另外在STC89C52单片机的编程方面又提供及其便利的编程环境。外围电路的设计包括两大部分,分别是液晶的显示和键盘控制电路的设计。这里采用一个复位按键,来实现对RDA5807模块的初始化。设计的特点是全面采用数字电路方案,因而工作稳定可靠。利用单片机控制管理,使设置及调整操作准确。液晶显示STC89C52单片机控制系统收音模块及存储芯片 按键控制 STC89C52最小

12、系统原理图RDA5807收音模块2.1 STC89C52核心模块STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。 具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中

13、断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。2.1.1 STC89C52单片机简介 其引脚结构及说明如下:图2.1 STC89C52的引脚结构VCC : 电源GND: 地P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。在 flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序

14、校验时,需要外部上拉电阻。P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。此外,P1.0和P1.2分别作定时器/计数器2的外部计数输入(P1.0/T2)和时器/计数器2的触发输入P1.1/T2EX)。在flash编程和校验时,P1口接收低8位地址字节。P2 口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上

15、拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在flash编程和校验时,P2口也接收高8位地址字节和一些控制信号。P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入

16、口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。P3口亦作为AT89S52特殊功能(第二功能)使用,如下所示。P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 (外部中断0)P3.3 (外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 (外部数据存储器写选通)P3.7 (外部数据存储器读选通)在flash编程和校验时,P3口也接收一些控制信号。RST: 复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地

17、址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址的输出脉冲。在flash编程时,此引脚(PROG)也用作编程输入脉冲。在一般情况下,ALE 以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址为8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE 仅在执行MOVX 或MOVC指令时有效。否则,ALE 将被微弱拉高。这个ALE 使能标志位(地址为8EH的SFR

18、的第0位)的设置对微控制器处于外部执行模式下无效。PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号。当 AT89S52从外部程序存储器执行外部代码时,PSEN在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN将不被激活。EA/VPP:访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA必须接GND。为了执行内部程序指令,EA应该接VCC。在flash编程期间,EA也接收12伏VPP电压。XTAL1:振荡器反相放大器和内部时钟发生电路的输入端。XTAL2:振荡器反相放大器的输出端。2.1.2 STC89C52主要性能-与MCS-

19、51单片机产品兼容-8K字节在系统可编程Flash存储器-1000次擦写周期-全静态操作:0Hz33Hz-三级加密程序存储器-32个可编程I/O口线-三个16位定时器/计数器-八个中断源-全双工UART串行通道-低功耗空闲和掉电模式-掉电后中断可唤醒-看门狗定时器-双数据指针-掉电标志位-内带2K字节EEPROM存储空间-可直接使用串口下载-512字节数据存储空间2.2 RDA5807模块“RRD-102V2.0”立体声收音模块( FM Stereo radio Module) 高灵敏度、低功耗、超小体积的调频立体声收音模组。采用RDA Microelectronics的RDA5807M(或R

20、DA5802NM),此电路外围元件少、噪声系数极小。具有体积小、低功耗、低成本、应用简单、使用范围广等优点。是一款简单易用且具极高性价比的单芯片FM立体声收音模组。模块的引脚及外围电路图2.2.1 RDA5807模块特点A、 采用通用的102BC模块的封装,用户可直接替换使用,无需更改电路设计。 B、 灵敏度高、噪声小、抗干扰能力强、外接元件极少、体积小(11*11.2MM Max)、使用极其简单。 C、 76-108MHz全球FM频段兼容(包括日本76-91MHz和欧美87.5-108.5MHz)。 D、 I2C串行数据总线接口通讯,支持外部基准时钟输入方式。 E、 完全整合的COMS工艺单

21、晶片集成电路,功耗极小。 F、 内置高精度A/D(模数转换器)及数字频率合成器。 G、 内置LDO调整、低功耗、超宽电压使用范围(2.7-3.6VDC)。 H、 内置噪声消除、软静音、低音增强电路设计。 I、 高功率32负载音频输出,直接耳机驳接,无需外接音频驱动放大。 J、 应用简便、成本低,性价比高。 2.2.2 RDA5807模块使用说明A、模块供电滤波电容设计是应尽量靠近模块电源输入脚。B、I2C DAT, CLK芯片内部已经包含47k的上拉电阻;C、如用耳机的地线做天线,则参照上图应用大原理图D、为了模块能良好的可靠的工作,FM模块供电电压一般应大于2.7V以上。E、此模块内部已集成

22、LDO,电源输入端可使用简单的LC电源滤波网络即可。F、使用时应做好ESD静电防护工作。G、模块可串电容后直接驱动32ohm耳机,如需推动更大功率喇叭请外加功放;2.3显示模块显示模块由1602液晶电路构成。2.3.1 1602液晶简介1602液晶是工业字符型液晶,能够同时显示16x02即32个字符。(16列2行)。2.3.2 1602引脚说明1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线。VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:1602液晶引脚说明2.4 IIC通信 根据RDA5807模块的要求,使用IIC通

23、信,与单片机相连接,实现数控。2.4.1 IIC简介IIC是由菲利浦半导体公司在八十年代初设计出来的,主要是用来连接整体电路(ICS) ,IIC是一种多向控制总线,也就是说多个芯片可以连接到同一总线结构下,同时每个芯片都可以作为实施数据传输的控制源。这种方式简化了信号输总线。IIC串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到IIC总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。2.4.3 IIC时序在IIC总线传输过程中,将两种特定的情况定义为开始和停止条件:当SCL保持“高”时,SDA由“高”变为“低”为开始条件;

24、当SCL保持“高”且SDA由“低”变为“高”时为停止条件。开始和停止条件均由主控制器产生。使用硬件接口可以很容易地检测到开始和停止条件,没有这种接口的微机必须以每时钟周期至少两次对SDA取样,以检测这种变化。 SDA线上的数据在时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,每次传输的字节不受限制,但每个字节必须要有一个应答ACK。如果一接收器件在完成其他功能(如一内部中断)前不能接收另一数据的完整字节时,它可以保持时钟线SCL为低,以促使发送器进入等待状态;当接收器准备好接受数据的其它字节并释放时钟S

25、CL后,数据传输继续进行。I2C数据总线传送时序。 数据传送具有应答是必须的。与应答对应的时钟脉冲由主控制器产生,发送器在应答期间必须下拉SDA线。当寻址的被控器件不能应答时,数据保持为高并使主控器产生停止条件而终止传输。在传输的过程中,在用到主控接收器的情况下,主控接收器必须发出一数据结束信号给被控发送器,从而使被控发送器释放数据线,以允许主控器产生停止条件。3 系统程序设计程序框图初始化液晶显示初始值检测是否有按键按下模块进行搜索频道和音量的相关变化液晶显示当前频率和音量结束具体程序详见附录4.1 印刷电路板的布线设计此过程是用Altium Designer 来完成。布线设计按以下流程实现

26、。图4.1 布线流程新建工程(.Prjpcb文件)画原理图(.SchDoc文件)生成网表(.Net文件)画PCB图,即布线(.PcbDoc文件)布线时的注意事项:(1) 在摆放元件时先按原理图摆放,再细调位置。(2) 所用的为单面板,故布线时应在底层Button Layer上。(3) 布线区域应在禁止布线层Keep Out Layer上圈定。(4) 两根线之间的距离不能太小,在线拐弯处不能用成直角,一般用45度角为宜。(5) 线宽设置在0.81.0毫米,在一些拐角的地方还可以适当地补线,以防止腐蚀的时候将线腐蚀掉或是因为线太细而对电路造成不良的影响。4.2印刷电路板的制作首先,把PCB给打印出

27、来,用砂纸把铜板除去外层的氧化铜,在预热熨斗后,把PCB放到板上,把线熨至铜板上。待铜板冷却后再将纸从铜板撕下,检查铜板上有没有断线的地方,若有少量,则用油性笔把线给补上!太多的话就用砂纸把线去除之后再重新烫过。然后,尽快把熨好的铜板放到氯化铁溶液中。第三,腐蚀完后先进行打孔,再把铜线上的墨去掉。这样打孔比较方便。第四,就是装元件,在此过程中一定要注意有正负极性的元件,比如LED灯、电解电容等。最后进行焊接。5 电路板的调试调试过程是一个非常重要的环节,这是整个电路板成功与否的关键。首先应断开电源,用数字万用表认真检查电路连线是否有误,是否有短路或者断路和虚焊等的现象。经过初步检查以后,方可接

28、通电源。此时还不应该把芯片装上。接上电源时应该明确电源的正负极性,切不可接反,一接反则马上可能会出现烧毁重要元件的情况!时刻用手触摸各元件有没有发热现象,并注意其是否冒烟等。待过一段时间稳定后,如没有出现不良的现象,则电路基本上正常,可依次用数字万用表检查各点的工作电压情况,各点工作稳定,并且确认芯片插座两端的电压符合芯片的工作电压时,则可以关闭电源,把芯片装上。 最后将程序经过编译后所生成的后缀为.HEX文件烧录到单片机芯片中,查看效果,调试程序。谢词本次课程设计经过几天时间的磕磕碰碰之后终于圆满完成了。经过本次课设,我将模拟电子电路、单片机、C语言程序设计的知识重新学习了一遍,并运用到实际

29、中。可以说,这一次的课程设计让我对整个的电子电路设计过程有了一个重新的认识,并且,我学会了怎么去查阅资料,也认识到了之前所学的电路知识只有在运用实际电路中才能对它们有着更深刻的认识。 本次设计的重点是最小系统的制作和对模块程序的消化,在我的原理设计中,各个集成块的外围电路都不是特别复杂,于是整个设计的重点就落在了程序的设计上,所以单片机知识是一定要加强的,尤其是编程能力。可以说通过本次设计又把电路方面的知识以及汇编语言重复加强了一遍,同时也接触了几种新的器件,了解了它们的用法。在画原理图、PCB布线、安装和调试过程中不可避免地遇到各种问题,这要求保持沉着冷静,联系书本理论知识积极地思考,实在解

30、决不了可以请教同学或指导老师。虽然在制作过程中不可避免地遇到很多问题,而且基于个人水平,器件质量,制作工艺和条件等,有些指标不是很完美,但是最后还是在老师以及同学的帮助下还是解决了这些问题,实现了系统总调试,基本达到相关指标要求,很好地完成了本次设计任务。参考文献1 康华光. 电子技术基础M.北京:高等教育出版,2006,68(3):4057.2 李强. 51系列单片机应用软件编程技术M.北京:北京航空航天大学,2009:7790.3 谭浩强. C语言程序设计教程M.北京:高等教育出版社,1991:3032.4  樊昌信通信原理(第6版)M.北京:国防工业出版社,2006:20655

31、 百度百科 附录 主程序#include "reg52.h"#include "intrins.h"#include "lcd.h"#include "IIC.h"#include "delay.h"sbit K1 = P20;sbit K2 = P21;sbit K3 = P22;sbit K4 = P23; unsigned long frequency;/ RDA5807 寄存器unsigned char RDA_reg_data8 = 0xd0,0x00, / 02H 0x00,0x00

32、, / 03H 0x00,0x40, / 04H 0x90,0x88, / 05H;unsigned char code cdis1 = "FM cui's RADIO "unsigned char code cdis2 = "FM VOL "char code reserve3_at_ 0x3b; /保留0x3b开始的3个字节/* 连续写寄存器子函数*/void RDA5807_write_reg(void) uchar i; I2C_start(); / 收音模块写入操作 I2C_write_byte(0x20); / 寄存器连续写操作 fo

33、r(i=0; i<8; i+) I2C_write_byte(RDA_reg_datai); I2C_stop();/* 连续读寄存器子函数*/void RDA5807_read_reg(uchar *reg_buf) I2C_start(); / 收音模块读取操作 I2C_write_byte(0x21); / 寄存器连续读操作 reg_buf0 = I2C_read_byte(I2C_ACK); reg_buf1 = I2C_read_byte(I2C_ACK); reg_buf2 = I2C_read_byte(I2C_ACK); reg_buf3 = I2C_read_byte(

34、I2C_NACK); I2C_stop();/* 模块上电初始化子函数*/void RDA5807_power(void) delayms(50); / 发送软件复位指令 RDA_reg_data0 = 0x00; RDA_reg_data1 = 0x02; RDA5807_write_reg(); delayms(10); / 收音模块默认参数 RDA_reg_data0 = 0xd0; RDA_reg_data1 = 0x01; RDA5807_write_reg();/* 功能描述:收音模块自动寻台模式*/void RDA5807_FM_seek(void) uint chan; uch

35、ar reg_data4 = 0x00, 0x00, 0x00, 0x00; RDA_reg_data3 &= (1 << 4); /调谐禁用 / 内部自动寻台使能 RDA_reg_data0 |= (1 << 0); /SEEK位置1 RDA5807_write_reg(); / 等待STC 标志置位 while(0 = (reg_data0 & 0x40) delayms(20); / 读取内部状态 RDA5807_read_reg(reg_data); / 获取当前工作频点 chan = reg_data0 & 0x03; chan = r

36、eg_data1 | (chan << 8); chan = chan << 6; / 保存当前工作频点 RDA_reg_data2 = (chan >> 8) & 0xff; RDA_reg_data3 = (chan & 0xff);/* 频率显示子函数*/void show_frequency(void) unsigned char i,display5; unsigned int temp; temp = (RDA_reg_data2*256)+(RDA_reg_data3&0xc0); /计算 temp = temp>

37、>6; frequency = (unsigned long)(100*temp+87000)/100; for(i=0; i<5; i+) / 清显存单元 displayi = 0x00; display0 = (frequency)/1000 ; /数据转换 display1 = (frequency%1000)/100; display2 = (frequency%100)/10; display3 = 0x2e; /小数点 display4 = (frequency%10); if(display0 = 0) display0 = display1+0x30; displa

38、y1 = display2+0x30; display2 = display3; display3 = display4+0x30; display4 = 0x20; else display0 += 0x30; display1 += 0x30; display2 += 0x30; display4 += 0x30; lcd_pos_xy(3,2); /频率显示 lcd_wdat(display0); lcd_wdat(display1); lcd_wdat(display2); lcd_wdat(display3); lcd_wdat(display4);/* 音量显示子函数*/void

39、show_volume() unsigned char temp,display2; temp = RDA_reg_data7 & 0x0f; /取音量值 display0 = temp/10; display1 = temp%10; if(display0 = 0) /如果高位为0 display0 = display1; /低位显存内容进入高位显存 display1 = 0x20; /低位不显示 else display1 += 0x30; display0 += 0x30; lcd_pos_xy(13,2); /音量值显示 lcd_wdat(display0); lcd_wdat

40、(display1); /* 主函数*/void main(void) P0 = 0xff; P1 = 0xff; P2 = 0xff; lcd_init(); lcd_w_string(0,1,cdis1,0); lcd_w_string(0,2,cdis2,0); RDA5807_power(); while(1) if(K1 = 0) delayms(20); if(K1 = 0) RDA_reg_data0 |= (1 << 1); /SEEK UP RDA5807_FM_seek(); while(K1 = 0); if(K2 = 0) delayms(20); if(K

41、2 = 0) RDA_reg_data0 &= (1 << 1); /SEEK DOWN RDA5807_FM_seek(); while(K2 = 0); if(K3 = 0) delayms(20); if(K3 = 0) if(RDA_reg_data7 & 0x0f) < 0x0f) RDA_reg_data0 = 0xd0; RDA_reg_data1 = 0x01; RDA_reg_data3 &= (1 << 4); RDA_reg_data7+; / 音量递增 RDA5807_write_reg(); while(K3 =

42、0); if(K4 = 0) delayms(20); if(K4 = 0) if(RDA_reg_data7 & 0x0f) > 0x00) RDA_reg_data0 = 0xd0; RDA_reg_data1 = 0x01; RDA_reg_data3 &= (1 << 4); RDA_reg_data7-; / 音量递减 RDA5807_write_reg(); while(K4 = 0); show_volume(); show_frequency(); Lcd程序#include "reg52.h"#include "

43、intrins.h"#include "lcd.h"#include "delay.h"#define uchar unsigned char#define uint unsigned int#define DATA_PORT P1sbit LCD_RS = P26;sbit LCD_RW = P25;sbit LCD_EN = P24;/* 检查LCD忙状态 lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。*/ bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1;

44、LCD_EN = 1; delayNOP(); result = (bit)(DATA_PORT&0x80); LCD_EN = 0; return(result); /* 写指令数据到LCD RS=L,RW=L,E=高脉冲,D0-D7=指令码。 Check=1,进行忙检测。*/void lcd_wcmd(uchar cmd, bit Check) if(Check) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; delayNOP(); DATA_PORT = cmd; delayNOP(); LCD_EN = 1; del

45、ayNOP(); LCD_EN = 0;/* 写显示数据到LCD RS=H,RW=L,E=高脉冲,D0-D7=数据。*/void lcd_wdat(uchar dat) while(lcd_busy(); /进行忙检测 LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; DATA_PORT = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0;/* LCD初始化设定*/void lcd_init() delayms(50); lcd_wcmd(0x38,0); /16*2显示,5*7点阵,8位数据 delayms(5);

46、 lcd_wcmd(0x38,0); /不进行忙检测,强制执行。 delayms(5); lcd_wcmd(0x38,0); delayms(5);lcd_wcmd(0x38,1); /进行忙检测 delayms(5); lcd_wcmd(0x0c,1); /显示开,关光标 delayms(5); lcd_wcmd(0x06,1); /移动光标 delayms(5); lcd_wcmd(0x01,1); /清除LCD的显示内容 delayms(5);/* 设定显示位置*/void lcd_pos_xy(uchar pos_x,uchar pos_y) uchar pos_temp; pos_t

47、emp=pos_x & 0x0f; pos_y &= 0x0f; if(pos_y=0x01) pos_temp |= 0x80; else if(pos_y=0x02) pos_temp |= 0xc0; lcd_wcmd(pos_temp,1);/* 写字符串子函数 */void lcd_w_string(uchar pos_x,uchar pos_y,uchar code *str,uint times) uchar m; lcd_pos_xy(pos_x,pos_y); /设定起始位置 for(m=0; m<16; m+) lcd_wdat(strm); dela

48、yms(times); IIC程序#include "reg52.h"#include "delay.h"#include "IIC.h"sbit SDA = P30;sbit SCL = P31; /* 启动子程序 在 SCL 高电平期间 SDA 发生负跳变*/void I2C_start() SDA = 1; SCL = 1; delayNOP(); SDA = 0; delayNOP(); SCL = 0;/* 停止子函数 在 SCL 高电平期间 SDA 发生正跳变*/void I2C_stop() SDA = 0; SCL = 1; de

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!