RDA5807的數(shù)控收音機(jī)_第1頁
RDA5807的數(shù)控收音機(jī)_第2頁
RDA5807的數(shù)控收音機(jī)_第3頁
RDA5807的數(shù)控收音機(jī)_第4頁
RDA5807的數(shù)控收音機(jī)_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、現(xiàn)在人們常使用的收音機(jī)為手動(dòng)調(diào)頻收臺(tái),使用較為麻煩,而且由于接收靈敏度不高,所接收的頻段較窄。為了解決這些問題,本次采用RDA5807收音模塊與單片機(jī)相結(jié)合,實(shí)現(xiàn)FM收音并顯示頻率。單片機(jī)自20世紀(jì)70年代問世以來,以極其高的性能價(jià)格比受到人們的重視和關(guān)注,所以應(yīng)用很廣,發(fā)展很快。單片機(jī)的特點(diǎn)是體積小、集成度高、重量輕、抗干擾能力強(qiáng),對(duì)環(huán)境要求不高,價(jià)格低廉,可靠性高,靈活性好,開發(fā)較為容易,所以本次采用stc89c52單片機(jī)。此外,RDA5807模塊具有65-108MHz全球FM接收頻段相容的效果,具備噪聲消除、軟靜音、低音增強(qiáng),靈敏度高、噪聲小、抗干擾能力強(qiáng)等功能,還可以具備頻率顯示功能,

2、所以使用本模塊很容易實(shí)現(xiàn)。目 錄引言 11. 方案選擇.21.1 方案一.1.2 方案二.1.3 方案確定2. 系統(tǒng)方案設(shè)計(jì)及各模塊原理2.1 STC89C52核心模塊2.1.1 STC89C52單片機(jī)簡介2.1.2 STC89C52主要性能.2.2 RDA5807模塊.2.2.1 RDA5807模塊特點(diǎn)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時(shí)序3 系統(tǒng)程序設(shè)計(jì)4 印刷電路板的設(shè)計(jì)與制作印刷電路板的布線設(shè)計(jì)印刷電路板的制作5 電路板的調(diào)試6 結(jié)論謝辭.參考文獻(xiàn)附錄引言

3、本設(shè)計(jì)研究FM收音機(jī)分為硬件電路和程序設(shè)計(jì)兩個(gè)方面。從硬件電路來說,主要是實(shí)現(xiàn)所需電壓值、穩(wěn)壓、搜臺(tái)、控制和頻率顯示等方面;從系統(tǒng)程序來說,主要是通過軟件來實(shí)現(xiàn)RDA5807模塊的功能,使用IIC總線方式調(diào)臺(tái),并且得到當(dāng)前的頻率,處理并實(shí)現(xiàn)頻率轉(zhuǎn)換、顯示。1. 方案選擇 使用分立元件來搭接電路,實(shí)現(xiàn)模塊的功能,收發(fā)信號(hào),對(duì)信號(hào)調(diào)頻或者調(diào)幅,從而得到可以處理的信號(hào),實(shí)現(xiàn)收聽功能。由于本方案,調(diào)試極為復(fù)雜,很難成功,而且接收頻率范圍小,工作也很不穩(wěn)定,很容易受外界影響。方案二采用RDA5807模塊,實(shí)現(xiàn)接收信號(hào),并處理功能,并于單片機(jī)相結(jié)合,實(shí)現(xiàn)數(shù)控,操作簡單。由于RDA5807模塊高度的集成,很

4、多功能都集成在內(nèi)部,所以工作穩(wěn)定,不容易受外界影響,而且需要的外部東西少,使用總線與單片機(jī)相連接,使用的線少,模塊簡單,操作方便,并且接收頻率范圍很廣。系統(tǒng)方案設(shè)計(jì)及各模塊原理本方案采用STC89C52單片機(jī)與RDA模塊連接,從而實(shí)現(xiàn)數(shù)控收音機(jī),STC89C52單片機(jī)在這方面的設(shè)計(jì)為我們提供了極大的方便,用它實(shí)現(xiàn)的好處在于,外圍電路極其簡單,另外在STC89C52單片機(jī)的編程方面又提供及其便利的編程環(huán)境。外圍電路的設(shè)計(jì)包括兩大部分,分別是液晶的顯示和鍵盤控制電路的設(shè)計(jì)。這里采用一個(gè)復(fù)位按鍵,來實(shí)現(xiàn)對(duì)RDA5807模塊的初始化。設(shè)計(jì)的特點(diǎn)是全面采用數(shù)字電路方案,因而工作穩(wěn)定可靠。利用單片機(jī)控制管

