版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 1前言</b></p><p> 本次我們?nèi)诵〗M設(shè)計(jì)的是無(wú)線通信模塊,根據(jù)設(shè)計(jì)要求我們選擇了無(wú)線收發(fā)模塊nRF24L01、單片機(jī)STC89C52、LCD1602和鍵盤模塊等作為本次設(shè)計(jì)的硬件需求。首先我們與老師一起討論了一些設(shè)計(jì)的相關(guān)事宜和設(shè)計(jì)思路。接下來(lái)我們一起畫好了模擬電路圖,在老師的幫助下我們對(duì)電路圖進(jìn)行了補(bǔ)充和完善。完成這些基本工作后,在老師和同學(xué)的
2、幫助下我們買回了自己所需的元器件。接著我們變分工完成了元器件的焊接連接和程序的編寫,然后便是模塊的上電調(diào)試,設(shè)計(jì)的答辯和設(shè)計(jì)報(bào)告的完善。</p><p> 我們本次之所以會(huì)選擇無(wú)線通信模塊的設(shè)計(jì),是我們覺(jué)得無(wú)線通信技術(shù)是現(xiàn)代社會(huì)中一門很重要的技術(shù),我們掌握好了這門技術(shù)對(duì)以后我們的工作生活都有很大的幫助。我們本次設(shè)計(jì)的無(wú)線通信模塊雖然只是我們的一次小小的體驗(yàn),但我們都知道無(wú)線通信在我們現(xiàn)在所處的信息時(shí)代是多么的重
3、要,如今我們生活的方方面面無(wú)不與無(wú)線通信息息相關(guān)。我們所熟悉的手機(jī)、電腦、電視等等都與無(wú)線通信有著直接的聯(lián)系。甚至在某些高端領(lǐng)域方面無(wú)線通信技術(shù)能反映一個(gè)國(guó)家的科技水平和綜合國(guó)力。我們國(guó)家的無(wú)線通信技術(shù)雖然在世界上排在了前面的位置,但與一些發(fā)達(dá)國(guó)家相比我們?nèi)稳挥泻艽蟛罹?,如太空中有差不?0%的通信衛(wèi)星是美國(guó)的。</p><p> 當(dāng)然我們本次設(shè)計(jì)的無(wú)線通信模塊只是很基礎(chǔ)的無(wú)線通信模塊,我們所達(dá)到的效果就是兩個(gè)
4、模塊間能相互發(fā)送一些簡(jiǎn)單的字符和數(shù)字。</p><p><b> 2總體方案設(shè)計(jì) </b></p><p> 本次設(shè)計(jì)我們考慮用C語(yǔ)言和匯編去實(shí)現(xiàn)模塊的無(wú)線通信功能,但我們編寫程序時(shí)發(fā)現(xiàn)匯編語(yǔ)言較難寫且可讀性差,因此我們選擇了用C語(yǔ)言作為本次的軟件實(shí)現(xiàn)。要實(shí)現(xiàn)無(wú)線通信功能,我們選擇了小巧輕便的無(wú)線收發(fā)模塊nRF24L01。在單片機(jī)方面考慮到52系列優(yōu)于51系列且很
5、好購(gòu)買,我們選擇了STC89C52單片機(jī)。在液晶顯示上,我們只要求能顯示一些簡(jiǎn)單的數(shù)字和字母,我們選擇了LCD1602。鍵盤輸入方面我們選擇的是4×4矩陣鍵盤。以上各模塊的功能信息在后面都有更為具體的介紹。</p><p> 圖2.1無(wú)線通信模塊框圖</p><p><b> 3單元模塊設(shè)計(jì)</b></p><p> 3.1 n
6、RF24L01的簡(jiǎn)單介紹</p><p> nRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無(wú)線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部集成 NORDIC 自己的 Enhanced Short Burst 協(xié)議??梢詫?shí)現(xiàn)點(diǎn)對(duì)點(diǎn)或是 1對(duì) 6 的無(wú)線通信。無(wú)線通信速度可以達(dá)到 2M(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機(jī)愛(ài)好者只需要為單片機(jī)系
7、統(tǒng)預(yù)留 5 個(gè) GPIO,1 個(gè)中斷輸入引腳,就可以很容易實(shí)現(xiàn)無(wú)線通信的功能,非常適合用來(lái)為 MCU系統(tǒng)構(gòu)建無(wú)線通信功能。</p><p> 2.4GHz 全球開(kāi)放ISM頻段,最大0dBm發(fā)射功率,免許可證使用支持六路通道的數(shù)據(jù)接收低工作電壓:1.9V ~3.6V 低電壓工作高速率:2Mbps,由于空中傳輸時(shí)間很短,極大的降低了無(wú)線傳輸中的碰撞現(xiàn)象(軟件設(shè)置1Mbps或者2Mbps的空中傳輸速率)多頻點(diǎn):125
8、頻點(diǎn),滿足多點(diǎn)通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,15×29mm(包括天線)低功耗:當(dāng)工作在應(yīng)答模式通信時(shí),快速的空中傳輸及啟動(dòng)時(shí)間,極大的降低了電流消耗。低應(yīng)用成本:nRF24L01集成了所有與RF協(xié)議相關(guān)的高速信號(hào)處理部分,比如:自動(dòng)重發(fā)丟失數(shù)據(jù)包和自動(dòng)產(chǎn)生應(yīng)答信號(hào)等,nRF24L01的SPI接口可以利用單片機(jī)的硬件SPI口連接或用單片機(jī)I/O口進(jìn)行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便
9、于使用低成本單片機(jī)。便于開(kāi)發(fā):由于鏈路層完全集成在模塊上,非常便于開(kāi)發(fā)。自動(dòng)重發(fā)功能,自動(dòng)檢測(cè)和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時(shí)間及自動(dòng)存儲(chǔ)未收到應(yīng)答信號(hào)的數(shù)據(jù)包自動(dòng)應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動(dòng)發(fā)送應(yīng)答信號(hào),無(wú)須另行編程載波檢測(cè)—固定頻率檢測(cè)內(nèi)置硬件CRC檢錯(cuò)和點(diǎn)對(duì)多點(diǎn)通信地址控制數(shù)據(jù)包傳輸錯(cuò)誤計(jì)</p><p> nRF24L01 功能框圖</p><p> 圖3.1nRF24L01
10、 功能框圖 </p><p> Fig.1 nRF24L01 BLOCK DIAGRAM </p><p> nRF24L01 的框圖如 Fig.1所示,從單片機(jī)控制的角度來(lái)看,我們只需要關(guān)注 Fig.1 右面</p><p> 的六個(gè)控制和數(shù)據(jù)信號(hào),分別為 CSN、SCK、MISO、MOSI、I
11、RQ、CE。 </p><p> CSN:芯片的片選線,CSN為低電平芯片工作。 </p><p> SCK:芯片控制的時(shí)鐘線(SPI 時(shí)鐘) </p><p> MISO:芯片控制數(shù)據(jù)線(Master input slave output) </p><p> MOSI:芯片控制數(shù)據(jù)線(Master output slave inp
12、ut) </p><p> IRQ:中斷信號(hào)。無(wú)線通信過(guò)程中 MCU主要是通過(guò) 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實(shí)物圖</p><p> nRF24L01的引腳級(jí)說(shuō)明 </p><p> 圖3.3nRF24L01的引腳級(jí)說(shuō)明</p><p> 說(shuō)明:(1)VCC腳接電壓范圍為1.9V ~3.6V之間,不能在這個(gè)區(qū)間之外,超過(guò)3.6V將會(huì)燒毀模塊。推薦電壓3.3V左右。 </p><p> (2
14、)除電源VCC和接地端,其余腳都可以直接和普通的5V單片機(jī)IO口直接相連,無(wú)需電平轉(zhuǎn)換。當(dāng)然對(duì)3V左右的單片機(jī)更加適用了。 </p><p> (3)硬件上面沒(méi)有SPI的單片機(jī)也可以控制本模塊,用普通單片機(jī)IO口模擬SPI不需要單片機(jī)真正的串口介入,只需要普通的單片機(jī)IO口 就可以了,當(dāng)然用串口也可以了</p><p> 3.2 STC89C52的簡(jiǎn)單介紹</p>&l
15、t;p> STC89C52是一個(gè)低電壓,高性能cmos8位單片機(jī),片內(nèi)含8k bytes的可反復(fù)擦寫的Flash只讀程序存儲(chǔ)器和256 bytes的隨機(jī)存取數(shù)據(jù)存儲(chǔ)器(RAM),器件采用ATMEL公司的高密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)MCS-51指令系統(tǒng),片內(nèi)置通用8位中央處理器和Flash存儲(chǔ)單元,STC89C52單片機(jī)在電子行業(yè)中有著廣泛的應(yīng)用。</p><p> 其主要特性功能: 1、兼容M
16、CS51指令系統(tǒng) 2、8k可反復(fù)擦寫(大于1000次)Flash ROM; 3、32個(gè)雙向I/O口; 4、256×8bit內(nèi)部RAM; 5、3個(gè)16位可編程定時(shí)/計(jì)數(shù)器中斷; 6、時(shí)鐘頻率0-24MHz; 7、2個(gè)串行中斷,可編程UART串行通道; 8、2個(gè)外部中斷源,共8個(gè)中斷源; 9、2個(gè)讀寫中斷口線,3級(jí)加密位; 10、低功耗空閑和掉電模式,軟件設(shè)置睡眠和喚醒功能; 11、有PDI
17、P、PQFP、TQFP及PLCC等幾種封裝形式,以適應(yīng)不同產(chǎn)品的需求。</p><p> STC89C52的引腳圖 圖3.4 STC89C52的引腳圖</p><p> 3.3 LCD1602的簡(jiǎn)單介紹</p><p> LCD1602是工業(yè)字符型液晶,能夠同時(shí)顯示16×02即32個(gè)字符。
18、(16列2行)1602液晶也叫1602字符型液晶它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊它有若干個(gè)5×7或者5×11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。每位之間有一個(gè)點(diǎn)距的間隔每行之間也有間隔起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒茱@示圖形 。</p><p> 圖3.5LCD1602實(shí)物圖</p><p> LCD1602的
19、引腳圖</p><p> 圖3.6LCD1602的引腳圖</p><p> 3.4 其它的器件</p><p> 當(dāng)然我們本次設(shè)計(jì)還用到了一些其他的元器件,包括鍵盤、連接導(dǎo)線、排針、發(fā)光二極管、電阻、電容等等。</p><p> 3.5 各單元模塊的聯(lián)系</p><p> 鍵盤輸入是人機(jī)交換的接口其主要功
20、能是設(shè)置nRF24L01的工作模式和實(shí)現(xiàn)鍵盤輸入字符、數(shù)字等。單片機(jī)是主控模塊實(shí)現(xiàn)數(shù)據(jù)的儲(chǔ)存、處理,將各模塊聯(lián)系起來(lái)協(xié)調(diào)各模塊的工作。LCD1602主要功能就是顯示作用,將鍵盤輸入或接收到的信息顯示出來(lái)。</p><p><b> 4軟件設(shè)計(jì)</b></p><p> 我們搭建好硬件電路并確認(rèn)無(wú)誤后,進(jìn)行了軟件設(shè)計(jì)。本次無(wú)線通信模塊設(shè)計(jì)我們選擇了用C語(yǔ)言實(shí)現(xiàn)其功能
21、,我們?cè)赑C機(jī)Keil uVision 4下編寫調(diào)試了C程序并將C程序下載到STC89C52單片機(jī)里進(jìn)行了運(yùn)行調(diào)試。</p><p> 圖5.1軟件實(shí)現(xiàn)的流程圖</p><p><b> 5系統(tǒng)調(diào)試</b></p><p> 在調(diào)試環(huán)境中我們首先檢查了我們焊接的硬件電路是否有問(wèn)題,如有無(wú)短路,有無(wú)虛焊等。確認(rèn)硬件電路完善無(wú)誤后。我們?cè)俅螌?duì)
22、程序進(jìn)行了檢查與調(diào)試,都發(fā)現(xiàn)沒(méi)有問(wèn)題后,我們對(duì)模塊進(jìn)行了上電并將程序下載進(jìn)去運(yùn)行調(diào)試。一開(kāi)始我們發(fā)現(xiàn)并沒(méi)有達(dá)到預(yù)期的效果,發(fā)現(xiàn)鍵盤輸入與發(fā)送的字符數(shù)字不匹配,接搜端也無(wú)法搜到相應(yīng)的信號(hào)。</p><p> 經(jīng)過(guò)我們的仔細(xì)檢查和思考后,我們發(fā)現(xiàn)程序中定義的端口與硬件電路的端口沒(méi)有意義對(duì)應(yīng),程序的一些其他地方也并不是很完善,我們又對(duì)程序進(jìn)行了改進(jìn),對(duì)程序的改進(jìn)過(guò)程中,有時(shí)會(huì)遇到修改程序后會(huì)出現(xiàn)錯(cuò)誤,這是若去一行一行
23、的運(yùn)行調(diào)試程序就會(huì)很麻煩和花去大量的時(shí)間。這時(shí)就要認(rèn)真檢查思考程序出錯(cuò)在哪里,幾個(gè)人一起檢查就加快了效率,節(jié)約了大量時(shí)間,直到調(diào)試達(dá)到了我們所預(yù)期的效果。</p><p> 5.1主要問(wèn)題及分析</p><p> 開(kāi)始時(shí)我們想到的是在ISIS里畫好原理圖并仿真,但在ISIS上面我們沒(méi)有找到我們想要的元器件,因此我們只能直接去調(diào)試硬件電路。首先我們?cè)O(shè)計(jì)好程序并確認(rèn)無(wú)誤后再將程序下載到單片
24、機(jī)里進(jìn)行硬件調(diào)試,結(jié)果我們發(fā)現(xiàn)LCD1602無(wú)顯示,經(jīng)過(guò)仔細(xì)的檢查思考后,我們發(fā)現(xiàn)我們所寫的程序與單片機(jī)和液晶屏的引腳并不是一一對(duì)應(yīng)的,經(jīng)過(guò)對(duì)程序和硬件電路的修改后液晶屏終于有了顯示。雖然液晶屏有了顯示,但我們的鍵盤輸入,發(fā)送與接收還是存在問(wèn)題??紤]到時(shí)間有限我們將原來(lái)的矩陣鍵盤輸入改為了較簡(jiǎn)單的單一鍵盤輸入,這樣我們解決的鍵盤輸入問(wèn)題。經(jīng)過(guò)反復(fù)的調(diào)試修改后,我們的無(wú)線通信模塊終于達(dá)到的預(yù)期的效果。</p><p&g
25、t;<b> 5.2調(diào)試工具</b></p><p> 此次調(diào)試過(guò)程中,我們主要用到了Keil uVision 4、STC-ISP.exe、AltiumDesigner。Keil uVision 4是用來(lái)編寫程序,并編譯成HEX文件,以便下載到單片機(jī)中。當(dāng)有了HEX文件之后,要將此文件下載到單片機(jī)中,不可缺少的工具就是STC-ISP.exe。通過(guò)它,可以對(duì)單片機(jī)內(nèi)部的程序進(jìn)行反復(fù)修改。A
26、ltiumDesigner是用來(lái)查看電路原理圖,并有繪制原理圖的功能,在實(shí)際調(diào)試過(guò)程中,應(yīng)當(dāng)將軟件與硬件相結(jié)合,所以電路圖的研究不可缺少。</p><p> 6系統(tǒng)功能、指標(biāo)參數(shù)</p><p> 6.1系統(tǒng)能實(shí)現(xiàn)的功能</p><p> 本次我們?nèi)诵〗M所做的無(wú)線通信模塊主要能實(shí)現(xiàn)兩個(gè)模塊間的一些簡(jiǎn)單通信,實(shí)現(xiàn)兩個(gè)模塊間一些簡(jiǎn)單字符、數(shù)字的發(fā)送與接收。我們先
27、對(duì)鍵盤輸入進(jìn)行一些定義,如定義鍵盤輸入為一些字符或數(shù)字,但我們按相應(yīng)的建后就輸入相應(yīng)的字符或數(shù)字,輸入完成后,我們?cè)诎窗l(fā)送鍵,預(yù)先輸入的信息便發(fā)送了出去,接送的也會(huì)收到相應(yīng)的信息。</p><p> 6.2系統(tǒng)指標(biāo)參數(shù)測(cè)試</p><p> 在系統(tǒng)指標(biāo)參數(shù)的測(cè)試中,我們首先測(cè)試了兩個(gè)無(wú)線收發(fā)模塊間能傳輸?shù)姆秶?,?jīng)過(guò)我們多次的改變兩個(gè)模塊的距離后,我們發(fā)現(xiàn)兩個(gè)模塊能傳輸?shù)淖畲缶嚯x約為10
28、米,在穿透效果的測(cè)試中,我們發(fā)現(xiàn)兩個(gè)模塊間可以穿過(guò)一壁普通的墻,當(dāng)兩個(gè)模塊間隔有兩面及兩面以上的普通墻時(shí),兩個(gè)模塊間就很難傳輸信號(hào)了。我們?cè)噲D測(cè)試模塊的抗電磁干擾能力的測(cè)試是,我們發(fā)現(xiàn)很找到一個(gè)精確的量來(lái)描述,我們大致得出在較弱和頻率與我們用的nRF24L01的頻率相差較大時(shí)的干擾不明顯,但當(dāng)電磁干擾較強(qiáng)很干擾波頻率接近nRF24L01的頻率時(shí)的干擾較為強(qiáng)烈。</p><p> 6.3系統(tǒng)的指標(biāo)功能及參數(shù)分析&
29、lt;/p><p> nRF24L01的無(wú)線速率達(dá)到2 Mbit/s,SPI接口速率為0~8 Mbit/s,具自動(dòng)應(yīng)答機(jī)制,極大地降低丟包率,完全滿足了我們本次設(shè)計(jì)的需求。將nRF24L01配置成增強(qiáng)型ShockBurst模式,使得雙向鏈接協(xié)議執(zhí)行更為簡(jiǎn)易有效。發(fā)送方要求終端設(shè)備在接收數(shù)據(jù)后有應(yīng)答信號(hào),以便發(fā)送方檢測(cè)有無(wú)數(shù)據(jù)丟失。一旦數(shù)據(jù)丟失則通過(guò)重新發(fā)送功能將丟失的數(shù)據(jù)恢復(fù)。單片機(jī)內(nèi)部EEPROM應(yīng)用子程序進(jìn)行扇
30、區(qū)的擦除、寫入以及讀出功能,實(shí)現(xiàn)系統(tǒng)信息的讀取保存。nRF24L01在外置天線時(shí)傳輸距離可以到達(dá)25m,我們本次沒(méi)有使用外置天線,傳輸?shù)木嚯x約為10m,一切都滿足我們本次設(shè)計(jì)的需求。</p><p><b> 7結(jié)論</b></p><p> 本次智能測(cè)控應(yīng)用系統(tǒng)設(shè)計(jì),我們?nèi)诵〗M成功的的完成了無(wú)線通信模塊的設(shè)計(jì)與制作。雖然我們?cè)谀K的設(shè)計(jì)、制作、調(diào)試過(guò)程中也遇到
31、了不少困難,但在老師和同學(xué)的細(xì)心指導(dǎo)幫助之下和我們自己的努力,最終還是達(dá)到了預(yù)期的效果,完成了本次的智能化測(cè)控應(yīng)用系統(tǒng)設(shè)計(jì)。我們本次所設(shè)計(jì)的無(wú)線通信模塊在無(wú)線通信領(lǐng)域有著很大的發(fā)展空間,nRF24L01是一種高效率低成本的無(wú)線收發(fā)模塊,125頻點(diǎn),滿足多點(diǎn)通信和跳頻通信需要超小型:內(nèi)置2.4GHz天線,體積小巧,15x29mm(包括天線)低功耗:當(dāng)工作在應(yīng)答模式通信時(shí),快速的空中傳輸及啟動(dòng)時(shí)間,極大的降低了電流消耗。低應(yīng)用成本:nRF2
32、4L01集成了所有與RF協(xié)議相關(guān)的高速信號(hào)處理部分,比如:自動(dòng)重發(fā)丟失數(shù)據(jù)包和自動(dòng)產(chǎn)生應(yīng)答信號(hào)等,nRF24L01的SPI接口可以利用單片機(jī)的硬件SPI口連接或用單片機(jī)I/O口進(jìn)行模擬,內(nèi)部有FIFO可以與各種高低速微處理器接口,便于使用低成本單片機(jī)。便于開(kāi)發(fā):由于鏈路層完全集成在模塊上,非常便于開(kāi)發(fā)。自動(dòng)重發(fā)功能,自動(dòng)檢測(cè)和重發(fā)丟失的數(shù)據(jù)包,重發(fā)時(shí)間及自動(dòng)存儲(chǔ)未收到應(yīng)答信號(hào)的數(shù)據(jù)包自動(dòng)應(yīng)答功能,在收到有效數(shù)據(jù)后,模塊自動(dòng)發(fā)送應(yīng)答信號(hào)&
33、lt;/p><p> 率檢測(cè)內(nèi)置硬件CRC檢錯(cuò)和點(diǎn)對(duì)多點(diǎn)通信地址控制數(shù)據(jù)包傳輸錯(cuò)誤計(jì)數(shù)器及載波檢測(cè)功能可用于跳頻設(shè)置可同時(shí)設(shè)置六路接收通道地址,可有選擇性的打開(kāi)接收通道標(biāo)準(zhǔn)插針Dip2.54MM間距接口,便于嵌入式應(yīng)用。因此基于nRF24L01的無(wú)線通信在當(dāng)今我們的生活中有著極大的發(fā)展空間。</p><p><b> 8總結(jié)與體會(huì)</b></p><
34、;p> 在本次智能化測(cè)控應(yīng)用系統(tǒng)設(shè)計(jì)中我們收獲了不少。在之前我們都是學(xué)習(xí)了書本上的東西,而很少將其應(yīng)用到實(shí)際中去,雖然之前我們也做過(guò)一些課程設(shè)計(jì)、工藝實(shí)習(xí)之類的,但這次的課程設(shè)計(jì)更加從實(shí)。我們從選取題目,畫原理圖到購(gòu)買元器件再到焊接電路還有后面的調(diào)試測(cè)試工作我們都一一的親身經(jīng)歷并學(xué)到了不少課本上學(xué)不到的東西。以前我們學(xué)習(xí)課本上的知識(shí),覺(jué)得要將其應(yīng)用到實(shí)際中會(huì)是一件較為輕松的事,也看其他人做的東西很有意義,但我們自己實(shí)際去設(shè)計(jì)制作
35、時(shí),才發(fā)現(xiàn)了要做好一個(gè)作品是那么的不容易,自己去做時(shí),才發(fā)現(xiàn)自己的種種不足,動(dòng)起手來(lái)是那么的笨拙。老師常常給我們講動(dòng)手能力對(duì)我們自動(dòng)化的同學(xué)有多么種要,因此我們也都一直想著要提高我們的動(dòng)手能力,這次實(shí)習(xí)對(duì)我們來(lái)說(shuō)是一次難的機(jī)會(huì),對(duì)于我們提高自己的動(dòng)手能力有很大的幫助。我們不僅學(xué)到了怎樣去改進(jìn)、優(yōu)化、美化電路布局,也掌握更多調(diào)試、測(cè)試電路的方法,也學(xué)到了不少怎樣去選取合適的元器件的方法。在以后的學(xué)習(xí)工作做,我們要不斷的提高自己的動(dòng)手能力,
36、就要不斷親身去設(shè)計(jì)、自作實(shí)際的東西,這樣才不會(huì)被時(shí)代所淘汰成為對(duì)社會(huì)有用的人。</p><p><b> 9參考文獻(xiàn)</b></p><p> [1]趙亮、候國(guó)銳.單片機(jī)C語(yǔ)言編程與實(shí)例[M].北京:人民郵電出版社,2003年9月</p><p> [2]海創(chuàng).無(wú)線收發(fā)模塊nRF24L01開(kāi)發(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è)計(jì).實(shí)驗(yàn).測(cè)試[M].武漢:華中科技大學(xué)出版社,2009年7月</p><p><b> 10附錄</b></p><p><b> 10.1相關(guān)設(shè)計(jì)圖</b></p><p> 圖10.1無(wú)線收發(fā)模塊PCB圖</p><p> 圖10.2無(wú)線收發(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無(wú)線收發(fā)模塊實(shí)物圖</p><p><b> 10.2相關(guān)的程序</b></p><p> 無(wú)線收發(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校驗(yàn)?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式</p><p> #define EN_AA 0x01 // 自動(dòng)應(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 // 自動(dòng)重發(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)測(cè)功能</p><p> #define CD 0x09 // 地址檢測(cè) </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ù)長(zhǎng)度</p><p> #define RX_PW_P1 0x12 // 接收頻道0接收數(shù)據(jù)長(zhǎng)度</p><p> #define RX_PW_P2 0x13 // 接收頻道0接收數(shù)據(jù)長(zhǎng)度</p><p>
57、#define RX_PW_P3 0x14 // 接收頻道0接收數(shù)據(jù)長(zhǎng)度</p><p> #define RX_PW_P4 0x15 // 接收頻道0接收數(shù)據(jù)長(zhǎng)度</p><p> #define RX_PW_P5 0x16 // 接收頻道0接收數(shù)據(jù)長(zhǎng)度</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> //*****************************************長(zhǎng)延時(shí)</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í)函數(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寫時(shí)序</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時(shí)序</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ù)的個(gè)數(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ù)的個(gè)數(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、自動(dòng) 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ù)長(zhǎng)度,本次設(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自動(dòng) 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ù)長(zhǎng)度,本次設(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)寄存其來(lái)判斷數(shù)據(jù)接收狀況</p><p> if(RX_DR) // 判斷是否接收到數(shù)據(jù)</p><p><b> {</b></p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 畢業(yè)論文基于nrf24l01模塊的無(wú)線通信系統(tǒng)設(shè)計(jì)
- 畢業(yè)論文(設(shè)計(jì))基于nrf24l01的單片機(jī)無(wú)線通信研究
- 基于nrf24l01無(wú)線測(cè)溫系統(tǒng)的設(shè)計(jì)[開(kāi)題報(bào)告]
- 基于NRF24L01無(wú)線監(jiān)控系統(tǒng)的設(shè)計(jì).pdf
- NRF24L01模塊.rar
- NRF24L01模塊.rar
- NRF24l01無(wú)線232通信.rar
- 開(kāi)題報(bào)告--基于nrf24l01的無(wú)線溫度采集系統(tǒng)設(shè)計(jì)
- 基于nRF24L01的無(wú)線溫度采集系統(tǒng)設(shè)計(jì).pdf
- 基于nrf24l01的無(wú)線音樂(lè)播放器設(shè)計(jì)
- NRF24l01無(wú)線232通信.rar
- 基于nrf24l01無(wú)線測(cè)溫系統(tǒng)的設(shè)計(jì)【畢業(yè)論文】
- 基于nrf24l01無(wú)線測(cè)溫系統(tǒng)的設(shè)計(jì)[任務(wù)書]
- 基于nrf24l01的無(wú)線接收與發(fā)送系統(tǒng)【畢業(yè)設(shè)計(jì)】
- 基于nRF24L01的礦用搜救器設(shè)計(jì).pdf
- 基于nRF24L01的無(wú)線振動(dòng)檢測(cè)系統(tǒng).pdf
- 基于nRF24L01的無(wú)線心音遙測(cè)系統(tǒng)的研究.pdf
- 畢業(yè)論文-基于nrf24l01的無(wú)線音樂(lè)播放器設(shè)計(jì)
- 基于nrf24l01的無(wú)線傳感器網(wǎng)絡(luò)研究
- 基于nRF24L01的無(wú)線傳感器網(wǎng)絡(luò)研究.pdf
評(píng)論
0/150
提交評(píng)論