基于nRF24L01的無線通信模塊設(shè)計報告正文_第1頁
基于nRF24L01的無線通信模塊設(shè)計報告正文_第2頁
基于nRF24L01的無線通信模塊設(shè)計報告正文_第3頁
基于nRF24L01的無線通信模塊設(shè)計報告正文_第4頁
基于nRF24L01的無線通信模塊設(shè)計報告正文_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上1前言 本次我們?nèi)诵〗M設(shè)計的是無線通信模塊,根據(jù)設(shè)計要求我們選擇了無線收發(fā)模塊nRF24L01、單片機STC89C52、LCD1602和鍵盤模塊等作為本次設(shè)計的硬件需求。首先我們與老師一起討論了一些設(shè)計的相關(guān)事宜和設(shè)計思路。接下來我們一起畫好了模擬電路圖,在老師的幫助下我們對電路圖進行了補充和完善。完成這些基本工作后,在老師和同學(xué)的幫助下我們買回了自己所需的元器件。接著我們變分工完成了元器件的焊接連接和程序的編寫,然后便是模塊的上電調(diào)試,設(shè)計的答辯和設(shè)計報告的完善。我們本次之所以會選擇無線通信模塊的設(shè)計,是我們覺得無線通信技術(shù)是現(xiàn)代社會中一門很重要的技術(shù),我們掌握好

2、了這門技術(shù)對以后我們的工作生活都有很大的幫助。我們本次設(shè)計的無線通信模塊雖然只是我們的一次小小的體驗,但我們都知道無線通信在我們現(xiàn)在所處的信息時代是多么的重要,如今我們生活的方方面面無不與無線通信息息相關(guān)。我們所熟悉的手機、電腦、電視等等都與無線通信有著直接的聯(lián)系。甚至在某些高端領(lǐng)域方面無線通信技術(shù)能反映一個國家的科技水平和綜合國力。我們國家的無線通信技術(shù)雖然在世界上排在了前面的位置,但與一些發(fā)達國家相比我們?nèi)稳挥泻艽蟛罹?,如太空中有差不?0%的通信衛(wèi)星是美國的。當然我們本次設(shè)計的無線通信模塊只是很基礎(chǔ)的無線通信模塊,我們所達到的效果就是兩個模塊間能相互發(fā)送一些簡單的字符和數(shù)字。2總體方案設(shè)

3、計 本次設(shè)計我們考慮用C語言和匯編去實現(xiàn)模塊的無線通信功能,但我們編寫程序時發(fā)現(xiàn)匯編語言較難寫且可讀性差,因此我們選擇了用C語言作為本次的軟件實現(xiàn)。要實現(xiàn)無線通信功能,我們選擇了小巧輕便的無線收發(fā)模塊nRF24L01。在單片機方面考慮到52系列優(yōu)于51系列且很好購買,我們選擇了STC89C52單片機。在液晶顯示上,我們只要求能顯示一些簡單的數(shù)字和字母,我們選擇了LCD1602。鍵盤輸入方面我們選擇的是44矩陣鍵盤。以上各模塊的功能信息在后面都有更為具體的介紹。圖2.1無線通信模塊框圖3單元模塊設(shè)計3.1 nRF24L01的簡單介紹 nRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信

4、通信芯片,采用 FSK 調(diào)制,內(nèi)部集成 NORDIC 自己的 Enhanced Short Burst 協(xié)議??梢詫崿F(xiàn)點對點或是 1對 6 的無線通信。無線通信速度可以達到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預(yù)留 5 個 GPIO,1 個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為 MCU系統(tǒng)構(gòu)建無線通信功能。2.4GHz 全球開放ISM頻段,最大0dBm發(fā)射功率,免許可證使用支持六路通道的數(shù)據(jù)接收低工作電壓:1.9V 3.6V 低電壓工作高速率:2Mbps,由于空中傳輸時間很短