5、理,使設(shè)置及調(diào)整操作準(zhǔn)確。液晶顯示STC89C52單片機(jī)控制系統(tǒng)收音模塊及存儲(chǔ)芯片按鍵控制STC89C52最小系統(tǒng)原理圖RDA5807收音模塊 STC89C52核心模塊STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash存儲(chǔ)器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。 具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,512字節(jié)RAM, 32 位I/O 口

6、線,看門狗定時(shí)器,內(nèi)置4KB EEPROM,MAX810復(fù)位電路,3個(gè)16 位定時(shí)器/計(jì)數(shù)器,4個(gè)外部中斷,一個(gè)7向量4級(jí)中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級(jí)中斷結(jié)構(gòu)),全雙工串行口。另外 STC89C52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式。 STC89C52單片機(jī)簡介其引腳結(jié)構(gòu)及說明如下:VCC : 電源GND: 地P0 口:P0口是一個(gè)8位漏極開路的雙向I/O口。作為輸出口,每位能驅(qū)動(dòng)8個(gè)TTL邏輯電平。對(duì)P0端口寫“1”時(shí),引腳用作高阻抗輸入。當(dāng)訪問外部程序和數(shù)據(jù)存儲(chǔ)器時(shí),P0口也被作為低8位地址/數(shù)據(jù)復(fù)用。在這種模式下,P0具有內(nèi)部上拉電阻。在 flash編程時(shí),P

7、0口也用來接收指令字節(jié);在程序校驗(yàn)時(shí),輸出指令字節(jié)。程序校驗(yàn)時(shí),需要外部上拉電阻。P1 口:P1 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P1 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。此外,P1.0和P1.2分別作定時(shí)器/計(jì)數(shù)器2的外部計(jì)數(shù)輸入(P1.0/T2)和時(shí)器/計(jì)數(shù)器2的觸發(fā)輸入P1.1/T2EX)。在flash編程和校驗(yàn)時(shí),P1口接收低8位地址字節(jié)。P2 口:P2 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅(qū)

8、動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P2 端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。在訪問外部程序存儲(chǔ)器或用16位地址讀取外部數(shù)據(jù)存儲(chǔ)器(例如執(zhí)行MOVX DPTR)時(shí),P2 口送出高八位地址。在這種應(yīng)用中,P2 口使用很強(qiáng)的內(nèi)部上拉發(fā)送1。在使用8位地址(如MOVX RI)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),P2口輸出P2鎖存器的內(nèi)容。在flash編程和校驗(yàn)時(shí),P2口也接收高8位地址字節(jié)和一些控制信號(hào)。P3 口:P3 口是一個(gè)具有內(nèi)部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅(qū)動(dòng)4 個(gè)TTL 邏輯電平。對(duì)P3

9、端口寫“1”時(shí),內(nèi)部上拉電阻把端口拉高,此時(shí)可以作為輸入口使用。作為輸入使用時(shí),被外部拉低的引腳由于內(nèi)部電阻的原因,將輸出電流(IIL)。P3口亦作為AT89S52特殊功能(第二功能)使用,如下所示。P3.0 RXD(串行輸入口)P3.1 TXD(串行輸出口)P3.2 (外部中斷0)P3.3 (外部中斷1)P3.4 T0(記時(shí)器0外部輸入)P3.5 T1(記時(shí)器1外部輸入)P3.6 (外部數(shù)據(jù)存儲(chǔ)器寫選通)P3.7 (外部數(shù)據(jù)存儲(chǔ)器讀選通)在flash編程和校驗(yàn)時(shí),P3口也接收一些控制信號(hào)。RST: 復(fù)位輸入。晶振工作時(shí),RST腳持續(xù)2 個(gè)機(jī)器周期高電平將使單片機(jī)復(fù)位??撮T狗計(jì)時(shí)完成后,RST

10、 腳輸出96 個(gè)晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。ALE/PROG:地址鎖存控制信號(hào)(ALE)是訪問外部程序存儲(chǔ)器時(shí),鎖存低8 位地址的輸出脈沖。在flash編程時(shí),此引腳(PROG)也用作編程輸入脈沖。在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時(shí)器或時(shí)鐘使用。然而,特別強(qiáng)調(diào),在每次訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),ALE脈沖將會(huì)跳過。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE 僅在執(zhí)行MOVX 或MOVC指令時(shí)有效。否則,ALE 將

