版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 1前言</b></p><p> 本次我們?nèi)诵〗M設(shè)計的是無線通信模塊,根據(jù)設(shè)計要求我們選擇了無線收發(fā)模塊nRF24L01、單片機(jī)STC89C52、LCD1602和鍵盤模塊等作為本次設(shè)計的硬件需求。首先我們與老師一起討論了一些設(shè)計的相關(guān)事宜和設(shè)計思路。接下來我們一起畫好了模擬電路圖,在老師的幫助下我們對電路圖進(jìn)行了補充和完善。完成這些基本工作后,在老師和同學(xué)的
2、幫助下我們買回了自己所需的元器件。接著我們變分工完成了元器件的焊接連接和程序的編寫,然后便是模塊的上電調(diào)試,設(shè)計的答辯和設(shè)計報告的完善。</p><p> 我們本次之所以會選擇無線通信模塊的設(shè)計,是我們覺得無線通信技術(shù)是現(xiàn)代社會中一門很重要的技術(shù),我們掌握好了這門技術(shù)對以后我們的工作生活都有很大的幫助。我們本次設(shè)計的無線通信模塊雖然只是我們的一次小小的體驗,但我們都知道無線通信在我們現(xiàn)在所處的信息時代是多么的重
3、要,如今我們生活的方方面面無不與無線通信息息相關(guān)。我們所熟悉的手機(jī)、電腦、電視等等都與無線通信有著直接的聯(lián)系。甚至在某些高端領(lǐng)域方面無線通信技術(shù)能反映一個國家的科技水平和綜合國力。我們國家的無線通信技術(shù)雖然在世界上排在了前面的位置,但與一些發(fā)達(dá)國家相比我們?nèi)稳挥泻艽蟛罹?,如太空中有差不?0%的通信衛(wèi)星是美國的。</p><p> 當(dāng)然我們本次設(shè)計的無線通信模塊只是很基礎(chǔ)的無線通信模塊,我們所達(dá)到的效果就是兩個
4、模塊間能相互發(fā)送一些簡單的字符和數(shù)字。</p><p><b> 2總體方案設(shè)計 </b></p><p> 本次設(shè)計我們考慮用C語言和匯編去實現(xiàn)模塊的無線通信功能,但我們編寫程序時發(fā)現(xiàn)匯編語言較難寫且可讀性差,因此我們選擇了用C語言作為本次的軟件實現(xiàn)。要實現(xiàn)無線通信功能,我們選擇了小巧輕便的無線收發(fā)模塊nRF24L01。在單片機(jī)方面考慮到52系列優(yōu)于51系列且很
5、好購買,我們選擇了STC89C52單片機(jī)。在液晶顯示上,我們只要求能顯示一些簡單的數(shù)字和字母,我們選擇了LCD1602。鍵盤輸入方面我們選擇的是4×4矩陣鍵盤。以上各模塊的功能信息在后面都有更為具體的介紹。</p><p> 圖2.1無線通信模塊框圖</p><p><b> 3單元模塊設(shè)計</b></p><p> 3.1 n
6、RF24L01的簡單介紹</p><p> nRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部集成 NORDIC 自己的 Enhanced Short Burst 協(xié)議??梢詫崿F(xiàn)點對點或是 1對 6 的無線通信。無線通信速度可以達(dá)到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機(jī)愛好者只需要為單片機(jī)系
7、統(tǒng)預(yù)留 5 個 GPIO,1 個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為 MCU系統(tǒng)構(gòu)建無線通信功能。</p><p> 2.4GHz 全球開放ISM頻段,最大0dBm發(fā)射功率,免許可證使用支持六路通道的數(shù)據(jù)接收低工作電壓:1.9V ~3.6V 低電壓工作高速率:2Mbps,由于空中傳輸時間很短,極大的降低了無線傳輸中的碰撞現(xiàn)象(軟件設(shè)置1Mbps或者2Mbps的空中傳輸速率)多頻點:125
8、頻點,滿足多點通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,15×29mm(包括天線)低功耗:當(dāng)工作在應(yīng)答模式通信時,快速的空中傳輸及啟動時間,極大的降低了電流消耗。低應(yīng)用成本:nRF24L01集成了所有與RF協(xié)議相關(guān)的高速信號處理部分,比如:自動重發(fā)丟失數(shù)據(jù)包和自動產(chǎn)生應(yīng)答信號等,nRF24L01的SPI接口可以利用單片機(jī)的硬件SPI口連接或用單片機(jī)I/O口進(jìn)行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便
9、于使用低成本單片機(jī)。便于開發(fā):由于鏈路層完全集成在模塊上,非常便于開發(fā)。自動重發(fā)功能,自動檢測和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時間及自動存儲未收到應(yīng)答信號的數(shù)據(jù)包自動應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動發(fā)送應(yīng)答信號,無須另行編程載波檢測—固定頻率檢測內(nèi)置硬件CRC檢錯和點對多點通信地址控制數(shù)據(jù)包傳輸錯誤計</p><p> nRF24L01 功能框圖</p><p> 圖3.1nRF24L01
10、 功能框圖 </p><p> Fig.1 nRF24L01 BLOCK DIAGRAM </p><p> nRF24L01 的框圖如 Fig.1所示,從單片機(jī)控制的角度來看,我們只需要關(guān)注 Fig.1 右面</p><p> 的六個控制和數(shù)據(jù)信號,分別為 CSN、SCK、MISO、MOSI、I
11、RQ、CE。 </p><p> CSN:芯片的片選線,CSN為低電平芯片工作。 </p><p> SCK:芯片控制的時鐘線(SPI 時鐘) </p><p> MISO:芯片控制數(shù)據(jù)線(Master input slave output) </p><p> MOSI:芯片控制數(shù)據(jù)線(Master output slave inp
12、ut) </p><p> IRQ:中斷信號。無線通信過程中 MCU主要是通過 IRQ與 nRF24L01 進(jìn)行通信。 </p><p> CE: 芯片的模式控制線。 在 CSN 為低的情況下,CE 協(xié)同 nRF24L01 的 CONFIG 寄</p><p> 存器共同決定 nRF24L01 的狀態(tài)(參照 nRF24L01 的狀態(tài)機(jī))。</p>
13、<p> 圖3.2 nRF24L01實物圖</p><p> nRF24L01的引腳級說明 </p><p> 圖3.3nRF24L01的引腳級說明</p><p> 說明:(1)VCC腳接電壓范圍為1.9V ~3.6V之間,不能在這個區(qū)間之外,超過3.6V將會燒毀模塊。推薦電壓3.3V左右。 </p><p> (2
14、)除電源VCC和接地端,其余腳都可以直接和普通的5V單片機(jī)IO口直接相連,無需電平轉(zhuǎn)換。當(dāng)然對3V左右的單片機(jī)更加適用了。 </p><p> (3)硬件上面沒有SPI的單片機(jī)也可以控制本模塊,用普通單片機(jī)IO口模擬SPI不需要單片機(jī)真正的串口介入,只需要普通的單片機(jī)IO口 就可以了,當(dāng)然用串口也可以了</p><p> 3.2 STC89C52的簡單介紹</p>&l
15、t;p> STC89C52是一個低電壓,高性能cmos8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲器(RAM),器件采用ATMEL公司的高密度、非易失性存儲技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲單元,STC89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。</p><p> 其主要特性功能: 1、兼容M
16、CS51指令系統(tǒng) 2、8k可反復(fù)擦寫(大于1000次)Flash ROM; 3、32個雙向I/O口; 4、256×8bit內(nèi)部RAM; 5、3個16位可編程定時/計數(shù)器中斷; 6、時鐘頻率0-24MHz; 7、2個串行中斷,可編程UART串行通道; 8、2個外部中斷源,共8個中斷源; 9、2個讀寫中斷口線,3級加密位; 10、低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能; 11、有PDI
17、P、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p> STC89C52的引腳圖 圖3.4 STC89C52的引腳圖</p><p> 3.3 LCD1602的簡單介紹</p><p> LCD1602是工業(yè)字符型液晶,能夠同時顯示16×02即32個字符。
18、(16列2行)1602液晶也叫1602字符型液晶它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊它有若干個5×7或者5×11等點陣字符位組成,每個點陣字符位都可以顯示一個字符。每位之間有一個點距的間隔每行之間也有間隔起到了字符間距和行間距的作用,正因為如此所以他不能顯示圖形 。</p><p> 圖3.5LCD1602實物圖</p><p> LCD1602的
19、引腳圖</p><p> 圖3.6LCD1602的引腳圖</p><p> 3.4 其它的器件</p><p> 當(dāng)然我們本次設(shè)計還用到了一些其他的元器件,包括鍵盤、連接導(dǎo)線、排針、發(fā)光二極管、電阻、電容等等。</p><p> 3.5 各單元模塊的聯(lián)系</p><p> 鍵盤輸入是人機(jī)交換的接口其主要功
20、能是設(shè)置nRF24L01的工作模式和實現(xiàn)鍵盤輸入字符、數(shù)字等。單片機(jī)是主控模塊實現(xiàn)數(shù)據(jù)的儲存、處理,將各模塊聯(lián)系起來協(xié)調(diào)各模塊的工作。LCD1602主要功能就是顯示作用,將鍵盤輸入或接收到的信息顯示出來。</p><p><b> 4軟件設(shè)計</b></p><p> 我們搭建好硬件電路并確認(rèn)無誤后,進(jìn)行了軟件設(shè)計。本次無線通信模塊設(shè)計我們選擇了用C語言實現(xiàn)其功能
21、,我們在PC機(jī)Keil uVision 4下編寫調(diào)試了C程序并將C程序下載到STC89C52單片機(jī)里進(jìn)行了運行調(diào)試。</p><p> 圖5.1軟件實現(xiàn)的流程圖</p><p><b> 5系統(tǒng)調(diào)試</b></p><p> 在調(diào)試環(huán)境中我們首先檢查了我們焊接的硬件電路是否有問題,如有無短路,有無虛焊等。確認(rèn)硬件電路完善無誤后。我們再次對
22、程序進(jìn)行了檢查與調(diào)試,都發(fā)現(xiàn)沒有問題后,我們對模塊進(jìn)行了上電并將程序下載進(jìn)去運行調(diào)試。一開始我們發(fā)現(xiàn)并沒有達(dá)到預(yù)期的效果,發(fā)現(xiàn)鍵盤輸入與發(fā)送的字符數(shù)字不匹配,接搜端也無法搜到相應(yīng)的信號。</p><p> 經(jīng)過我們的仔細(xì)檢查和思考后,我們發(fā)現(xiàn)程序中定義的端口與硬件電路的端口沒有意義對應(yīng),程序的一些其他地方也并不是很完善,我們又對程序進(jìn)行了改進(jìn),對程序的改進(jìn)過程中,有時會遇到修改程序后會出現(xiàn)錯誤,這是若去一行一行
23、的運行調(diào)試程序就會很麻煩和花去大量的時間。這時就要認(rèn)真檢查思考程序出錯在哪里,幾個人一起檢查就加快了效率,節(jié)約了大量時間,直到調(diào)試達(dá)到了我們所預(yù)期的效果。</p><p> 5.1主要問題及分析</p><p> 開始時我們想到的是在ISIS里畫好原理圖并仿真,但在ISIS上面我們沒有找到我們想要的元器件,因此我們只能直接去調(diào)試硬件電路。首先我們設(shè)計好程序并確認(rèn)無誤后再將程序下載到單片
24、機(jī)里進(jìn)行硬件調(diào)試,結(jié)果我們發(fā)現(xiàn)LCD1602無顯示,經(jīng)過仔細(xì)的檢查思考后,我們發(fā)現(xiàn)我們所寫的程序與單片機(jī)和液晶屏的引腳并不是一一對應(yīng)的,經(jīng)過對程序和硬件電路的修改后液晶屏終于有了顯示。雖然液晶屏有了顯示,但我們的鍵盤輸入,發(fā)送與接收還是存在問題??紤]到時間有限我們將原來的矩陣鍵盤輸入改為了較簡單的單一鍵盤輸入,這樣我們解決的鍵盤輸入問題。經(jīng)過反復(fù)的調(diào)試修改后,我們的無線通信模塊終于達(dá)到的預(yù)期的效果。</p><p&g
25、t;<b> 5.2調(diào)試工具</b></p><p> 此次調(diào)試過程中,我們主要用到了Keil uVision 4、STC-ISP.exe、AltiumDesigner。Keil uVision 4是用來編寫程序,并編譯成HEX文件,以便下載到單片機(jī)中。當(dāng)有了HEX文件之后,要將此文件下載到單片機(jī)中,不可缺少的工具就是STC-ISP.exe。通過它,可以對單片機(jī)內(nèi)部的程序進(jìn)行反復(fù)修改。A
26、ltiumDesigner是用來查看電路原理圖,并有繪制原理圖的功能,在實際調(diào)試過程中,應(yīng)當(dāng)將軟件與硬件相結(jié)合,所以電路圖的研究不可缺少。</p><p> 6系統(tǒng)功能、指標(biāo)參數(shù)</p><p> 6.1系統(tǒng)能實現(xiàn)的功能</p><p> 本次我們?nèi)诵〗M所做的無線通信模塊主要能實現(xiàn)兩個模塊間的一些簡單通信,實現(xiàn)兩個模塊間一些簡單字符、數(shù)字的發(fā)送與接收。我們先
27、對鍵盤輸入進(jìn)行一些定義,如定義鍵盤輸入為一些字符或數(shù)字,但我們按相應(yīng)的建后就輸入相應(yīng)的字符或數(shù)字,輸入完成后,我們在按發(fā)送鍵,預(yù)先輸入的信息便發(fā)送了出去,接送的也會收到相應(yīng)的信息。</p><p> 6.2系統(tǒng)指標(biāo)參數(shù)測試</p><p> 在系統(tǒng)指標(biāo)參數(shù)的測試中,我們首先測試了兩個無線收發(fā)模塊間能傳輸?shù)姆秶?jīng)過我們多次的改變兩個模塊的距離后,我們發(fā)現(xiàn)兩個模塊能傳輸?shù)淖畲缶嚯x約為10
28、米,在穿透效果的測試中,我們發(fā)現(xiàn)兩個模塊間可以穿過一壁普通的墻,當(dāng)兩個模塊間隔有兩面及兩面以上的普通墻時,兩個模塊間就很難傳輸信號了。我們試圖測試模塊的抗電磁干擾能力的測試是,我們發(fā)現(xiàn)很找到一個精確的量來描述,我們大致得出在較弱和頻率與我們用的nRF24L01的頻率相差較大時的干擾不明顯,但當(dāng)電磁干擾較強很干擾波頻率接近nRF24L01的頻率時的干擾較為強烈。</p><p> 6.3系統(tǒng)的指標(biāo)功能及參數(shù)分析&
29、lt;/p><p> nRF24L01的無線速率達(dá)到2 Mbit/s,SPI接口速率為0~8 Mbit/s,具自動應(yīng)答機(jī)制,極大地降低丟包率,完全滿足了我們本次設(shè)計的需求。將nRF24L01配置成增強型ShockBurst模式,使得雙向鏈接協(xié)議執(zhí)行更為簡易有效。發(fā)送方要求終端設(shè)備在接收數(shù)據(jù)后有應(yīng)答信號,以便發(fā)送方檢測有無數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失則通過重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。單片機(jī)內(nèi)部EEPROM應(yīng)用子程序進(jìn)行扇
30、區(qū)的擦除、寫入以及讀出功能,實現(xiàn)系統(tǒng)信息的讀取保存。nRF24L01在外置天線時傳輸距離可以到達(dá)25m,我們本次沒有使用外置天線,傳輸?shù)木嚯x約為10m,一切都滿足我們本次設(shè)計的需求。</p><p><b> 7結(jié)論</b></p><p> 本次智能測控應(yīng)用系統(tǒng)設(shè)計,我們?nèi)诵〗M成功的的完成了無線通信模塊的設(shè)計與制作。雖然我們在模塊的設(shè)計、制作、調(diào)試過程中也遇到
31、了不少困難,但在老師和同學(xué)的細(xì)心指導(dǎo)幫助之下和我們自己的努力,最終還是達(dá)到了預(yù)期的效果,完成了本次的智能化測控應(yīng)用系統(tǒng)設(shè)計。我們本次所設(shè)計的無線通信模塊在無線通信領(lǐng)域有著很大的發(fā)展空間,nRF24L01是一種高效率低成本的無線收發(fā)模塊,125頻點,滿足多點通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,15x29mm(包括天線)低功耗:當(dāng)工作在應(yīng)答模式通信時,快速的空中傳輸及啟動時間,極大的降低了電流消耗。低應(yīng)用成本:nRF2
32、4L01集成了所有與RF協(xié)議相關(guān)的高速信號處理部分,比如:自動重發(fā)丟失數(shù)據(jù)包和自動產(chǎn)生應(yīng)答信號等,nRF24L01的SPI接口可以利用單片機(jī)的硬件SPI口連接或用單片機(jī)I/O口進(jìn)行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機(jī)。便于開發(fā):由于鏈路層完全集成在模塊上,非常便于開發(fā)。自動重發(fā)功能,自動檢測和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時間及自動存儲未收到應(yīng)答信號的數(shù)據(jù)包自動應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動發(fā)送應(yīng)答信號&
33、lt;/p><p> 率檢測內(nèi)置硬件CRC檢錯和點對多點通信地址控制數(shù)據(jù)包傳輸錯誤計數(shù)器及載波檢測功能可用于跳頻設(shè)置可同時設(shè)置六路接收通道地址,可有選擇性的打開接收通道標(biāo)準(zhǔn)插針Dip2.54MM間距接口,便于嵌入式應(yīng)用。因此基于nRF24L01的無線通信在當(dāng)今我們的生活中有著極大的發(fā)展空間。</p><p><b> 8總結(jié)與體會</b></p><
34、;p> 在本次智能化測控應(yīng)用系統(tǒng)設(shè)計中我們收獲了不少。在之前我們都是學(xué)習(xí)了書本上的東西,而很少將其應(yīng)用到實際中去,雖然之前我們也做過一些課程設(shè)計、工藝實習(xí)之類的,但這次的課程設(shè)計更加從實。我們從選取題目,畫原理圖到購買元器件再到焊接電路還有后面的調(diào)試測試工作我們都一一的親身經(jīng)歷并學(xué)到了不少課本上學(xué)不到的東西。以前我們學(xué)習(xí)課本上的知識,覺得要將其應(yīng)用到實際中會是一件較為輕松的事,也看其他人做的東西很有意義,但我們自己實際去設(shè)計制作
35、時,才發(fā)現(xiàn)了要做好一個作品是那么的不容易,自己去做時,才發(fā)現(xiàn)自己的種種不足,動起手來是那么的笨拙。老師常常給我們講動手能力對我們自動化的同學(xué)有多么種要,因此我們也都一直想著要提高我們的動手能力,這次實習(xí)對我們來說是一次難的機(jī)會,對于我們提高自己的動手能力有很大的幫助。我們不僅學(xué)到了怎樣去改進(jìn)、優(yōu)化、美化電路布局,也掌握更多調(diào)試、測試電路的方法,也學(xué)到了不少怎樣去選取合適的元器件的方法。在以后的學(xué)習(xí)工作做,我們要不斷的提高自己的動手能力,
36、就要不斷親身去設(shè)計、自作實際的東西,這樣才不會被時代所淘汰成為對社會有用的人。</p><p><b> 9參考文獻(xiàn)</b></p><p> [1]趙亮、候國銳.單片機(jī)C語言編程與實例[M].北京:人民郵電出版社,2003年9月</p><p> [2]海創(chuàng).無線收發(fā)模塊nRF24L01開發(fā)包資料[J].海創(chuàng)電子科技,2010年<
37、/p><p> [3]張毅剛.單片機(jī)原理及應(yīng)用[M].北京:高等教育出版社,2010年11月</p><p> [4]康華光.電子技術(shù)基礎(chǔ)模擬部分(第五版)[M].北京:高等教育出版社,2010年5月</p><p> [5]康華光.電子技術(shù)基礎(chǔ)數(shù)字部分(第五版)[M].北京:高等教育出版社,2010年11月</p><p> [6]謝自
38、美.電子線路設(shè)計.實驗.測試[M].武漢:華中科技大學(xué)出版社,2009年7月</p><p><b> 10附錄</b></p><p><b> 10.1相關(guān)設(shè)計圖</b></p><p> 圖10.1無線收發(fā)模塊PCB圖</p><p> 圖10.2無線收發(fā)模塊電路原理總圖</p&
39、gt;<p> 圖10.3正5V電源模塊圖</p><p> 圖10.3復(fù)位電路模塊圖</p><p> 圖10.4程序下載模塊接口圖</p><p> 圖10.5正3V電源模塊圖</p><p> 圖10.6單片機(jī)接口圖</p><p> 圖10.3顯示仿真圖</p><
40、p> 圖10.4無線收發(fā)模塊實物圖</p><p><b> 10.2相關(guān)的程序</b></p><p> 無線收發(fā)模塊發(fā)送程序</p><p> #include <reg52.h></p><p> #include <intrins.h></p><p&g
41、t; //****************************************IO端口定義</p><p> sbit MISO=P1^5;</p><p> sbit MOSI=P1^2;</p><p> sbit SCK=P1^3;</p><p> sbit CE=P1^1
42、;</p><p> sbit CSN=P1^0;</p><p> sbit IRQ=P1^4;</p><p> sbit lcdrs =P2^0;</p><p> sbit lcden =P2^1;</p><p> sbit key1 =P2^4;/
43、/發(fā)送數(shù)據(jù)鍵</p><p> sbit key2 =P2^5;//接收數(shù)據(jù)鍵</p><p> sbit key3 =P2^6;//清空鍵</p><p> unsigned char num1,num2;</p><p> unsigned char tx_Buf[]={0,0,0}; //待發(fā)送數(shù)據(jù)&
44、lt;/p><p> unsigned char rx_Buf[]={0,0}; //待接受數(shù)據(jù)賦0,以便接受數(shù)據(jù)</p><p> //*********************************************nRF24L01************************</p><p> #define TX_ADR_WIDTH
45、 5 // 5 uints TX address width //發(fā)送地址寬度</p><p> #define RX_ADR_WIDTH 5 // 5 uints RX address width //接收地址寬度</p><p> #define TX_PLOAD_WIDTH 3 // 20 uints TX p
46、ayload //發(fā)送數(shù)據(jù)寬度</p><p> #define RX_PLOAD_WIDTH 2 // 20 uints TX payload //接受數(shù)據(jù)寬度</p><p> unsigned char const TX_ADDRESS[TX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01};
47、 //本地地址</p><p> unsigned char const RX_ADDRESS[RX_ADR_WIDTH]= {0x34,0x43,0x10,0x10,0x01}; //接收地址</p><p> //***************************************nRF24L01寄存器指令</p><p> #defin
48、e READ_REG 0x00 // 讀寄存器指令</p><p> #define WRITE_REG 0x20 // 寫寄存器指令</p><p> #define RD_RX_PLOAD 0x61 // 讀取接收數(shù)據(jù)指令</p><p> #define WR_TX_PLOAD
49、 0xA0 // 寫待發(fā)數(shù)據(jù)指令</p><p> #define FLUSH_TX 0xE1 // 沖洗發(fā)送 FIFO指令</p><p> #define FLUSH_RX 0xE2 // 沖洗接收 FIFO指令</p><p> #define REUSE_TX_PL 0x
50、E3 // 定義重復(fù)裝載數(shù)據(jù)指令</p><p> #define NOP 0xFF // 保留</p><p> //*************************************SPI(nRF24L01)寄存器地址</p><p> #define CONFIG 0x00
51、 // 配置收發(fā)狀態(tài),CRC校驗?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式</p><p> #define EN_AA 0x01 // 自動應(yīng)答功能設(shè)置</p><p> #define EN_RXADDR 0x02 // 可用信道設(shè)置</p><p> #define SETUP_AW 0x03 // 收發(fā)地址
52、寬度設(shè)置</p><p> #define SETUP_RETR 0x04 // 自動重發(fā)功能設(shè)置</p><p> #define RF_CH 0x05 // 工作頻率設(shè)置</p><p> #define RF_SETUP 0x06 // 發(fā)射速率、功耗功能設(shè)置</p><p
53、> #define STATUS 0x07 // 狀態(tài)寄存器</p><p> #define OBSERVE_TX 0x08 // 發(fā)送監(jiān)測功能</p><p> #define CD 0x09 // 地址檢測 </p><p> #define RX_ADD
54、R_P0 0x0A // 頻道0接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P1 0x0B // 頻道1接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P2 0x0C // 頻道2接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P3 0x0D /
55、/ 頻道3接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P4 0x0E // 頻道4接收數(shù)據(jù)地址</p><p> #define RX_ADDR_P5 0x0F // 頻道5接收數(shù)據(jù)地址</p><p> #define TX_ADDR 0x10 // 發(fā)送地址寄存器</p>
56、<p> #define RX_PW_P0 0x11 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P1 0x12 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P2 0x13 // 接收頻道0接收數(shù)據(jù)長度</p><p>
57、#define RX_PW_P3 0x14 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P4 0x15 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define RX_PW_P5 0x16 // 接收頻道0接收數(shù)據(jù)長度</p><p> #define FIFO_
58、STATUS 0x17 // FIFO棧入棧出狀態(tài)寄存器設(shè)置</p><p> //**************************************************************************************</p><p> //函數(shù)聲明*******************************************
59、************************************</p><p> /****************************************************************************************/</p><p> void write_com(unsigned char com); <
60、/p><p> void write_date(unsigned char date);</p><p> void Delay(unsigned int s);</p><p> void inerDelay_us(unsigned char n);</p><p> void init_nRF24L01(void);</p>
61、;<p> unsigned int SPI_RW(unsigned int uuchar);</p><p> unsigned char SPI_Read(unsigned char reg);</p><p> void SetRX_Mode(void);</p><p> void tetRX_Mode(void);</p>
62、<p> unsigned int SPI_RW_Reg(unsigned char reg, unsigned char value);</p><p> unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars);</p><p> unsigned
63、char nRF24L01_RxPacket(unsigned char*rx_buf);</p><p> void nRF24L01_TxPacket(unsigned char *tx_buf);</p><p> //*****************************************長延時</p><p> void Delay(uns
64、igned int s)</p><p><b> {</b></p><p> unsigned int i;</p><p> for(i=0; i<s; i++);</p><p> for(i=0; i<s; i++);</p><p><b> }<
65、/b></p><p> //*****************************************************************************</p><p> bdata sta; //狀態(tài)標(biāo)志</p><p> sbit RX_DR =sta^6;</p><p>
66、; sbit TX_DS =sta^5;</p><p> sbit MAX_RT =sta^4;</p><p> /*****************************************************************************</p><p><b> /*延時函數(shù)*/
67、</b></p><p> void inerDelay_us(unsigned char n)</p><p><b> {</b></p><p> for(;n>0;n--)</p><p><b> _nop_();</b></p><p>
68、<b> }</b></p><p> //***************************************************************************</p><p> /*lcd1602寫命令</p><p> //**************************************
69、*************************************/</p><p> void write_com(unsigned char com)</p><p><b> { </b></p><p><b> lcdrs=0;</b></p><p><b>
70、 P0=com;</b></p><p><b> Delay(5);</b></p><p><b> lcden=1;</b></p><p><b> Delay(5);</b></p><p><b> lcden=0;</b>
71、;</p><p><b> }</b></p><p> //****************************************************************************</p><p> /*lcd1602初始化</p><p> //***************
72、*************************************************************/</p><p> void init()</p><p><b> {</b></p><p><b> lcden=0;</b></p><p> write_co
73、m(0x38);</p><p> write_com(0x0c);</p><p> write_com(0x06);</p><p> write_com(0x01);</p><p><b> }</b></p><p> //***************************
74、************************************************</p><p> /*lcd1602寫數(shù)據(jù)</p><p> //***************************************************************************/</p><p> void write_da
75、te(unsigned char date)</p><p><b> { </b></p><p><b> lcdrs=0;</b></p><p><b> P0=date;</b></p><p><b> Delay(5);</b>&
76、lt;/p><p><b> lcden=1;</b></p><p><b> Delay(5);</b></p><p><b> lcden=0;</b></p><p><b> }</b></p><p> //**
77、***************************************************************************</p><p> /*nRF24L01初始化</p><p> //*****************************************************************************/</p
78、><p> void init_nRF24L01(void)</p><p><b> {</b></p><p> inerDelay_us(100);</p><p> CE=0; // chip enable</p><p> CSN=1; // Spi disable
79、</p><p> SCK=0; // Spi clock line init high</p><p><b> }</b></p><p> /******************************************************************************</p><
80、;p> /*函數(shù):uint SPI_RW(uint uchar)</p><p> /*功能:nRF24L01的SPI寫時序</p><p> /**************************************************************************/</p><p> unsigned int SPI_RW
81、(unsigned int uuchar)</p><p><b> {</b></p><p> unsigned int bit_ctr;</p><p> for(bit_ctr=0;bit_ctr<8;bit_ctr++) // output 8-bit</p><p><b> {<
82、;/b></p><p> MOSI = (uuchar & 0x80); // output 'uchar', MSB to MOSI</p><p> uuchar = (uuchar << 1); // shift next bit into MSB..</p><p>
83、SCK = 1; // Set SCK high..</p><p> uuchar |= MISO; // capture current MISO bit</p><p> SCK = 0; // ..then set SCK low again</p&g
84、t;<p><b> }</b></p><p> return(uuchar); // return read uchar</p><p><b> }</b></p><p> /**************************************
85、****************************************</p><p> /*函數(shù):uchar SPI_Read(uchar reg)</p><p> /*功能:nRF24L01的SPI時序</p><p> /*************************************************************
86、****************/</p><p> unsigned char SPI_Read(unsigned char reg)</p><p><b> {</b></p><p> unsigned char reg_val;</p><p> CSN = 0; //
87、CSN low, initialize SPI communication...</p><p> SPI_RW(reg); // Select register to read from..</p><p> reg_val = SPI_RW(0); // ..then read registervalue</p><p>
88、CSN = 1; // CSN high, terminate SPI communication </p><p> return(reg_val); // return register value</p><p><b> }</b></p><p> /************
89、*****************************************************************/</p><p> /*功能:nRF24L01讀寫寄存器函數(shù)</p><p> /*****************************************************************************/</p>
90、;<p> unsigned int SPI_RW_Reg(unsigned char reg, unsigned char value)</p><p><b> {</b></p><p> unsigned int status;</p><p> CSN = 0; // CSN
91、 low, init SPI transaction</p><p> status = SPI_RW(reg); // select register</p><p> SPI_RW(value); // ..and write value to it..</p><p> CSN = 1;
92、 // CSN high again</p><p> return(status); // return nRF24L01 status uchar</p><p><b> }</b></p><p> /*************************************************
93、****************************/</p><p> /*函數(shù):uint SPI_Read_Buf(uchar reg, uchar *pBuf, uchar uchars)</p><p> /*功能: 用于讀數(shù)據(jù),reg:為寄存器地址,pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個數(shù)</p><p> /**********
94、*******************************************************************/</p><p> unsigned int SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars)</p><p><b> {</b>
95、;</p><p> unsigned int status,uchar_ctr;</p><p> CSN = 0; // Set CSN low, init SPI tranaction</p><p> status = SPI_RW(reg); // Select r
96、egister to write to and read status uchar</p><p> for(uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++)</p><p> pBuf[uchar_ctr] = SPI_RW(0); // </p><p> CSN = 1;
97、 </p><p> return(status); // return nRF24L01 status uchar</p><p><b> }</b></p><p> /******************************************************
98、************************</p><p> /*函數(shù):uint SPI_Write_Buf(uchar reg, uchar *pBuf, uchar uchars)</p><p> /*功能: 用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個數(shù)</p><p> /******************
99、***********************************************************/</p><p> unsigned int SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char uchars)</p><p><b> {</b></p
100、><p> unsigned int status,uchar_ctr;</p><p> CSN = 0; //SPI使能 </p><p> status = SPI_RW(reg); </p><p> for(uchar_ctr=0; uchar_ctr<uchars; uchar_c
101、tr++) //</p><p> SPI_RW(*pBuf++);</p><p> CSN = 1; //關(guān)閉SPI</p><p> return(status); // </p><p><b> }</b></p><p> /**********
102、*******************************************************************/</p><p> /*函數(shù):void SetTX_Mode(void)</p><p> /*功能:數(shù)據(jù)發(fā)送設(shè)置 </p><p> /********************************************
103、*********************************/</p><p> void SetTX_Mode(void)</p><p><b> {</b></p><p><b> CE=0;</b></p><p> SPI_Write_Buf(WRITE_REG + TX_
104、ADDR, TX_ADDRESS, TX_ADR_WIDTH); // 寫本地地址 </p><p> SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // 寫接收端地址</p><p> SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 頻道0
105、自動 ACK應(yīng)答允許 </p><p> SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 </p><p> SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致</p&g
106、t;<p> SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為8字節(jié)</p><p> SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07); //設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB </p><p> SPI_RW_Reg
107、(WRITE_REG + CONFIG, 0x0e); // IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送</p><p><b> CE = 1; </b></p><p> inerDelay_us(130);</p><p><b> }</b></p><p>
108、 /*******************************************************************************</p><p> //*函數(shù):void SetRX_Mode(void)</p><p> /*功能:數(shù)據(jù)接收設(shè)置******************************************************
109、******/</p><p> void SetRX_Mode(void)</p><p><b> {</b></p><p><b> CE=0;</b></p><p> SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR
110、_WIDTH);</p><p> SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); // 頻道0自動 ACK應(yīng)答允許 </p><p> SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); // 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 </p><p&
111、gt; SPI_RW_Reg(WRITE_REG + RF_CH, 40); // 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致</p><p> SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為8字節(jié)</p><p> SPI_RW_Reg(WRITE_REG + RF_SETUP
112、, 0x07); //設(shè)置發(fā)射速率為1MHZ,發(fā)射功率為最大值0dB </p><p> SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F);</p><p><b> CE=1;</b></p><p><b> }</b></p><p>
113、 /******************************************************************************/</p><p> /*函數(shù):unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)</p><p> /*功能:數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中</p>
114、;<p> /*****************************************************************************/</p><p> unsigned char nRF24L01_RxPacket(unsigned char* rx_buf)</p><p><b> {</b></p&
115、gt;<p> unsigned char revale=0;</p><p> sta=SPI_Read(STATUS); // 讀取狀態(tài)寄存其來判斷數(shù)據(jù)接收狀況</p><p> if(RX_DR) // 判斷是否接收到數(shù)據(jù)</p><p><b> {</b></p>
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文基于nrf24l01模塊的無線通信系統(tǒng)設(shè)計
- 畢業(yè)論文(設(shè)計)基于nrf24l01的單片機(jī)無線通信研究
- 基于nrf24l01無線測溫系統(tǒng)的設(shè)計[開題報告]
- 基于NRF24L01無線監(jiān)控系統(tǒng)的設(shè)計.pdf
- NRF24L01模塊.rar
- NRF24L01模塊.rar
- NRF24l01無線232通信.rar
- 開題報告--基于nrf24l01的無線溫度采集系統(tǒng)設(shè)計
- 基于nRF24L01的無線溫度采集系統(tǒng)設(shè)計.pdf
- 基于nrf24l01的無線音樂播放器設(shè)計
- NRF24l01無線232通信.rar
- 基于nrf24l01無線測溫系統(tǒng)的設(shè)計【畢業(yè)論文】
- 基于nrf24l01無線測溫系統(tǒng)的設(shè)計[任務(wù)書]
- 基于nrf24l01的無線接收與發(fā)送系統(tǒng)【畢業(yè)設(shè)計】
- 基于nRF24L01的礦用搜救器設(shè)計.pdf
- 基于nRF24L01的無線振動檢測系統(tǒng).pdf
- 基于nRF24L01的無線心音遙測系統(tǒng)的研究.pdf
- 畢業(yè)論文-基于nrf24l01的無線音樂播放器設(shè)計
- 基于nrf24l01的無線傳感器網(wǎng)絡(luò)研究
- 基于nRF24L01的無線傳感器網(wǎng)絡(luò)研究.pdf
評論
0/150
提交評論