5、,極大的降低了無線傳輸中的碰撞現(xiàn)象(軟件設(shè)置1Mbps或者2Mbps的空中傳輸速率)多頻點:125頻點,滿足多點通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,1529mm(包括天線)低功耗:當工作在應(yīng)答模式通信時,快速的空中傳輸及啟動時間,極大的降低了電流消耗。低應(yīng)用成本:nRF24L01集成了所有與RF協(xié)議相關(guān)的高速信號處理部分,比如:自動重發(fā)丟失數(shù)據(jù)包和自動產(chǎn)生應(yīng)答信號等,nRF24L01的SPI接口可以利用單片機的硬件SPI口連接或用單片機I/O口進行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機。便于開發(fā):由于鏈路層完全集成在模塊上,非常便于開發(fā)。自

6、動重發(fā)功能,自動檢測和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時間及自動存儲未收到應(yīng)答信號的數(shù)據(jù)包自動應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動發(fā)送應(yīng)答信號,無須另行編程載波檢測固定頻率檢測內(nèi)置硬件CRC檢錯和點對多點通信地址控制數(shù)據(jù)包傳輸錯誤計數(shù)器及載波檢測功能可用于跳頻設(shè)置可同時設(shè)置六路接收通道地址,可有選擇性的打開接收通道標準插針Dip2.54MM間距接口,便于嵌入式應(yīng)用。 nRF24L01 功能框圖圖3.1nRF24L01 功能框圖 Fig.1 nRF24L01 BLOCK DIAGRAM nRF24L01 的框圖如 Fig.1所示,從單片機控制的角度來看,我們只需要關(guān)注 Fig.1 右面的六個控制和數(shù)據(jù)信號

7、,分別為 CSN、SCK、MISO、MOSI、IRQ、CE。 CSN:芯片的片選線,CSN為低電平芯片工作。 SCK:芯片控制的時鐘線(SPI 時鐘) MISO:芯片控制數(shù)據(jù)線(Master input slave output) MOSI:芯片控制數(shù)據(jù)線(Master output slave input) IRQ:中斷信號。無線通信過程中 MCU主要是通過 IRQ與 nRF24L01 進行通信。 CE: 芯片的模式控制線。 在 CSN 為低的情況下,CE 協(xié)同 nRF24L01 的 CONFIG 寄存器共同決定 nRF24L01 的狀態(tài)(參照 nRF24L01 的狀態(tài)機)。圖3.2 nRF

8、24L01實物圖nRF24L01的引腳級說明 圖3.3nRF24L01的引腳級說明 說明:(1)VCC腳接電壓范圍為1.9V 3.6V之間,不能在這個區(qū)間之外,超過3.6V將會燒毀模塊。推薦電壓3.3V左右。 (2)除電源VCC和接地端,其余腳都可以直接和普通的5V單片機IO口直接相連,無需電平轉(zhuǎn)換。當然對3V左右的單片機更加適用了。 (3)硬件上面沒有SPI的單片機也可以控制本模塊,用普通單片機IO口模擬SPI不需要單片機真正的串口介入,只需要普通的單片機IO口 就可以了,當然用串口也可以了3.2 STC89C52的簡單介紹 STC89C52是一個低電壓,高性能cmos8位單片機,片內(nèi)含8k

9、 bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標準MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,STC89C52單片機在電子行業(yè)中有著廣泛的應(yīng)用。 其主要特性功能: 1、兼容MCS51指令系統(tǒng) 2、8k可反復(fù)擦寫(大于1000次)Flash ROM; 3、32個雙向I/O口; 4、2568bit內(nèi)部RAM; 5、3個16位可編程定時/計數(shù)器中斷; 6、時鐘頻率0-24MHz; 7、2個串行中斷,可編程UART串行通道; 8、2個外部中斷源,共8個中斷源; 9、

10、2個讀寫中斷口線,3級加密位; 10、低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能; 11、有PDIP、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求。STC89C52的引腳圖 圖3.4 STC89C52的引腳圖3.3 LCD1602的簡單介紹 LCD1602是工業(yè)字符型液晶,能夠同時顯示1602即32個字符。(16列2行)1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個57或者511等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔每行之間也有間隔起到了字符間距和行間距的作用,正因為如此所以他不能顯