11、被微弱拉高。這個(gè)ALE 使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對(duì)微控制器處于外部執(zhí)行模式下無效。PSEN:外部程序存儲(chǔ)器選通信號(hào)(PSEN)是外部程序存儲(chǔ)器選通信號(hào)。當(dāng) AT89S52從外部程序存儲(chǔ)器執(zhí)行外部代碼時(shí),PSEN在每個(gè)機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),PSEN將不被激活。EA/VPP:訪問外部程序存儲(chǔ)器控制信號(hào)。為使能從0000H 到FFFFH的外部程序存儲(chǔ)器讀取指令,EA必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,EA也接收12伏VPP電壓。XTAL1:振蕩器反相放大器和內(nèi)部時(shí)鐘發(fā)生電路的輸入端。XTAL2:振蕩器反相放大器的

12、輸出端。STC89C52主要性能-與MCS-51單片機(jī)產(chǎn)品兼容-8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器-1000次擦寫周期-全靜態(tài)操作:0Hz33Hz-三級(jí)加密程序存儲(chǔ)器-32個(gè)可編程I/O口線-三個(gè)16位定時(shí)器/計(jì)數(shù)器-八個(gè)中斷源-全雙工UART串行通道-低功耗空閑和掉電模式-掉電后中斷可喚醒-看門狗定時(shí)器-雙數(shù)據(jù)指針-掉電標(biāo)志位-內(nèi)帶2K字節(jié)EEPROM存儲(chǔ)空間-可直接使用串口下載-512字節(jié)數(shù)據(jù)存儲(chǔ)空間2.2 RDA5807模塊“”立體聲收音模塊( FM Stereo radio Module) 高靈敏度、低功耗、超小體積的調(diào)頻立體聲收音模組。采用RDA Microelectronics的

13、RDA5807M(或RDA5802NM),此電路外圍元件少、噪聲系數(shù)極小。具有體積小、低功耗、低成本、應(yīng)用簡單、使用范圍廣等優(yōu)點(diǎn)。是一款簡單易用且具極高性價(jià)比的單芯片F(xiàn)M立體聲收音模組。模塊的引腳及外圍電路圖 RDA5807模塊特點(diǎn)A、 采用通用的102BC模塊的封裝,用戶可直接替換使用,無需更改電路設(shè)計(jì)。 B、 靈敏度高、噪聲小、抗干擾能力強(qiáng)、外接元件極少、體積小(11*11.2MM Max)、使用極其簡單。 C、 76-108MHz全球FM頻段兼容(包括日本76-91MHz和歐美87.5-108.5MHz)。 D、 I2C串行數(shù)據(jù)總線接口通訊,支持外部基準(zhǔn)時(shí)鐘輸入方式。 E、 完全整合的C

14、OMS工藝單晶片集成電路,功耗極小。 F、 內(nèi)置高精度A/D(模數(shù)轉(zhuǎn)換器)及數(shù)字頻率合成器。 G、 內(nèi)置LDO調(diào)整、低功耗、超寬電壓使用范圍(2.7-3.6VDC)。 H、 內(nèi)置噪聲消除、軟靜音、低音增強(qiáng)電路設(shè)計(jì)。 I、 高功率32負(fù)載音頻輸出,直接耳機(jī)駁接,無需外接音頻驅(qū)動(dòng)放大。 J、 應(yīng)用簡便、成本低,性價(jià)比高。 RDA5807模塊使用說明A、模塊供電濾波電容設(shè)計(jì)是應(yīng)盡量靠近模塊電源輸入腳。B、I2C DAT, CLK芯片內(nèi)部已經(jīng)包含47k的上拉電阻;C、如用耳機(jī)的地線做天線,則參照上圖應(yīng)用大原理圖D、為了模塊能良好的可靠的工作,F(xiàn)M模塊供電電壓一般應(yīng)大于以上。E、此模塊內(nèi)部已集成LDO,

