基于RDA5807的收音機_第1頁
基于RDA5807的收音機_第2頁
基于RDA5807的收音機_第3頁
基于RDA5807的收音機_第4頁
基于RDA5807的收音機_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

編號:課程設計說明書(信息系統(tǒng)綜合實訓)題目:立體聲調(diào)頻收音機院〔系〕:信息與通信學院專業(yè):電子信息工程學生姓名:峰之使者學號:指導教師:2023年1月8日摘要本系統(tǒng)為立體聲調(diào)頻收音機,設計采用RDA5807收音模塊,與單片機相結(jié)合,使收音解調(diào)電路設計變的簡單,實現(xiàn)FM收音并顯示頻率。我們通過矩陣鍵盤設定我們需要的頻段,并設置音量大小,通過諾基亞5110液晶屏顯示出來,并根據(jù)所顯示接收信號的強度等級,判斷收音所在地的信號強度。RDA5807模塊具有65-108MHz全球FM接收頻段相容的效果,具備噪聲消除、軟靜音、低音增強、靈敏度高、噪聲小、抗干擾能力強等功能,所以使用本模塊很容易實現(xiàn),且系統(tǒng)可靠穩(wěn)定。關(guān)鍵詞:單片機;RDA5807收音模塊;FM收音;目錄引言11任務要求與設計的背景11.1設計任務要求11.2課題背景12調(diào)頻收音機的分析和設計思路12.1系統(tǒng)設計原理12.2系統(tǒng)框圖分析和設計23硬件設計23.1單片機最小系統(tǒng)23.1.1時鐘電路23.1.2復位電路33.2RDA5807模塊33.2.1RDA5807模塊管腳33.2.2RDA5807模塊特點43.2.3RDA5807模塊與單片機接口43.3原理圖53.4PCB圖54軟件設計54.1IIC通信54.2IIC時序64.3軟件流程圖75調(diào)試過程95.1電路板制作95.2硬件調(diào)試95.3軟件調(diào)試105.4實物圖116總結(jié)11謝辭13參考文獻14附錄15引言隨著科學技術(shù)的開展,調(diào)頻收音機的應用十分廣泛,尤其消費類占有相當?shù)氖袌?。從別離元件組成的收音機到由集成電路組成的收音機,調(diào)頻收音機技術(shù)已到達十分成熟的地步。本次設計采用RDA5807收音模塊與單片機相結(jié)合,實現(xiàn)FM收音并顯示頻率。單片機自20世紀70年代問世以來,以極其高的性能價格比受到人們的重視和關(guān)注,所以應用很廣,開展很快。單片機的特點是體積小、集成度高、重量輕、抗干擾能力強,對環(huán)境要求不高,價格低廉,可靠性高,靈活性好,開發(fā)較為容易,所以本次采用STC89c52單片機。此外,RDA5807模塊具有65-108MHz全球FM接收頻段相容的效果,具備噪聲消除、軟靜音、低音增強、靈敏度高、噪聲小、抗干擾能力強等功能,還可以具備頻率顯示功能。1任務要求與設計的背景1.1設計任務要求本論文的任務是根據(jù)調(diào)頻收音機的特點和應用情況,結(jié)合新一代高性能芯片設計一種使用簡單、性能優(yōu)良的收音機。整個系統(tǒng)以單片機STC89S52控制,RDA5807芯片為核心,配置相應的外設及接口電路。接收頻率可設置、輸出音量可數(shù)控、顯示信號強度和設置靜音,用C語言開發(fā),組成一個多功能的程控數(shù)字收音機。1.2課題背景隨著科學技術(shù)的不斷開展,新穎的調(diào)頻收音機的不斷出現(xiàn),技術(shù)不斷的提高,設計出來的收音機外型精致和小巧。從別離元件到集成電路,這標志著收音機的內(nèi)部電路簡單。用一個集成塊就能完成所有的工作。從早期的調(diào)幅收音機到現(xiàn)在的調(diào)頻收音機,我們可以想象收音機的不斷的改良和不斷創(chuàng)新,使收音機的開展空間愈來愈大?,F(xiàn)在,出現(xiàn)了新一代高科技產(chǎn)品——數(shù)字調(diào)頻收音機,功能強大,性能優(yōu)良,設計精巧耐用。2調(diào)頻收音機的分析和設計思路2.1系統(tǒng)設計原理本文提出的采用RDA5807模塊作為解調(diào)的核心器件的全數(shù)控調(diào)頻收音機設計方案,根據(jù)接收頻率可設置、輸出音量可數(shù)控、顯示信號強度和設置靜音等要求,本設計外置一根天線,信號從天線進入RDA5807模塊,因為內(nèi)部有一放大器,所以不需要外加放大器,內(nèi)部AD對信號進行采樣,通過單片機的I/O口與RDA5807的IIC總線相連,經(jīng)過程序控制進行對收音芯片內(nèi)部的存放器讀寫,改寫這些存放器,那么可輸出對應的頻率和音量的信號??刂齐娐凡捎?*4的矩陣鍵盤,輸入的數(shù)字信息經(jīng)STC89C52控制的諾基亞5110液晶屏顯示。2.2系統(tǒng)框圖分析和設計系統(tǒng)結(jié)構(gòu)組成如圖2.1所示,主要由單片機控制模塊、鍵盤與顯示模塊、收音機解調(diào)模塊、天線組成。其中,信號接收由單片機控制模塊、收音機解調(diào)模塊和天線實現(xiàn),鍵盤與顯示模塊那么用來實現(xiàn)人機交互的功能,通過外接的喇叭或者耳機可以接收到對應頻道的信息。天線收音解調(diào)模塊4x4矩陣鍵盤單片機天線收音解調(diào)模塊4x4矩陣鍵盤單片機5110液晶顯示模塊5110液晶顯示模塊圖2.1收音機系統(tǒng)框圖3硬件設計3.1單片機最小系統(tǒng)STC89C52是一種低功耗、高性能CMOS8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用STC公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應用系統(tǒng)提供高靈活、有效的解決方案。STC89C52具有以下標準功能:8k字節(jié)Flash、256字節(jié)RAM、32位I/O口線、看門狗定時器、2個數(shù)據(jù)指針、二個16位定時器/計數(shù)器、一個6向量2級中斷結(jié)構(gòu)、全雙工串行口、片內(nèi)晶振及時鐘電路。另外,STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或硬件復位為止。一般單片機需外接一個時鐘電路和一個復位電路,如圖3.1和圖3.2所示。3.1.1時鐘電路圖3.1時鐘電路XTAL1是片內(nèi)振蕩器的反相放大器輸入端,XTAL2那么是輸出端,使用外部振蕩器時,外部振蕩信號應直接加到XTAL1,而XTAL2懸空。內(nèi)部方式時,時鐘發(fā)生器對振蕩脈沖二分頻,如晶振為12MHz,時鐘頻率就為6MHz。晶振的頻率可以在1MHz-24MHz內(nèi)選擇。電容取30PF左右。STC89C52中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反應元件的片外石英晶體或者陶瓷諧振器一起構(gòu)成自激振蕩器。片外石英晶體或者陶瓷諧振器及電容C1、C2接在放大器的反應回路中構(gòu)成并聯(lián)振蕩電路。對外接電容C1、C2雖然沒有十分嚴格的要求,但電容容量的大小會輕微影響振蕩頻率的上下、振蕩器工作的穩(wěn)定性、起振的難易程序及溫度穩(wěn)定性,這里采用電容22pF,晶振采用12MHz。3.1.2復位電路STC89C52的外部復位電路有上電自動復位和手動按鍵復位。上電復位電容充電來實現(xiàn)。手動按鍵復位又分為按鍵電平復位和按鍵脈沖復位。按鍵電平復位電路是在普通RC復位電路的根底上接一個有下拉電阻10K、上拉電容10μf接VCC,電源由開關(guān)接至復位腳〔和上拉電容并聯(lián)〕,上拉電容支路負責在“上電〞瞬間實施復位;開關(guān)通過10K下拉電阻分壓器,保證對單片機實施按鍵電平復位。電路圖如下列圖3.2所示:圖3.2復位電路3.2RDA5807模塊3.2.1RDA5807模塊管腳“RRD-102V2.0〞立體聲收音模塊〔FMStereoradioModule〕高靈敏度、低功耗、超小體積的調(diào)頻立體聲收音模組。采用RDAMicroelectronics的RDA5807M〔或RDA5802NM〕,此電路外圍元件少、噪聲系數(shù)極小。具有體積小、低功耗、低本錢、應用簡單、使用范圍廣等優(yōu)點。是一款簡單易用且具極高性價比的單芯片F(xiàn)M立體聲收音模組,管腳如圖3.3所示,管腳功能如表3.1。表3.1管腳功能圖3.3RAD5807模塊管腳示意圖3.2.2RDA5807模塊特點〔1〕采用通用的102BC模塊的封裝,用戶可直接替換使用,無需更改電路設計?!?〕、靈敏度高、噪聲小、抗干擾能力強、外接元件極少、體積小〔11*11.2MMMax〕、使用極其簡單。〔3〕、76-108MHz全球FM頻段兼容〔包括日本76-91MHz和歐美87.5-108.5MHz〕?!?〕、I2C串行數(shù)據(jù)總線接口通訊,支持外部基準時鐘輸入方式。〔5〕、完全整合的COMS工藝單晶片集成電路,功耗極小。〔6〕、內(nèi)置高精度A/D〔模數(shù)轉(zhuǎn)換器〕及數(shù)字頻率合成器。〔7〕、內(nèi)置LDO調(diào)整、低功耗、超寬電壓使用范圍〔2.7-3.6VDC〕。〔8〕、內(nèi)置噪聲消除、軟靜音、低音增強電路設計?!?〕、高功率32Ω負載音頻輸出,直接耳機駁接,無需外接音頻驅(qū)動放大。3.2.3RDA5807模塊與單片機接口RDA5807是以I2C協(xié)議為通信方式的芯片,通過CLK時鐘總線和SDA數(shù)據(jù)總線與單片機相連,如圖3.3所示。圖3.4RAD5807與單片機接口3.3原理圖本原理圖是實現(xiàn)一個收音功能的電路,通過天線接收播送,并利用RDA5807收音模塊,解調(diào)出音頻信號,通過耳機播放出來,如圖3.5所示。圖3.5系統(tǒng)原理圖3.4PCB圖利用軟件DXP,將原理圖導入進行制作PCB圖,通過白色線的指引,把各個局部的電路連接起來,如圖3.6所示。圖3.6PCB圖4軟件設計4.1IIC通信IIC是由菲利浦半導體公司在八十年代初設計出來的,主要是用來連接整體電路(ICS),IIC是一種多向控制總線,也就是說多個芯片可以連接到同一總線結(jié)構(gòu)下,同時每個芯片都可以作為實施數(shù)據(jù)傳輸?shù)目刂圃?。這種方式簡化了信號輸總線。IIC串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到IIC總線設備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設備的時鐘線SCL接到總線的SCL上。4.2IIC時序在IIC總線傳輸過程中,將兩種特定的情況定義為開始和停止條件:當SCL保持“高〞時,SDA由“高〞變?yōu)椤暗通暈殚_始條件;當SCL保持“高〞且SDA由“低〞變?yōu)椤案擗晻r為停止條件。開始和停止條件均由主控制器產(chǎn)生。使用硬件接口可以很容易地檢測到開始和停止條件,沒有這種接口的微機必須以每時鐘周期至少兩次對SDA取樣,以檢測這種變化。SDA線上的數(shù)據(jù)在時鐘“高〞期間必須是穩(wěn)定的,只有當SCL線上的時鐘信號為低時,數(shù)據(jù)線上的“高〞或“低〞狀態(tài)才可以改變。輸出到SDA線上的每個字節(jié)必須是8位,每次傳輸?shù)淖止?jié)不受限制,但每個字節(jié)必須要有一個應答ACK。如果一接收器件在完成其他功能〔如一內(nèi)部中斷〕前不能接收另一數(shù)據(jù)的完整字節(jié)時,它可以保持時鐘線SCL為低,以促使發(fā)送器進入等待狀態(tài);當接收器準備好接受數(shù)據(jù)的其它字節(jié)并釋放時鐘SCL后,數(shù)據(jù)傳輸繼續(xù)進行。I2C數(shù)據(jù)總線傳送時序。數(shù)據(jù)傳送具有應答是必須的。與應答對應的時鐘脈沖由主控制器產(chǎn)生,發(fā)送器在應答期間必須下拉SDA線。當尋址的被控器件不能應答時,數(shù)據(jù)保持為高并使主控器產(chǎn)生停止條件而終止傳輸。在傳輸?shù)倪^程中,在用到主控接收器的情況下,主控接收器必須發(fā)出一數(shù)據(jù)結(jié)束信號給被控發(fā)送器,從而使被控發(fā)送器釋放數(shù)據(jù)線,以允許主控器產(chǎn)生停止條件。圖4.1為RDA5807存放器寫時序,圖4.2為RDA5807存放器讀時序。圖4.1I2C寫時序圖4.2I2C讀時序4.3軟件流程圖在應用系統(tǒng)中,系統(tǒng)軟件的設計是建立在具體硬件電路根底之上,根據(jù)系統(tǒng)功能要求可靠地實現(xiàn)系統(tǒng)的各種功能。好的軟件設計能夠充分發(fā)揮微控制器的運算和邏輯控制功能,從而提高儀器的精度和使用的方便性。先初始化接收頻率,并實現(xiàn)對頻率和音量步進的控制。處理用戶由鍵盤鍵入的頻率值和音量值,判斷是否超出范圍,生成頻率和音量控制字,經(jīng)I2C方式送入解調(diào)模塊并改寫存放器數(shù)據(jù),設置用戶所需的接收頻段和音量,并通過程序?qū)崿F(xiàn)頻率、音量和信號強度的顯示,程序流程圖如圖4.3所示。開始開始RDA5807RDA5807初始化5110液晶5110液晶初始化鍵盤掃描鍵盤掃描改寫當前頻率、音量改寫當前頻率、音量顯示當前頻率、音量顯示當前頻率、音量結(jié)束結(jié)束圖4.3總程序流程圖根據(jù)圖4.3的總程序流程圖。程序從main函數(shù)開始,先對LCD5110液晶屏進行初始化,主要對液晶屏進行忙或不忙檢測,當液晶屏忙時,程序等待中;當液晶屏不忙時,程序繼續(xù)。再對LCD清屏,為顯示作準備。再顯示我們需要的信息。最后初始設置頻率和音量,初始化程序如下:LCD_init(); //lcd初始化LCD_clear(); //清屏xianshi(); //顯示初始化RDA_Init(); //RDA5807初始化Freq_Set(8830);//頻率初始設置為88.30MHZVol_Set(10) ; //音量初始設置為10矩陣鍵盤掃描程序,當按鍵按下時,程序執(zhí)行對應功能;當鍵盤沒有按下時,程序結(jié)束且這個過程不斷循環(huán)。鍵盤掃描程序如下:keyscan(); //鍵盤不斷掃描當鍵1被按下時,頻率值加100KHZRXFreq+=10; //頻率加,步進100KHZFreq_Set(RXFreq); //頻率設置當鍵2被按下時,頻率值減100KHZRXFreq-=10; //頻率減,步進100KHZFreq_Set(RXFreq); //頻率設置當鍵3被按下時,音量值加1 Vol+=1; //音量加 Vol_Set(Vol); //音量設置 0~15當鍵4被按下時,音量值減1 Vol-=1; //音量減 Vol_Set(Vol); //音量設置 0~15當鍵5被按下時,設置靜音成功;當鍵5再次按下時靜音取消 Mute_Set(mute); //設置靜音 mute++;鍵盤不斷掃描時,也不斷的顯示,分別對頻率、音量、信號強度和靜音標志進行顯示,顯示程序如下: display_2(RXFreq); //顯示頻率 display_1(Vol); //顯示音量 display_3(Rssi_Get()); //顯示信號強度 display_4(mute); //顯示是否靜音,1為否,0為是以上步驟不斷的循環(huán)。5調(diào)試過程5.1電路板制作畫圖:根據(jù)原理圖畫PCB圖,畫封裝。打印PCB:通過轉(zhuǎn)印機把PCB轉(zhuǎn)印到電路板上。腐蝕:把電路板放進腐蝕液里腐蝕掉沒有被保護的銅。鉆孔:根據(jù)洞口大小選擇適宜的鉆針鉆孔。清洗:把導線外表的油墨打磨清洗干凈。涂松香:把松香和天那水的混合液涂在打磨清洗后的板子上,防止銅線被氧化和有助于焊接。插器件,焊接:等松香干了,插元器件,并且焊接好。5.2硬件調(diào)試剛開始調(diào)試的時候,我是根據(jù)一個文檔上寫的,耳機接口的公共端可以用作天線,并通過一個磁珠與地隔開,當時一個勁的疑心軟件問題,沒有認真檢查硬件,經(jīng)過仔細查閱資料,了解到耳機接口的公共端為地,所以不能用作天線。解決;天線端與耳機公共端斷路,耳機公共端直接接地。如圖5.1所示。圖5.1解決后電路還有一個問題,芯片RDA5807的輸出口有兩個聲道,之前我是用兩個磁珠相連,因為磁珠是電感,具有隔交流信號的作用,音頻信號為交流信號,磁珠濾除掉了音頻信號,所以耳機端不可能接收到音頻信號,解決:移除兩個磁珠,用導線把兩端連接起來。如圖5.3所示紅色框原為兩個磁珠,現(xiàn)在為兩導線相連.如圖5.2所示。圖5.2解決后電路5.3軟件調(diào)試軟件遇到的主要問題是RDA5807的I2C協(xié)議通信的時序問題,I2C協(xié)議通過時鐘總線CLK和數(shù)據(jù)總線SDA與單片機相連,我們所用的單片機沒有I2C接口,給我們造成了很大的不便,我們是根據(jù)I2C時序,通過拉低或拉高總線和延時函數(shù)模擬I2C。在寫I2C讀一個字節(jié)的數(shù)據(jù)時,數(shù)據(jù)只能讀出16位數(shù)據(jù)的高8位,而不能讀出數(shù)據(jù)的低8位,。解決:在讀數(shù)據(jù)前,將SDA總線拉高,因為51單片機講引腳置高可設為輸入引腳,即可讀出數(shù)據(jù)。局部程序如下:ucharIICReadByte(unsignedcharack)//IIC讀一個字節(jié){unsignedchari,receive=0; SDA=1; //51單片機講引腳置高可設為輸入引腳,缺少此語句,不能正常讀出數(shù)據(jù)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();returnreceive;}5.4實物圖如圖5.3所示,調(diào)試出來的電路由矩陣鍵盤、諾基亞5110液晶屏、RDA5807模塊組成??梢燥@示接收頻率、音量、信號強度,如圖5.3所示。圖5.3無線發(fā)射控制電路6總結(jié)本次信息系統(tǒng)綜合實訓,我用了兩個星期,在第一個星期我查閱關(guān)于收音機的資料和學習一些單片機的根底,第二個星期我做板并調(diào)試程序,這兩星期可以說是充實,緊張而又愉快的。在這兩個星期的實訓中,我學到了很多東西,不管是在知識架構(gòu)上,還是在動手動腦能力上都起著潛移默化的影響。剛開始做收音機,腦袋里面沒有一點頭緒,通過幾天的查閱資料和班里面的同學交流,了解到了FM是如今的一種收音機常用的調(diào)制解調(diào)方式,這也是我本次實訓的芯片RDA5807里面的調(diào)制解調(diào)方式。硬件做出來后,調(diào)試軟件遇到了不少的問題,剛開始把5110液晶屏點亮,費了一段時間,通過查找網(wǎng)上一些關(guān)于5110液晶屏的驅(qū)動和參考別人的一些程序,終于可以在屏幕上隨意讀寫數(shù)據(jù),并且可以顯示漢字。關(guān)于RDA5807的程序,我也是上網(wǎng)找了一堆資料,其實它的驅(qū)動程序有點難寫,特別是I2C協(xié)議讀寫數(shù)據(jù),但我們參考別人的程序,對照時序圖,可以很快寫好RDA5807的驅(qū)動程序,通過調(diào)用里面的子函數(shù),設置所需的接收頻段和音量。關(guān)于矩陣鍵盤的程序,按鍵掃描是單片機的一個根本的知識,不過矩陣鍵盤掃描比擬困難,它是8個IO口控制16個鍵盤,在觀看郭天祥的十天學會單片機后,對矩陣有了一定了解,最后能運用矩陣鍵盤實現(xiàn)對頻率設置的功能。這次實訓不僅穩(wěn)固了以前所學過的知識,鍛煉自己動手制作能力,更是讓我深刻認識到我對理論知識所學欠缺,理論知識的重要性,這些我會在以后得學習總補習回來,做到理論與實踐相結(jié)合,更好的提高自己的實際動手能力和獨立思考的能力。謝辭首先,感謝為我們安排了這次單片機設計實訓。非常感謝學院領導和老師給我們提供硬件條件和在理論知識方面的幫助。還要感謝老師的授課和實訓操作指導,在任務開始前,老師首先就全面的為我們講考前須知,讓我們在實訓過程中少犯了不少錯,節(jié)約了珍貴的時間。特別感謝老師,是她在整個實訓過程中對我們嚴格要求,耐心指導,反復為我們講解要點,給與我們極大的幫助以及鼓勵,使得我最終完成實訓。參考文獻[1]郭天祥.51單片機C語言教程:電子工業(yè)出版社,2023[2]李歐儒主編.短波單邊帶收發(fā)信機原理與調(diào)制.北京:人民郵電出版社,1985[3]董在望.陳雅琴,雷有華,肖華庭.通信電路原理.第二版.北京:高等教育出版社,2002[4]孫育才.MCS-51系列單片機及應用〔第4版〕:東南大學出版社,2004[5]閻石.數(shù)字電子技術(shù)根底〔第5版〕:清華大學出版社,2005[6]譚浩強.C語言程序設計〔第3版〕:清華大學出版社,2005[7]鄭學堅、周斌.微型計算機的原理及應用:清華大學出版社,2002[8]胡偉、季曉衡.單片機c程序設計及應用實例:北京人民郵電出版社.2003附錄#include<reg51.h>#include<string.h>#include<intrins.h>#include<lcd5110.h>#defineucharunsignedchar#defineuintunsignedint#defineulintunsignedlongint#definelintlongintunsignedintRXFreq=8980;//RDA的存放器地址#defineRDA_R00 0X00//讀出16個位的ID=0X5800#defineRDA_R02 0X02//DHIZ[15],DMUTE[14]靜音,MONO[13]聲道,BASS[12]重低音,SEEKUP[9],SEEK[8],SKMODE[7],CLK_MODE[6:4]時鐘源選擇,SOFTRESET[1]軟復位,ENABLE[0]電源使能#defineRDA_R03 0X03//CHAN[15:6],TUNE[4],BAND[3:2],SPACE[1:0]設置頻率帶寬步長#defineRDA_R04 0X04//STCIEN[14],DE[11],I2Senable[6],#defineRDA_R05 0X05//INT_MODE[15],SEEKTH[14:8](設定自動搜索信號強度閥值),LNA_PORT_SEL[7:6]=0b10,LNA_ICSEL_BIT[5:4],VOLUME[3:0]音量;#defineRDA_R0A 0X0A//STC[14]seekcompleteSF[13]seekfailreadchan[9:0]當前頻道#defineRDA_R0B 0X0B//RSSI[15:9],FMTRUE[8]當前頻道是一個節(jié)目臺#defineRDA_READ0X23//讀RDA5807#defineRDA_WRITE 0X22//寫RDA5807sbitSDA=P0^1; //IIC接口sbitSCL=P0^0;uchar*table[]={"0","1","2","3","4","5","6","7","8","9"};uchartemp,key,Vol=8,mute=1;uintDiantai[20]={8830};voiddelay(ucharz){ uchari,j; for(i=z;i>0;i--) for(j=110;j>0;j--);}/*IIC通信程序*/voidIIC_delayms()//用于IIC延時{ _nop_();_nop_();_nop_();_nop_();}voidOpenIIC() //IIC啟動信號{ SDA=1; SCL=1; IIC_delayms(); SDA=0; IIC_delayms(); SCL=0;}voidCloseIIC() //IIC停止信號{ SCL=0; SDA=0; IIC_delayms(); SCL=1; SDA=1; IIC_delayms();}ucharIIC_Wait_Ack(void) //IIC發(fā)送字節(jié)后等待從機發(fā)送響應信{ ucharucErrTime=0; SDA=1; IIC_delayms(); SCL=1; IIC_delayms(); while(SDA==1) { ucErrTime++; if(ucErrTime>250) { CloseIIC(); return1; } } SCL=0; return0;}voidIIC_Ack(void) //發(fā)送應答信號{ SCL=0; SDA=0; //0±íê?ó|′e IIC_delayms(); SCL=1; IIC_delayms(); SCL=0;}voidIIC_NAck(void) //IIC非應答信號{ SCL=0; SDA=1; IIC_delayms(); SCL=1; IIC_delayms(); SCL=0;} voidIICsendByte(uchartxd) //IIC·寫一個字節(jié){uchart;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();} } ucharIICReadByte(unsignedcharack)//IIC讀一個字節(jié){ unsignedchari,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();returnreceive;}uintReadReg(ucharregAddr) //芯片讀存放器{ uintbuf; OpenIIC(); IICsendByte(RDA_WRITE); //發(fā)送芯片地址方向為寫 IIC_Wait_Ack(); IICsendByte(regAddr); //發(fā)送存放器地址 IIC_Wait_Ack(); OpenIIC(); IICsendByte(RDA_READ); //發(fā)送芯片地址方向為讀 IIC_Wait_Ack(); buf=IICReadByte(1); buf=buf<<8; buf=buf|IICReadByte(0); CloseIIC(); returnbuf;}voidWriteReg(ucharregAddr,uintval)//芯片寫存放器{ OpenIIC(); IICsendByte(RDA_WRITE); //發(fā)送芯片地址方向為寫 IIC_Wait_Ack(); IICsendByte(regAddr); //發(fā)送存放器地址 IIC_Wait_Ack(); IICsendByte(val>>8); IIC_Wait_Ack(); IICsendByte(val&0XFF); IIC_Wait_Ack(); CloseIIC();}voidVol_Set(ucharvol) //音量設置 0~15{ uinttemp=0; temp=ReadReg(RDA_R05); temp&=0xfff0; WriteReg(0x05,vol|temp); }voidMute_Set(ucharmute) //靜音設置1為靜音 0為不靜音{ uinttemp=0; temp=ReadReg(0X02); if(!mute)temp|=1<<14; elsetemp&=~(1<<14); WriteReg(0X02,temp); }voidBass_Set(ucharbass) //頻帶設置{ uinttemp=0; temp=ReadReg(0X02); if(bass)temp|=1<<12; elsetemp&=~(1<<12); WriteReg(0X02,temp); }ucharRssi_Get(void) //信號強度獲取 0~63{ uinttemp=0; temp=ReadReg(0X0B); temp=(temp>>9)&0x7f; returntemp;}voidSeekth_Set(uintrssi) //自動搜臺信號閾值強度 0~15默認為8數(shù)值越低搜到的臺越多{ uinttemp; rssi=rssi&0xf; temp=ReadReg(0X05); temp&=~(0xf<<8); temp|=rssi<<8; WriteReg(0X05,temp); }voidSeek_direction(uchardirection)//搜臺方向1向上搜索0向下搜索{ uinttemp; temp=ReadReg(RDA_R02); temp&=~(1<<9); if(direction==1) temp|=1<<9; elseif(direction==0) temp|=0<<9; WriteReg(0X05,temp); }voidFreq_Set(uintfreq) //頻率設置單位是:10KHz6500~10800{ uinttemp; ucharspc=0,band=0; uintfbtm,chan; temp=ReadReg(0X03); temp&=0X001F; band=(temp>>2)&0x03; spc=temp&0x03; if(spc==0)spc=10; elseif(spc==1)spc=20; elsespc=5; if(band==0)fbtm=8700; elseif(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);}unsignedshortseek_channel(void)//半自動搜臺{ uinttemp; 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;//獲取當前頻率 returntemp/10000;//返回搜到電臺頻率單位是:10Khz }voidFM_enable(ucharflag) //1使能芯片0禁用芯片{ uinttemp; temp=ReadReg(RDA_R02); if(flag==1) temp|=1; if(flag==0) temp&=~0x1; WriteReg(RDA_R02,temp); }voidRDA_Init(void) //RDA3?ê??ˉ{ WriteReg(RDA_R02,0x0002);//軟件復位 delayms(30); WriteReg(RDA_R02,0xd281);//晶振選擇32.768Khz向上搜索重低音立體聲SKMODE=1搜索到邊頻時停止 WriteReg(RDA_R03,0x0000);//頻率設為87MHz,步進100Khz頻帶為87M~108M WriteReg(RDA_R04,0x0040);//根本配置 WriteReg(RDA_R05,0X8882);//音量設置為vol=2搜索閥值為8 FM_enable(1);//給芯片上電}/***********************顯示初始化************************/voidxianshi(){ LCD_write_english_string(0,0,"Freq:000.00MHZ"); LCD_write_english_string(0,1,"Vol:"); LCD_write_english_string(0,2,"Rssi:"); LCD_write_english_string(0,3,"VolMute:");}/*****************************顯示音量**********************/voiddisplay_1(lintvv1){ ucharA1,A2,A3,A4,A5,A6; A1=vv1/100000; A2=vv1%100000/10000; A3=vv1%10000/1000; A4=vv1%1000/100; A5=vv1%100/10; A6=vv1%10;// LCD_write_english_string(30,1,table[A2]);// LCD_write_english_string(36,1,table[A3]);// LCD_write_english_string(42,1,table[A4]); LCD_write_english_string(60,1,table[A5]); LCD_write_english_string(66,1,table[A6]);// LCD_write_english_string(80,1,table[A6]);}/*****************************顯示頻率**********************/voiddisplay_2(lintvv2){ ucharA1,A2,A3,A4,A5,A6; A1=vv2/10000; A2=vv2%10000/1000; A3=vv2%1000/100; A4=vv2%100/10; A5=vv2%10; LCD_write_english_string(30,0,table[A1]); LCD_write_english_string(36,0,table[A2]); LCD_write_english_string(42,0,table[A3]); LCD_write_english_string(54,0,table[A4]); LCD_write_english_string(60,0,table[A5]);}/*****************************顯示信號強度**********************/voiddisplay_3(lintvv1){ ucharA1,A2,A3,A4,A5,A6; A1=vv1/100000; A2=vv1%100000/10000; A3=vv1%10000/1000; A4=vv1%1000/100; A5=vv1%100/10; A6=vv1%10;// LCD_write_english_string(30,2,table[A2]);// LCD_write_english_string(36,2,table[A3]);// LCD_write_english_string(42,2,table[A4]); LCD_write_english_string(60,2,table[A5]); LCD_write_english_string(66,2,table[A6]);// LCD_write_english_string(80,1,table[A6]);}/*****************************顯示靜音狀態(tài)**********************/voiddisplay_4(lintvv1){ ucharA1,A2,A3,A4,A5,A6; A1=vv1/100000; A2=vv1%100000/10000; A3=vv1%10000/1000; A4=vv1%1000/100; A5=vv1%100/10; A6=vv1%10;// LCD_write_english_string(30,2,table[A2]);// LCD_write_english_string(36,2,table[A3]);// LCD_write_english_string(42,2,table[A4]);// LCD_write_english_string(60,2,table[A5]); LCD_write_english_string(66,3,table[A6]);// LCD_write_english_string(80,1,table[A6]);}voiddisplay_5(lintvv1){ ucharA1,A2,A3,A4,A5,A6; A1=vv1/100000; A2=vv1%100000/10000; A3=vv1%10000/1000; A4=vv1%1000/100; A5=vv1%100/10; A6=vv1%10; LCD_write_english_string(30,2,table[A2]); LCD_write_english_string(36,2,table[A3]); LCD_write_english_string(42,2,table[A4]); LCD_write_english_string(60,2,table[A5]); LCD_write_english_string(66,3,table[A6]); LCD_write_english_string(80,1,table[A6]);}/**********************矩陣鍵盤掃描****************************/voidkeyscan(){{ P3=0xfe;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){ temp=P3;switch(temp){case0xee:key=1; RXFreq+=10; //頻率加,步進100KHZ Freq_Set(RXFreq); //頻率設置 if(RXFreq>10800) RXFreq=10800;break;case0xde:key=2; RXFreq-=10; //頻率減,步進100KHZ Freq_Set(RXFreq); //頻率設置 if(RXFreq<8830) RXFreq=8830;break;case0xbe:key=3; Vol+=1; //音量加 Vol_Set(Vol); //音量設置 0~15 if(Vol>15) Vol=15;break;case0x7e:key=10; Vol-=1; //音量減 Vol_Set(Vol); //音量設置 0~15 if(Vol<0) Vol=0;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfd;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp){case0xed:key=4; Mute_Set(mute); //設置靜音 mute++; if(mute==2) mute=0;break;case0xdd:key=5;break;case0xbd:key=6;break;case0x7d:key=11;break;}while(temp!=0xf0){temp=P3;temp=temp&0xf0;}}}P3=0xfb;temp=P3;temp=temp&0xf0;if(temp!=0xf0){delay(10);if(temp!=0xf0){temp=P3;switch(temp)

溫馨提示

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

評論

0/150

提交評論