11、示圖形 。圖3.5LCD1602實物圖LCD1602的引腳圖圖3.6LCD1602的引腳圖3.4 其它的器件 當然我們本次設(shè)計還用到了一些其他的元器件,包括鍵盤、連接導(dǎo)線、排針、發(fā)光二極管、電阻、電容等等。3.5 各單元模塊的聯(lián)系 鍵盤輸入是人機交換的接口其主要功能是設(shè)置nRF24L01的工作模式和實現(xiàn)鍵盤輸入字符、數(shù)字等。單片機是主控模塊實現(xiàn)數(shù)據(jù)的儲存、處理,將各模塊聯(lián)系起來協(xié)調(diào)各模塊的工作。LCD1602主要功能就是顯示作用,將鍵盤輸入或接收到的信息顯示出來。4軟件設(shè)計我們搭建好硬件電路并確認無誤后,進行了軟件設(shè)計。本次無線通信模塊設(shè)計我們選擇了用C語言實現(xiàn)其功能,我們在PC機Keil u

12、Vision 4下編寫調(diào)試了C程序并將C程序下載到STC89C52單片機里進行了運行調(diào)試。圖5.1軟件實現(xiàn)的流程圖5系統(tǒng)調(diào)試 在調(diào)試環(huán)境中我們首先檢查了我們焊接的硬件電路是否有問題,如有無短路,有無虛焊等。確認硬件電路完善無誤后。我們再次對程序進行了檢查與調(diào)試,都發(fā)現(xiàn)沒有問題后,我們對模塊進行了上電并將程序下載進去運行調(diào)試。一開始我們發(fā)現(xiàn)并沒有達到預(yù)期的效果,發(fā)現(xiàn)鍵盤輸入與發(fā)送的字符數(shù)字不匹配,接搜端也無法搜到相應(yīng)的信號。經(jīng)過我們的仔細檢查和思考后,我們發(fā)現(xiàn)程序中定義的端口與硬件電路的端口沒有意義對應(yīng),程序的一些其他地方也并不是很完善,我們又對程序進行了改進,對程序的改進過程中,有時會遇到修改

13、程序后會出現(xiàn)錯誤,這是若去一行一行的運行調(diào)試程序就會很麻煩和花去大量的時間。這時就要認真檢查思考程序出錯在哪里,幾個人一起檢查就加快了效率,節(jié)約了大量時間,直到調(diào)試達到了我們所預(yù)期的效果。5.1主要問題及分析開始時我們想到的是在ISIS里畫好原理圖并仿真,但在ISIS上面我們沒有找到我們想要的元器件,因此我們只能直接去調(diào)試硬件電路。首先我們設(shè)計好程序并確認無誤后再將程序下載到單片機里進行硬件調(diào)試,結(jié)果我們發(fā)現(xiàn)LCD1602無顯示,經(jīng)過仔細的檢查思考后,我們發(fā)現(xiàn)我們所寫的程序與單片機和液晶屏的引腳并不是一一對應(yīng)的,經(jīng)過對程序和硬件電路的修改后液晶屏終于有了顯示。雖然液晶屏有了顯示,但我們的鍵盤輸

14、入,發(fā)送與接收還是存在問題??紤]到時間有限我們將原來的矩陣鍵盤輸入改為了較簡單的單一鍵盤輸入,這樣我們解決的鍵盤輸入問題。經(jīng)過反復(fù)的調(diào)試修改后,我們的無線通信模塊終于達到的預(yù)期的效果。5.2調(diào)試工具 此次調(diào)試過程中,我們主要用到了Keil uVision 4、STC-ISP.exe、AltiumDesigner。Keil uVision 4是用來編寫程序,并編譯成HEX文件,以便下載到單片機中。當有了HEX文件之后,要將此文件下載到單片機中,不可缺少的工具就是STC-ISP.exe。通過它,可以對單片機內(nèi)部的程序進行反復(fù)修改。AltiumDesigner是用來查看電路原理圖,并有繪制原理圖的功