15、電源輸入端可使用簡單的LC電源濾波網(wǎng)絡(luò)即可。F、使用時(shí)應(yīng)做好ESD靜電防護(hù)工作。G、模塊可串電容后直接驅(qū)動(dòng)32ohm耳機(jī),如需推動(dòng)更大功率喇叭請(qǐng)外加功放;顯示模塊由1602液晶電路構(gòu)成。1602液晶簡介1602液晶是工業(yè)字符型液晶,能夠同時(shí)顯示16x02即32個(gè)字符。(16列2行)。2.1602引腳說明1602字符型LCD通常有14條引腳線或16條引腳線的LCD,多出來的2條線是背光電源線。VCC(15腳)和地線GND(16腳),其控制原理與14腳的LCD完全一樣,其中:1602液晶引腳說明2.4 IIC通信根據(jù)RDA5807模塊的要求,使用IIC通信,與單片機(jī)相連接,實(shí)現(xiàn)數(shù)控。 IIC簡介I

16、IC是由菲利浦半導(dǎo)體公司在八十年代初設(shè)計(jì)出來的,主要是用來連接整體電路(ICS) ,IIC是一種多向控制總線,也就是說多個(gè)芯片可以連接到同一總線結(jié)構(gòu)下,同時(shí)每個(gè)芯片都可以作為實(shí)施數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號(hào)輸總線。IIC串行總線一般有兩根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。所有接到IIC總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時(shí)鐘線SCL接到總線的SCL上。 IIC時(shí)序在IIC總線傳輸過程中,將兩種特定的情況定義為開始和停止條件:當(dāng)SCL保持“高”時(shí),SDA由“高”變?yōu)椤暗汀睘殚_始條件;當(dāng)SCL保持“高”且SDA由“低”變?yōu)椤案摺睍r(shí)為停止條件。開始和

17、停止條件均由主控制器產(chǎn)生。使用硬件接口可以很容易地檢測到開始和停止條件,沒有這種接口的微機(jī)必須以每時(shí)鐘周期至少兩次對(duì)SDA取樣,以檢測這種變化。 SDA線上的數(shù)據(jù)在時(shí)鐘“高”期間必須是穩(wěn)定的,只有當(dāng)SCL線上的時(shí)鐘信號(hào)為低時(shí),數(shù)據(jù)線上的“高”或“低”狀態(tài)才可以改變。輸出到SDA線上的每個(gè)字節(jié)必須是8位,每次傳輸?shù)淖止?jié)不受限制,但每個(gè)字節(jié)必須要有一個(gè)應(yīng)答ACK。如果一接收器件在完成其他功能(如一內(nèi)部中斷)前不能接收另一數(shù)據(jù)的完整字節(jié)時(shí),它可以保持時(shí)鐘線SCL為低,以促使發(fā)送器進(jìn)入等待狀態(tài);當(dāng)接收器準(zhǔn)備好接受數(shù)據(jù)的其它字節(jié)并釋放時(shí)鐘SCL后,數(shù)據(jù)傳輸繼續(xù)進(jìn)行。I2C數(shù)據(jù)總線傳送時(shí)序。 數(shù)據(jù)傳送具有

18、應(yīng)答是必須的。與應(yīng)答對(duì)應(yīng)的時(shí)鐘脈沖由主控制器產(chǎn)生,發(fā)送器在應(yīng)答期間必須下拉SDA線。當(dāng)尋址的被控器件不能應(yīng)答時(shí),數(shù)據(jù)保持為高并使主控器產(chǎn)生停止條件而終止傳輸。在傳輸?shù)倪^程中,在用到主控接收器的情況下,主控接收器必須發(fā)出一數(shù)據(jù)結(jié)束信號(hào)給被控發(fā)送器,從而使被控發(fā)送器釋放數(shù)據(jù)線,以允許主控器產(chǎn)生停止條件。3 系統(tǒng)程序設(shè)計(jì)程序框圖初始化液晶顯示初始值檢測是否有按鍵按下模塊進(jìn)行搜索頻道和音量的相關(guān)變化液晶顯示當(dāng)前頻率和音量結(jié)束具體程序詳見附錄4.1 印刷電路板的布線設(shè)計(jì)此過程是用Altium Designer 來完成。布線設(shè)計(jì)按以下流程實(shí)現(xiàn)。圖4.1 布線流程新建工程(.Prjpcb文件)畫原理圖(.S

19、chDoc文件)生成網(wǎng)表(.Net文件)畫PCB圖,即布線(.PcbDoc文件)布線時(shí)的注意事項(xiàng):(1) 在擺放元件時(shí)先按原理圖擺放,再細(xì)調(diào)位置。(2) 所用的為單面板,故布線時(shí)應(yīng)在底層Button Layer上。(3) 布線區(qū)域應(yīng)在禁止布線層Keep Out Layer上圈定。(4) 兩根線之間的距離不能太小,在線拐彎處不能用成直角,一般用45度角為宜。(5) 線寬設(shè)置在毫米,在一些拐角的地方還可以適當(dāng)?shù)匮a(bǔ)線,以防止腐蝕的時(shí)候?qū)⒕€腐蝕掉或是因?yàn)榫€太細(xì)而對(duì)電路造成不良的影響。首先,把PCB給打印出來,用砂紙把銅板除去外層的氧化銅,在預(yù)熱熨斗后,把PCB放到板上,把線熨至銅板上。待銅板冷卻后再將