15、能,在實際調(diào)試過程中,應(yīng)當將軟件與硬件相結(jié)合,所以電路圖的研究不可缺少。6系統(tǒng)功能、指標參數(shù)6.1系統(tǒng)能實現(xiàn)的功能本次我們?nèi)诵〗M所做的無線通信模塊主要能實現(xiàn)兩個模塊間的一些簡單通信,實現(xiàn)兩個模塊間一些簡單字符、數(shù)字的發(fā)送與接收。我們先對鍵盤輸入進行一些定義,如定義鍵盤輸入為一些字符或數(shù)字,但我們按相應(yīng)的建后就輸入相應(yīng)的字符或數(shù)字,輸入完成后,我們在按發(fā)送鍵,預(yù)先輸入的信息便發(fā)送了出去,接送的也會收到相應(yīng)的信息。6.2系統(tǒng)指標參數(shù)測試在系統(tǒng)指標參數(shù)的測試中,我們首先測試了兩個無線收發(fā)模塊間能傳輸?shù)姆秶?,?jīng)過我們多次的改變兩個模塊的距離后,我們發(fā)現(xiàn)兩個模塊能傳輸?shù)淖畲缶嚯x約為10米,在穿透效果的

16、測試中,我們發(fā)現(xiàn)兩個模塊間可以穿過一壁普通的墻,當兩個模塊間隔有兩面及兩面以上的普通墻時,兩個模塊間就很難傳輸信號了。我們試圖測試模塊的抗電磁干擾能力的測試是,我們發(fā)現(xiàn)很找到一個精確的量來描述,我們大致得出在較弱和頻率與我們用的nRF24L01的頻率相差較大時的干擾不明顯,但當電磁干擾較強很干擾波頻率接近nRF24L01的頻率時的干擾較為強烈。6.3系統(tǒng)的指標功能及參數(shù)分析nRF24L01的無線速率達到2 Mbit/s,SPI接口速率為08 Mbit/s,具自動應(yīng)答機制,極大地降低丟包率,完全滿足了我們本次設(shè)計的需求。將nRF24L01配置成增強型ShockBurst模式,使得雙向鏈接協(xié)議執(zhí)行

17、更為簡易有效。發(fā)送方要求終端設(shè)備在接收數(shù)據(jù)后有應(yīng)答信號,以便發(fā)送方檢測有無數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失則通過重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。單片機內(nèi)部EEPROM應(yīng)用子程序進行扇區(qū)的擦除、寫入以及讀出功能,實現(xiàn)系統(tǒng)信息的讀取保存。nRF24L01在外置天線時傳輸距離可以到達25m,我們本次沒有使用外置天線,傳輸?shù)木嚯x約為10m,一切都滿足我們本次設(shè)計的需求。 7結(jié)論 本次智能測控應(yīng)用系統(tǒng)設(shè)計,我們?nèi)诵〗M成功的的完成了無線通信模塊的設(shè)計與制作。雖然我們在模塊的設(shè)計、制作、調(diào)試過程中也遇到了不少困難,但在老師和同學(xué)的細心指導(dǎo)幫助之下和我們自己的努力,最終還是達到了預(yù)期的效果,完成了本次的智能化測控應(yīng)用系

18、統(tǒng)設(shè)計。我們本次所設(shè)計的無線通信模塊在無線通信領(lǐng)域有著很大的發(fā)展空間,nRF24L01是一種高效率低成本的無線收發(fā)模塊,125頻點,滿足多點通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,15x29mm(包括天線)低功耗:當工作在應(yīng)答模式通信時,快速的空中傳輸及啟動時間,極大的降低了電流消耗。低應(yīng)用成本:nRF24L01集成了所有與RF協(xié)議相關(guān)的高速信號處理部分,比如:自動重發(fā)丟失數(shù)據(jù)包和自動產(chǎn)生應(yīng)答信號等,nRF24L01的SPI接口可以利用單片機的硬件SPI口連接或用單片機I/O口進行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機。便于開發(fā):由于鏈路層完全

19、集成在模塊上,非常便于開發(fā)。自動重發(fā)功能,自動檢測和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時間及自動存儲未收到應(yīng)答信號的數(shù)據(jù)包自動應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動發(fā)送應(yīng)答信號,無須另行編程載波檢測固定頻率檢測內(nèi)置硬件CRC檢錯和點對多點通信地址控制數(shù)據(jù)包傳輸錯誤計數(shù)器及載波檢測功能可用于跳頻設(shè)置可同時設(shè)置六路接收通道地址,可有選擇性的打開接收通道標準插針Dip2.54MM間距接口,便于嵌入式應(yīng)用。因此基于nRF24L01的無線通信在當今我們的生活中有著極大的發(fā)展空間。8總結(jié)與體會 在本次智能化測控應(yīng)用系統(tǒng)設(shè)計中我們收獲了不少。在之前我們都是學(xué)習了書本上的東西,而很少將其應(yīng)用到實際中去,雖然之前我們也做過一

20、些課程設(shè)計、工藝實習之類的,但這次的課程設(shè)計更加從實。我們從選取題目,畫原理圖到購買元器件再到焊接電路還有后面的調(diào)試測試工作我們都一一的親身經(jīng)歷并學(xué)到了不少課本上學(xué)不到的東西。以前我們學(xué)習課本上的知識,覺得要將其應(yīng)用到實際中會是一件較為輕松的事,也看其他人做的東西很有意義,但我們自己實際去設(shè)計制作時,才發(fā)現(xiàn)了要做好一個作品是那么的不容易,自己去做時,才發(fā)現(xiàn)自己的種種不足,動起手來是那么的笨拙。老師常常給我們講動手能力對我們自動化的同學(xué)有多么種要,因此我們也都一直想著要提高我們的動手能力,這次實習對我們來說是一次難的機會,對于我們提高自己的動手能力有很大的幫助。我們不僅學(xué)到了怎樣去改進、優(yōu)化、美

21、化電路布局,也掌握更多調(diào)試、測試電路的方法,也學(xué)到了不少怎樣去選取合適的元器件的方法。在以后的學(xué)習工作做,我們要不斷的提高自己的動手能力,就要不斷親身去設(shè)計、自作實際的東西,這樣才不會被時代所淘汰成為對社會有用的人。9參考文獻1趙亮、候國銳.單片機C語言編程與實例M.北京:人民郵電出版社,2003年9月2海創(chuàng).無線收發(fā)模塊nRF24L01開發(fā)包資料J.海創(chuàng)電子科技,2010年3張毅剛.單片機原理及應(yīng)用M.北京:高等教育出版社,2010年11月4康華光.電子技術(shù)基礎(chǔ)模擬部分(第五版)M.北京:高等教育出版社,2010年5月5康華光.電子技術(shù)基礎(chǔ)數(shù)字部分(第五版)M.北京:高等教育出版社,2010

22、年11月6謝自美.電子線路設(shè)計.實驗.測試M.武漢:華中科技大學(xué)出版社,2009年7月 10附錄10.1相關(guān)設(shè)計圖圖10.1無線收發(fā)模塊PCB圖圖10.2無線收發(fā)模塊電路原理總圖圖10.3正5V電源模塊圖圖10.3復(fù)位電路模塊圖圖10.4程序下載模塊接口圖圖10.5正3V電源模塊圖圖10.6單片機接口圖圖10.3顯示仿真圖圖10.4無線收發(fā)模塊實物圖10.2相關(guān)的程序無線收發(fā)模塊發(fā)送程序#include #include /*IO端口定義sbit MISO=P15;sbit MOSI=P12;sbit SCK=P13;sbit CE=P11;sbit CSN=P10;sbit IRQ=P14;