20、紙從銅板撕下,檢查銅板上有沒有斷線的地方,若有少量,則用油性筆把線給補(bǔ)上!太多的話就用砂紙把線去除之后再重新燙過。然后,盡快把熨好的銅板放到氯化鐵溶液中。第三,腐蝕完后先進(jìn)行打孔,再把銅線上的墨去掉。這樣打孔比較方便。第四,就是裝元件,在此過程中一定要注意有正負(fù)極性的元件,比如LED燈、電解電容等。最后進(jìn)行焊接。5 電路板的調(diào)試調(diào)試過程是一個(gè)非常重要的環(huán)節(jié),這是整個(gè)電路板成功與否的關(guān)鍵。首先應(yīng)斷開電源,用數(shù)字萬用表認(rèn)真檢查電路連線是否有誤,是否有短路或者斷路和虛焊等的現(xiàn)象。經(jīng)過初步檢查以后,方可接通電源。此時(shí)還不應(yīng)該把芯片裝上。接上電源時(shí)應(yīng)該明確電源的正負(fù)極性,切不可接反,一接反則馬上可能會(huì)出

21、現(xiàn)燒毀重要元件的情況!時(shí)刻用手觸摸各元件有沒有發(fā)熱現(xiàn)象,并注意其是否冒煙等。待過一段時(shí)間穩(wěn)定后,如沒有出現(xiàn)不良的現(xiàn)象,則電路基本上正常,可依次用數(shù)字萬用表檢查各點(diǎn)的工作電壓情況,各點(diǎn)工作穩(wěn)定,并且確認(rèn)芯片插座兩端的電壓符合芯片的工作電壓時(shí),則可以關(guān)閉電源,把芯片裝上。 附錄主程序#include "reg52.h"#include "intrins.h"#include "lcd.h"#include "IIC.h"#include "delay.h"sbit K1 = P20;sbit K2

22、= P21;sbit K3 = P22;sbit K4 = P23;unsigned long frequency;/ RDA5807 寄存器unsigned char RDA_reg_data8 = 0xd0,0x00, / 02H 0x00,0x00, / 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

23、; /保留0x3b開始的3個(gè)字節(jié)連續(xù)寫寄存器子函數(shù)void RDA5807_write_reg(void) uchar i; I2C_start(); / 收音模塊寫入操作 I2C_write_byte(0x20); / 寄存器連續(xù)寫操作 for(i=0; i<8; i+) I2C_write_byte(RDA_reg_datai); I2C_stop();連續(xù)讀寄存器子函數(shù)void RDA5807_read_reg(uchar *reg_buf) I2C_start(); / 收音模塊讀取操作 I2C_write_byte(0x21); / 寄存器連續(xù)讀操作 reg_buf0 = I2

24、C_read_byte(I2C_ACK); reg_buf1 = I2C_read_byte(I2C_ACK); reg_buf2 = I2C_read_byte(I2C_ACK); reg_buf3 = I2C_read_byte(I2C_NACK); I2C_stop();模塊上電初始化子函數(shù)void RDA5807_power(void) delayms(50); / 發(fā)送軟件復(fù)位指令 RDA_reg_data0 = 0x00; RDA_reg_data1 = 0x02; RDA5807_write_reg(); delayms(10); / 收音模塊默認(rèn)參數(shù) RDA_reg_data0