23、sbit lcdrs =P20;sbit lcden =P21;sbit key1 =P24;/發(fā)送數(shù)據(jù)鍵sbit key2 =P25;/接收數(shù)據(jù)鍵sbit key3 =P26;/清空鍵unsigned char num1,num2;unsigned char tx_Buf=0,0,0; /待發(fā)送數(shù)據(jù)unsigned char rx_Buf=0,0; /待接受數(shù)據(jù)賦0,以便接受數(shù)據(jù)/*nRF24L01*#define TX_ADR_WIDTH 5 / 5 uints TX address width /發(fā)送地址寬度#define RX_ADR_WIDTH 5 / 5 uints RX addr

24、ess width /接收地址寬度#define TX_PLOAD_WIDTH 3 / 20 uints TX payload /發(fā)送數(shù)據(jù)寬度#define RX_PLOAD_WIDTH 2 / 20 uints TX payload /接受數(shù)據(jù)寬度unsigned char const TX_ADDRESSTX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /本地地址unsigned char const RX_ADDRESSRX_ADR_WIDTH= 0x34,0x43,0x10,0x10,0x01; /接收地址/*nRF24L01寄存器指令#define RE

25、AD_REG 0x00 / 讀寄存器指令#define WRITE_REG 0x20 / 寫寄存器指令#define RD_RX_PLOAD 0x61 / 讀取接收數(shù)據(jù)指令#define WR_TX_PLOAD 0xA0 / 寫待發(fā)數(shù)據(jù)指令#define FLUSH_TX 0xE1 / 沖洗發(fā)送 FIFO指令#define FLUSH_RX 0xE2 / 沖洗接收 FIFO指令#define REUSE_TX_PL 0xE3 / 定義重復(fù)裝載數(shù)據(jù)指令#define NOP 0xFF / 保留/*SPI(nRF24L01)寄存器地址#define CONFIG 0x00 / 配置收發(fā)狀態(tài),CRC

26、校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#define EN_AA 0x01 / 自動應(yīng)答功能設(shè)置#define EN_RXADDR 0x02 / 可用信道設(shè)置#define SETUP_AW 0x03 / 收發(fā)地址寬度設(shè)置#define SETUP_RETR 0x04 / 自動重發(fā)功能設(shè)置#define RF_CH 0x05 / 工作頻率設(shè)置#define RF_SETUP 0x06 / 發(fā)射速率、功耗功能設(shè)置#define STATUS 0x07 / 狀態(tài)寄存器#define OBSERVE_TX 0x08 / 發(fā)送監(jiān)測功能#define CD 0x09 / 地址檢測 #define RX_ADDR_

27、P0 0x0A / 頻道0接收數(shù)據(jù)地址#define RX_ADDR_P1 0x0B / 頻道1接收數(shù)據(jù)地址#define RX_ADDR_P2 0x0C / 頻道2接收數(shù)據(jù)地址#define RX_ADDR_P3 0x0D / 頻道3接收數(shù)據(jù)地址#define RX_ADDR_P4 0x0E / 頻道4接收數(shù)據(jù)地址#define RX_ADDR_P5 0x0F / 頻道5接收數(shù)據(jù)地址#define TX_ADDR 0x10 / 發(fā)送地址寄存器#define RX_PW_P0 0x11 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P1 0x12 / 接收頻道0接收數(shù)據(jù)長度#defin

28、e RX_PW_P2 0x13 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P3 0x14 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P4 0x15 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P5 0x16 / 接收頻道0接收數(shù)據(jù)長度#define FIFO_STATUS 0x17 / FIFO棧入棧出狀態(tài)寄存器設(shè)置/*/函數(shù)聲明*/*/void write_com(unsigned char com); void write_date(unsigned char date);void Delay(unsigned int s);void inerDelay_

29、us(unsigned char n);void init_nRF24L01(void);unsigned int SPI_RW(unsigned int uuchar);unsigned char SPI_Read(unsigned char reg);void SetRX_Mode(void);void tetRX_Mode(void);unsigned int SPI_RW_Reg(unsigned char reg, unsigned char value);unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf

30、, unsigned char uchars);unsigned char nRF24L01_RxPacket(unsigned char*rx_buf);void nRF24L01_TxPacket(unsigned char *tx_buf);/*長延時void Delay(unsigned int s) unsigned int i; for(i=0; is; i+); for(i=0; i0;n-) _nop_();/*/*lcd1602寫命令/*/void write_com(unsigned char com) lcdrs=0;P0=com;Delay(5);lcden=1;Del

31、ay(5);lcden=0;/*/*lcd1602初始化/*/void init() lcden=0; write_com(0x38); write_com(0x0c); write_com(0x06); write_com(0x01);/*/*lcd1602寫數(shù)據(jù)/*/void write_date(unsigned char date) lcdrs=0;P0=date;Delay(5);lcden=1;Delay(5);lcden=0;/*/*nRF24L01初始化/*/void init_nRF24L01(void) inerDelay_us(100); CE=0; / chip ena

32、ble CSN=1; / Spi disable SCK=0; / Spi clock line init high/*/*函數(shù):uint SPI_RW(uint uchar)/*功能:nRF24L01的SPI寫時序/*/unsigned int SPI_RW(unsigned int uuchar) unsigned int bit_ctr; for(bit_ctr=0;bit_ctr8;bit_ctr+) / output 8-bit MOSI = (uuchar & 0x80); / output uchar, MSB to MOSI uuchar = (uuchar 1); / shi

33、ft next bit into MSB. SCK = 1; / Set SCK high. uuchar |= MISO; / capture current MISO bit SCK = 0; / .then set SCK low again return(uuchar); / return read uchar/*/*函數(shù):uchar SPI_Read(uchar reg)/*功能:nRF24L01的SPI時序/*/unsigned char SPI_Read(unsigned char reg) unsigned char reg_val; CSN = 0; / CSN low, i

34、nitialize SPI communication. SPI_RW(reg); / Select register to read from. reg_val = SPI_RW(0); / .then read registervalue CSN = 1; / CSN high, terminate SPI communication return(reg_val); / return register value/*/*功能:nRF24L01讀寫寄存器函數(shù)/*/unsigned int SPI_RW_Reg(unsigned char reg, unsigned char value)

35、unsigned int status; CSN = 0; / CSN low, init SPI transaction status = SPI_RW(reg); / select register SPI_RW(value); / .and write value to it. CSN = 1; / CSN high again return(status); / return nRF24L01 status uchar/*/*函數(shù):uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于讀數(shù)據(jù),reg:為寄存器地址,

36、pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個數(shù)/*/unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars) unsigned int status,uchar_ctr; CSN = 0; / Set CSN low, init SPI tranaction status = SPI_RW(reg); / Select register to write to and read status uchar for(uchar_ctr=0;uchar_ctruchars;

37、uchar_ctr+) pBufuchar_ctr = SPI_RW(0); / CSN = 1; return(status); / return nRF24L01 status uchar/*/*函數(shù):uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)/*功能: 用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)/*/unsigned int SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars) un

38、signed int status,uchar_ctr; CSN = 0; /SPI使能 status = SPI_RW(reg); for(uchar_ctr=0; uchar_ctruchars; uchar_ctr+) / SPI_RW(*pBuf+); CSN = 1; /關(guān)閉SPI return(status); / /*/*函數(shù):void SetTX_Mode(void)/*功能:數(shù)據(jù)發(fā)送設(shè)置 /*/void SetTX_Mode(void) CE=0; SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); /

39、寫本地地址 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); / 寫接收端地址 SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 頻道0自動 ACK應(yīng)答允許 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 40); / 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_

40、PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為8字節(jié) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送 CE = 1; inerDelay_us(130);/*/*函數(shù):void SetRX_Mode(void)/*功能:數(shù)據(jù)接收設(shè)置*/ void SetRX_Mode(void)CE=0;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDR

41、ESS, TX_ADR_WIDTH); SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 頻道0自動 ACK應(yīng)答允許 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 40); / 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為8字節(jié) SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); /設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F);CE=1;/*/*函數(shù):unsigned char nRF24L01_RxPacket(unsigned char*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論