25、 = 0xd0; RDA_reg_data1 = 0x01; RDA5807_write_reg();功能描述:收音模塊自動(dòng)尋臺(tái)模式void RDA5807_FM_seek(void) uint chan; uchar reg_data4 = 0x00, 0x00, 0x00, 0x00; RDA_reg_data3 &= (1 << 4); /調(diào)諧禁用 / 內(nèi)部自動(dòng)尋臺(tái)使能 RDA_reg_data0 |= (1 << 0); /SEEK位置1 RDA5807_write_reg(); / 等待STC 標(biāo)志置位 while(0 = (reg_data0 &am

26、p; 0x40) delayms(20); / 讀取內(nèi)部狀態(tài) RDA5807_read_reg(reg_data); / 獲取當(dāng)前工作頻點(diǎn) chan = reg_data0 & 0x03; chan = reg_data1 | (chan << 8); chan = chan << 6; / 保存當(dāng)前工作頻點(diǎn) RDA_reg_data2 = (chan >> 8) & 0xff; RDA_reg_data3 = (chan & 0xff); 頻率顯示子函數(shù)void show_frequency(void) unsigned char

27、i,display5; unsigned int temp; temp = (RDA_reg_data2*256)+(RDA_reg_data3&0xc0); /計(jì)算 temp = temp>>6; frequency = (unsigned long)(100*temp+87000)/100; for(i=0; i<5; i+) / 清顯存單元 displayi = 0x00; display0 = (frequency)/1000 ; /數(shù)據(jù)轉(zhuǎn)換 display1 = (frequency%1000)/100; display2 = (frequency%100)

28、/10; display3 = 0x2e; /小數(shù)點(diǎn) display4 = (frequency%10); if(display0 = 0) display0 = display1+0x30; display1 = 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(disp

29、lay0); lcd_wdat(display1); lcd_wdat(display2); lcd_wdat(display3); lcd_wdat(display4);音量顯示子函數(shù)void show_volume() unsigned char temp,display2; temp = RDA_reg_data7 & 0x0f; /取音量值 display0 = temp/10; display1 = temp%10; if(display0 = 0) /如果高位為0 display0 = display1; /低位顯存內(nèi)容進(jìn)入高位顯存 display1 = 0x20; /低位

30、不顯示 else display1 += 0x30; display0 += 0x30; lcd_pos_xy(13,2); /音量值顯示 lcd_wdat(display0); lcd_wdat(display1); 主函數(shù)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_dat

31、a0 |= (1 << 1); /SEEK UP RDA5807_FM_seek(); while(K1 = 0); if(K2 = 0) delayms(20); if(K2 = 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;

32、 RDA_reg_data3 &= (1 << 4); RDA_reg_data7+; / 音量遞增 RDA5807_write_reg(); while(K3 = 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(); whi

33、le(K4 = 0); show_volume(); show_frequency(); Lcd程序#include "reg52.h"#include "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忙狀態(tài) lc

34、d_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫指令與數(shù)據(jù)。bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(DATA_PORT&0x80); LCD_EN = 0; return(result); 寫指令數(shù)據(jù)到LCD RS=L,RW=L,E=高脈沖,D0-D7=指令碼。 Check=1,進(jìn)行忙檢測。void lcd_wcmd(uchar cmd, bit Check) if(Check) while(lcd_busy(); LCD_RS =

35、0; LCD_RW = 0; LCD_EN = 0; delayNOP(); DATA_PORT = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; 寫顯示數(shù)據(jù)到LCD RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。void lcd_wdat(uchar dat) while(lcd_busy(); /進(jìn)行忙檢測 LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; DATA_PORT = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; LCD初始化設(shè)定vo

36、id lcd_init() delayms(50); lcd_wcmd(0x38,0); /16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù) delayms(5); lcd_wcmd(0x38,0); /不進(jìn)行忙檢測,強(qiáng)制執(zhí)行。 delayms(5); lcd_wcmd(0x38,0); delayms(5);lcd_wcmd(0x38,1); /進(jìn)行忙檢測 delayms(5); lcd_wcmd(0x0c,1); /顯示開,關(guān)光標(biāo) delayms(5); lcd_wcmd(0x06,1); /移動(dòng)光標(biāo) delayms(5); lcd_wcmd(0x01,1); /清除LCD的顯示內(nèi)容 delayms(5

37、); 設(shè)定顯示位置void lcd_pos_xy(uchar pos_x,uchar pos_y) uchar pos_temp; pos_temp=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); 寫字符串子函數(shù) void lcd_w_string(uchar pos_x,uchar pos_y,uchar code *str,uint times) uchar m; lcd_pos_xy(pos_x,pos_y); /設(shè)定起始位置 for(m=0; m<16; m+) l

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論