無線通信系統(tǒng)課程設(shè)計課件_第1頁
無線通信系統(tǒng)課程設(shè)計課件_第2頁
無線通信系統(tǒng)課程設(shè)計課件_第3頁
無線通信系統(tǒng)課程設(shè)計課件_第4頁
無線通信系統(tǒng)課程設(shè)計課件_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、西安郵電大學(xué)通信與信息工程學(xué)院無線通信系統(tǒng)課程設(shè)計 報告(2017 2018學(xué)年 第一學(xué)期) 實驗名稱: 無線通信系統(tǒng)課程設(shè)計_ 學(xué)生姓名: _ 專 業(yè): _ 學(xué) 號: _ 指導(dǎo)教師: _摘要溫濕度是生活生產(chǎn)中的重要的參數(shù)。本設(shè)計為基于單片機的溫濕度檢測系統(tǒng),采用模塊化、層次化設(shè)計。用新型的智能溫濕度傳感器DHT11主要實現(xiàn)對溫度、濕度的檢測,將溫度濕度信號通過傳感器進行信號的采集并轉(zhuǎn)換成數(shù)字信號,再運用單片機STC89C52進行數(shù)據(jù)的分析和處理。然后將溫濕度數(shù)據(jù)通過NRF24L01發(fā)送數(shù)據(jù),實現(xiàn)點對點或多點對點的無線通信。顯示部分采用LCD1602液晶顯示所測溫濕度值。系統(tǒng)電路簡單、集成度高

2、、工作穩(wěn)定、調(diào)試方便、檢測精度高,具有一定的實用價值。關(guān)鍵詞:單片機;溫濕度傳感器;無線通信西安郵電大學(xué)課程設(shè)計 目錄目錄1.緒論12.課程設(shè)計任務(wù)及要求22.1設(shè)計任務(wù)22.2設(shè)計要求23.系統(tǒng)總體設(shè)計方案33.1方案論證33.2系統(tǒng)總體設(shè)計33.3工作原理44.系統(tǒng)硬件設(shè)計54.1.系統(tǒng)整體設(shè)計54.2.各單元電路設(shè)計55系統(tǒng)軟件設(shè)計105.1.主程序流程設(shè)計115.2.子程序設(shè)計156系統(tǒng)調(diào)試157總結(jié)178參考文獻189附錄19301.緒論溫濕度的檢測與數(shù)據(jù)采集是工業(yè)生產(chǎn)過程必不可少的環(huán)節(jié)之一,在生產(chǎn)中,溫濕度的高低對產(chǎn)品的質(zhì)量影響很大。由于溫濕度的檢測控制不當(dāng),可能使我們導(dǎo)致無法估計

3、的經(jīng)濟損失。為保證日常工作的順利進行,首要問題是加強生產(chǎn)車間內(nèi)溫度與濕度的監(jiān)測工作,但傳統(tǒng)的方法過于粗糙,通過人工進行檢測,對不符合溫度和濕度要求的庫房進行通風(fēng)、去濕和降溫等工作。這種人工測試方法費時費力、效率低,且測試的溫度及濕度誤差大,隨機性大。目前,在低溫條件下(通常指100以下),溫濕度的測量已經(jīng)相對成熟。同時通過無線通信系統(tǒng)進行溫濕度數(shù)據(jù)的收發(fā),能夠?qū)貪穸鹊臋z測距離拉長幾個數(shù)量級,而且節(jié)約了布線開銷成本,利用新型單總線式數(shù)字溫度傳感器實現(xiàn)對溫度的測試與控制得到更快的開發(fā)。但人們對它的要求越來越高,要為現(xiàn)代人工作、科研、學(xué)習(xí)、生活提供更好的更方便的設(shè)施就需要從數(shù)字單片機技術(shù)入手,一切

4、向著數(shù)字化,智能化控制方向發(fā)展。對于國內(nèi)外對溫濕度檢測的研究,從復(fù)雜模擬量檢測到現(xiàn)在的數(shù)字智能化檢測越發(fā)的成熟,隨著科技的進步,現(xiàn)在的對于溫濕度研究,檢測系統(tǒng)向著智能化、小型化、低功耗的方向發(fā)展。在發(fā)展過程中,以單片機為核心的溫濕度控制系統(tǒng)發(fā)展為體積小、操作簡單、量程寬、性能穩(wěn)定、測量精度高,等諸多優(yōu)點在生產(chǎn)生活的各個方面實現(xiàn)著至關(guān)重要的作用。2.課程設(shè)計任務(wù)及要求2.1設(shè)計任務(wù)本課程設(shè)計的主要任務(wù)是使用以STC89C52芯片為數(shù)據(jù)處理與運算模塊,使用DHT11溫濕度傳感器為采集數(shù)據(jù)模塊,使用NRF24L01為數(shù)據(jù)收發(fā)模塊,實現(xiàn)溫濕度的采集與發(fā)送、接收功能。2.2設(shè)計要求實現(xiàn)溫濕度數(shù)據(jù)的采集以

5、及通過點對點或兩點對一點的通信來傳輸數(shù)據(jù)。濕度精度為±5%RH,溫度±2,量程濕度20-90%RH,溫度050。3.系統(tǒng)總體設(shè)計方案3.1方案論證本系統(tǒng)使用PCB作為電路板,核心器件是STC89C52芯片、DHT11溫濕度傳感器以及NRF24L01。依靠DHT11采集數(shù)據(jù)、STC89C52處理數(shù)據(jù)、NRF24L01傳輸數(shù)據(jù)實現(xiàn)采集溫濕度數(shù)據(jù)并無線傳輸至接收端的功能。系統(tǒng)電路簡單、集成度高、工作穩(wěn)定、調(diào)試方便、檢測精度高,具有一定的實用性。3.2系統(tǒng)總體設(shè)計圖3.1 系統(tǒng)總體設(shè)計圖圖3.1為實現(xiàn)兩點對一點的溫濕度數(shù)據(jù)無線通信系統(tǒng)總設(shè)計圖。此系統(tǒng)分為三個子系統(tǒng),分別是左上角的發(fā)

6、送端1、右上角的發(fā)送端2和下方的接收端。每個子系統(tǒng)又分為三個模塊,分別是主芯片模塊、液晶顯示模塊以及溫濕度傳感器模塊。最后如有需要,還可以在接收端的輸出口連接PC上位機,以實現(xiàn)數(shù)據(jù)在PC上的處理。 圖3.2 發(fā)射端程序流程圖 圖3.3 接收端程序流程圖3.3工作原理本系統(tǒng)是以STC89C52單片機為核心的一套多點溫濕度采集和無線傳輸系統(tǒng),由溫濕度采集、數(shù)據(jù)傳輸、數(shù)據(jù)處理三個部分組成,主要包括單片機系統(tǒng),無線傳輸系統(tǒng),電源電路,復(fù)位電路,溫濕度檢測,顯示系統(tǒng)等模塊。單片機STC89C52是整個硬件電路的核心,它一方面控制無線傳輸模塊NRF24L01發(fā)送、接受數(shù)據(jù);另一方面,將收到的數(shù)字溫濕度數(shù)據(jù)

7、送到LCD1602顯示器顯示,可以直觀的看到測量點的溫濕度并進行監(jiān)測。整個系統(tǒng)的軟件設(shè)計是通過c語言程序?qū)Πl(fā)射機、接收機的STC89C52編程來實現(xiàn)其控制功能。4.系統(tǒng)硬件設(shè)計4.1.系統(tǒng)整體設(shè)計圖4.1 系統(tǒng)硬件總體結(jié)構(gòu)用新型的智能集成溫溫度傳感器DHT11主要實現(xiàn)檢測溫度、濕度的檢測,將溫度濕度信號通過傳感器進行信號的采集并轉(zhuǎn)換成數(shù)字信號,再運用單片機STC89C52進行數(shù)據(jù)的分析和處理,之后一方面送入無線傳輸器件NRF24L01進行信號的發(fā)送,另一方面送入顯示器顯示;接收端則是通過NRF24L01接收數(shù)據(jù)后送入STC89C52后再送入顯示器顯示。4.2.各單元電路設(shè)計4.2.1溫濕度傳感

8、器 4.2.1.1 DHT11產(chǎn)品概述DHT11數(shù)字溫濕度傳感器是一款含有已校準數(shù)字信號輸出的溫濕度復(fù)合傳感器。它應(yīng)用專用的數(shù)字模塊采集技術(shù)和溫濕度傳感技術(shù),確保產(chǎn)品具有極高的可靠性與卓越的長期穩(wěn)定性。傳感器包括一個電阻式感濕元件和一個NTC測溫元件,并與一個高性能8位單片機相連接。因此該產(chǎn)品具有品質(zhì)卓越、超快響應(yīng)、抗干擾能力強、性價比極高等優(yōu)點。每個DHT11傳感器都在極為精確的濕度校驗室中進行校準。校準系數(shù)以程序的形式儲存在OTP內(nèi)存中,傳感器內(nèi)部在檢測信號的處理過程中要調(diào)用這些校準系數(shù)。單線制串行接口,使系統(tǒng)集成變得簡易快捷。超小的體積、極低的功耗,信號傳輸距離可達20米以上,使其成為各

9、類應(yīng)用甚至最為苛刻的應(yīng)用場合的最佳選則。產(chǎn)品為 4 針單排引腳封裝。連接方便,特殊封裝形式可根據(jù)用戶需求而提供。4.2.1.2 引腳說明:引腳號 引腳名稱 類型 引腳說明1 VCC 電源 正電源輸入,3V-5.5V DC2 DATA 輸出 單總線,數(shù)據(jù)輸入/輸出引腳3 NC 空 空腳,擴展未用4 GND 地 電源地圖4.2 DHT11連接圖4.2.2單片機STC89C52STC89C52是一種低功耗、高性能CMOS八位微控制器,具有8K在系統(tǒng)可編程Flash存儲器,使用ATMEL公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80C51產(chǎn)品指令和引腳完全兼容。片上Flash允許ROM在系統(tǒng)可編程,亦適

10、于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使其為眾多嵌入式控制應(yīng)用系統(tǒng)提供靈活的解決方案。 STC89C52的功能以及引腳完全可以滿足本系統(tǒng)對于控制核心的要求,且其成本低,應(yīng)用廣泛,相關(guān)技術(shù)的使用已經(jīng)很成熟,開發(fā)難度相對不高,所以,選擇其作為發(fā)射機、接收機的主控芯片。 圖4.3 STC89C52引腳圖圖4.4 單片機的復(fù)位與晶振電路4.2.3 NRF24L01無線模塊本系統(tǒng)設(shè)計采用無線方式向終端傳輸溫濕度數(shù)據(jù)。本系統(tǒng)無線輸模塊采用單片射頻收發(fā)芯片NRF24L01。4.2.3.1 NRF24L01的管腳瞥濤NRF24L01有8個引腳,各個引腳的具體說明如表4.1所示

11、。瞥濤表4.1 NRF24L01各個引腳說明瞥濤管腳瞥濤名稱瞥濤管腳功能瞥濤方向瞥濤pin1瞥濤VDD瞥濤正電源輸入瞥濤瞥濤pin2瞥濤CE瞥濤工作模式選擇,RX或TX瞥濤I 瞥濤Pin3瞥濤CSN瞥濤SPI片選使能,低電平使能瞥濤I瞥濤pin4瞥濤SCK瞥濤SPI時鐘瞥濤I瞥濤pin5瞥濤MOSI瞥濤SPI輸入瞥濤I瞥濤pin6瞥濤MISO瞥濤SPI輸出瞥濤O瞥濤pin7瞥濤IRQ瞥濤中斷輸出瞥濤O瞥濤pin8瞥濤GND瞥濤電源地瞥濤瞥濤4.2.3.2無線傳輸模塊的硬件設(shè)計 本系統(tǒng)中兩個發(fā)射機各有一個無線發(fā)射模塊,一個接收機含有一個無線接收模塊。由于NRF24L01兼?zhèn)浒l(fā)送與接收功能,所以發(fā)

12、射、接受模塊全部采用NRF24L01,與主機STC89C52的硬件連接也全部相同。NRF24L01無線模塊直接與STC89C52連接,電路圖如圖4.5所示。瞥濤圖4.5 NRF24L01無線模塊電路圖瞥濤4.2.4顯示模塊瞥濤LCD1602液晶顯示是一種常用的顯示方式。LCD1602顯示內(nèi)容十分豐富,能夠顯示字母,符號和數(shù)字等192種字符,且可同時顯示16x2個字符,滿足了本系統(tǒng)對于多組數(shù)據(jù)同時顯示的要求。顯示屏共有16個引腳,節(jié)省了單片機的大量I/O口,且電路連接簡單,容易焊接。此種顯示方式響應(yīng)也較快,亮度可調(diào),成本低,是顯示終端的最佳選擇。瞥 接收機收到溫濕度數(shù)據(jù)后,利用LCD1602顯示

13、兩個監(jiān)測點A1、A2的溫濕度信息。LCD1602液晶顯示芯片采用標準的16腳接口,其各個引腳及說明如表3.6所示。瞥濤表4.2 LCD1602各個引腳的說明瞥濤編號瞥濤符號瞥濤引腳說明瞥濤編號瞥濤符號瞥濤引腳說明瞥濤1瞥濤VSS瞥濤電源地瞥濤9瞥濤D2瞥濤數(shù)據(jù)I/O瞥濤2瞥濤VDD瞥濤電源正極瞥濤10瞥濤D3瞥濤數(shù)據(jù)I/O瞥濤3瞥濤VL瞥濤液晶顯示偏壓瞥濤11瞥濤D4瞥濤數(shù)據(jù)I/O瞥濤4瞥濤RS瞥濤數(shù)據(jù)/命令選擇瞥濤12瞥濤D5瞥濤數(shù)據(jù)I/O瞥濤5瞥濤R/W瞥濤讀/寫選擇瞥濤13瞥濤D6瞥濤數(shù)據(jù)I/O瞥濤6瞥濤E瞥濤使能信號瞥濤14瞥濤D7瞥濤數(shù)據(jù)I/O瞥濤7瞥濤D0瞥濤數(shù)據(jù)I/O瞥濤15瞥濤

14、BLA瞥濤背光源正極瞥濤8瞥濤D1瞥濤數(shù)據(jù)I/O瞥濤16瞥濤BLK瞥濤背光源負極瞥濤 LCD1602電路連接圖如圖4.6所示。 瞥濤瞥濤圖4.6 LCD1602模塊電路圖瞥濤5. 系統(tǒng)軟件設(shè)計5.1主程序流程設(shè)計本系統(tǒng)由兩個發(fā)射機A1、A2與一個接收機B組成,可以設(shè)計出發(fā)射機的總體程序流程圖和接收機的總體程序流程圖。發(fā)射機程序主要是溫濕度采集處理程序,NRF24L01發(fā)送程序。接收機主要是數(shù)據(jù)接收程序,液晶顯示程序。瞥濤5.1.1發(fā)射機的總體軟件設(shè)計瞥濤發(fā)送部分的總體設(shè)計思路為:初始化溫度傳感器DHT11;傳感器測得溫濕度;把溫濕度值寫入待發(fā)射數(shù)據(jù);初始化NRF24L01無線模塊;將溫濕度發(fā)送

15、給接收機,其流程圖如圖5.1所示瞥濤 瞥濤圖5.1 發(fā)射機程序流程圖瞥濤5.1.2 接收機的總體軟件設(shè)計瞥濤接收部分的總體設(shè)計思路是:初始化NRF24L01無線模塊和LCD1602顯示模塊;接收溫濕度數(shù)據(jù);在LCD1602上分組顯示,其程序流程圖如圖5.2所示。瞥濤 瞥濤圖5.2 接收機程序流程圖瞥5.2.子程序設(shè)計5.2.1 溫濕度采集模塊軟件設(shè)計瞥濤 發(fā)射機利用DHT11進行溫濕度采集,DATA引腳連接于STC89C52的P17口以進行數(shù)據(jù)傳輸。NRF24L01通過DATA總線發(fā)送出的溫濕度數(shù)據(jù)分小數(shù)部分和整數(shù)部分,共40bit。數(shù)據(jù)格式為:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8b

16、i溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗。瞥濤本系統(tǒng)DHT11的工作流程如下:開機后,DHT11處于低功耗模式,當(dāng)它檢測到STC89C52發(fā)送出的開始信號后,其轉(zhuǎn)換到高速模式,開始進行溫濕度采集,并以以上所說的數(shù)據(jù)格式發(fā)送至STC89C52,然后進入低速模式。單片機可以選擇讀取溫濕度數(shù)據(jù)。瞥濤DATA總線空閑狀態(tài)為高電平,DHT11接收到的開始信號必須是大于18ms的低電平,否則,DHT11便無法視其為開始信號。開始信號結(jié)束后,DHT11會發(fā)送80us的低電平響應(yīng)信號。STC89C52發(fā)送開始信號后,需要等待20-40us,然后讀取DHT11回饋的低電平響應(yīng)信號。若讀取總線為低電平,

17、則說明DHT11收到了開始信號。DHT11發(fā)送響應(yīng)信號后,再把總線拉高80us,準備發(fā)送數(shù)據(jù),每一bit數(shù)據(jù)都以50us低電平時隙開始,高電平的長短決定了數(shù)據(jù)位是0還是1。當(dāng)最后一bit數(shù)據(jù)傳送完畢后,DHT11拉低總線50us,隨后總線再次進入空閑狀態(tài)。根據(jù)DHT11與單片機的數(shù)據(jù)通信時序,可以設(shè)計出溫濕度采集處理的程序流程圖,如圖5.3所示。瞥濤 瞥濤圖5.3 溫濕度采集程序流程圖瞥濤瞥濤5.2.2無線傳輸模塊軟件設(shè)計瞥濤發(fā)射機含有數(shù)據(jù)發(fā)射模塊,接收機含有數(shù)據(jù)接收模塊,兩種模塊都采用NRF24L01。所以在進行無線數(shù)據(jù)通信時,需要把發(fā)射機的NRF24L01配置為發(fā)射模式,把接收機的NRF2

18、4L01配置為接收模式。瞥濤5.2.2.1數(shù)據(jù)發(fā)送模塊軟件設(shè)計瞥濤NRF24L01的發(fā)送模塊程序流程圖如圖5.4所示。瞥濤瞥濤圖5.4 發(fā)送模塊程序流程圖瞥濤5.2.2.2 數(shù)據(jù)接收模塊軟件設(shè)計瞥濤接收機要想顯示溫濕度,就必須要通過NRF24L01接收兩個發(fā)射機發(fā)送的溫濕度數(shù)據(jù)。NRF24L01的接收模塊程序流程圖如圖5.5所示。瞥濤 瞥濤圖5.5 接收模塊程序流程圖瞥濤5.2.3 顯示模塊軟件設(shè)計 顯示模塊軟件設(shè)計相對簡單,首先將LCD1602初始化,然后STC89C52通過數(shù)據(jù)傳輸端口P0.0P0.6向LCD1602傳送溫濕度數(shù)據(jù)信息。若LCD1602正確接收到數(shù)據(jù)信息,則顯示收到的溫濕度

19、數(shù)據(jù)。延時0.8S后,重新開始讀取下一個時間段溫濕度數(shù)據(jù),進入循環(huán)。若LCD1602讀取數(shù)據(jù)錯誤,則直接返回,重新讀取。程序流程圖如圖5.6所示瞥濤圖5.6 LCD1602顯示模塊程序流程圖瞥濤6.系統(tǒng)調(diào)試整個系統(tǒng)的電路焊接完成后,開始進行整個系統(tǒng)的調(diào)試。在整個調(diào)試的過程中主要使用Keil vision5軟件和pz-isp軟件。瞥濤首先對程序進行設(shè)計以及編譯。程序的編譯是一個很重要的過程,他是這整個系統(tǒng)關(guān)鍵。在編寫代碼的過程中,通過設(shè)計的流程圖,按照自己的思路進行定義以及調(diào)用函數(shù),編譯調(diào)試可以讓我們清楚地認識到函數(shù)的調(diào)用順序以及函數(shù)的調(diào)用情況。并且我們可以通過調(diào)試發(fā)現(xiàn)其中的錯誤,并通過調(diào)試改正

20、過來。通過不斷地對代碼進行調(diào)試,從而將設(shè)計完美的實現(xiàn)。瞥濤程序編譯完成后利用pz-isp軟件把三個程序分別燒錄進發(fā)射機A和接收機B的STC89C52單片機中。完成后,對系統(tǒng)進行功能測試,測試流程如下。瞥濤1.啟動發(fā)射機A和接收機B。如圖6.1所示。A的初始溫度21°C、濕度54%圖6.1 A、B初始溫濕度瞥濤瞥濤2. 將電烙鐵放在A的溫濕度傳感器DHT11旁邊,接收機的液晶屏顯示如圖6.2所示??梢钥吹?,A采集點的溫度上升至22。濕度下降至46%RH。可知發(fā)射機A工作正常,接收機能正常顯示溫濕度數(shù)據(jù),達到了本設(shè)計的對于無線采集某點溫濕度要求。 瞥濤 圖6.2 A、B溫濕度發(fā)生改變綜上

21、可知,本系統(tǒng)完整的實現(xiàn)了預(yù)設(shè)功能,本次設(shè)計制作成功。7.總結(jié)本系統(tǒng)是基于51單片機的多點溫濕度采集和無線傳輸系統(tǒng),由兩個發(fā)射模塊與一個接收模塊組成。發(fā)射機利用數(shù)字溫濕度傳感器DHT11采集環(huán)境溫濕度數(shù)據(jù)并傳送給STC89C52單片機,單片機進行數(shù)據(jù)處理后利用無線傳輸模塊NRF24L01進行無線發(fā)送。接收模塊的NRF24L01將接收到的數(shù)據(jù)傳給STC89C52單片機,最后用數(shù)字顯示屏LCD1602將經(jīng)過單片機處理后的溫濕度數(shù)據(jù)顯示出來。本設(shè)計基于51單片機,能夠完成同時遠距離采集兩點溫濕度并在系統(tǒng)終端進行顯示的功能,以達到監(jiān)測多點環(huán)境溫濕度的目的。結(jié)果表明,本系統(tǒng)能夠方便、高效、及時地測量出兩個

22、采集點的溫濕度。系統(tǒng)成本低,性能好,制作相對簡單。遠程測量能達到百米左右,基本滿足日常生活的測量要求。可以輕松添加多個監(jiān)測點,程序移植性十分好。系統(tǒng)可擴展性也比較強,在此程序框架上添加其他模塊程序,并加入相應(yīng)的硬件,可以實現(xiàn)其他功能。如溫濕度異常報警功能,溫濕度自動調(diào)節(jié)功能。瞥濤通過這次為期兩周的實習(xí),不僅溫習(xí)了之前學(xué)習(xí)的電烙鐵焊錫絲的焊接技術(shù),更通過學(xué)習(xí)系統(tǒng)的各個模塊電路原理圖,回顧了相關(guān)知識。同時,對單片機軟件的編寫也是一種全新的學(xué)習(xí),溫故又知新。可以說此次的實習(xí)是從理論和實踐一舉兩得的實習(xí)。8.參考文獻1丁向榮,單片機應(yīng)用系統(tǒng)與開發(fā)技術(shù)項目教程,北京:清華大學(xué)出版社,20152丁永紅,孫

23、運強,基于nRF2401的無線數(shù)傳系統(tǒng)設(shè)計,北京:國外電子測量技術(shù),20083魏立峰,王寶興,單片機原理與應(yīng)用技術(shù),北京:北京大學(xué)出版社,20164李文仲,段朝玉,短距離無線數(shù)據(jù)通信入門與實戰(zhàn),北京:北京航空航天大學(xué)出版社,20065喻金錢,喻斌,短距離無線通信詳解:基于單片機控制,北京:北京航空航天大學(xué)出版社,20099. 附錄附錄1:系統(tǒng)總體結(jié)構(gòu)電路原理圖附錄2:程序清單1.發(fā)送端#include <reg52.h>#include <intrins.h>#include <stdio.h>#define uchar unsigned char#defi

24、ne uint unsigned int/dht接口sbit io = P17;/lcd接口typedef bit BOOL;sbit rs = P25;sbit rw = P26;sbit ep = P27;/nrf接口#define READ_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 / 沖

25、洗接收 FIFO指令#define REUSE_TX_PL 0xE3 / 定義重復(fù)裝載數(shù)據(jù)指令#define NOP 0xFF / 保留/*寄存器地址*/#define CONFIG 0x00 / 配置收發(fā)狀態(tài),CRC校驗?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 /

26、發(fā)射速率、功耗功能設(shè)置#define STATUS 0x07 / 狀態(tài)寄存器#define OBSERVE_TX 0x08 / 發(fā)送監(jiān)測功能#define CD 0x09 / 地址檢測#define RX_ADDR_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ù)

27、地址#define TX_ADDR 0x10 / 發(fā)送地址寄存器#define RX_PW_P0 0x11 / 接收頻道0接收數(shù)據(jù)長度#define RX_PW_P1 0x12 / 接收頻道1接收數(shù)據(jù)長度#define RX_PW_P2 0x13 / 接收頻道2接收數(shù)據(jù)長度#define RX_PW_P3 0x14 / 接收頻道3接收數(shù)據(jù)長度#define RX_PW_P4 0x15 / 接收頻道4接收數(shù)據(jù)長度#define RX_PW_P5 0x16 / 接收頻道5接收數(shù)據(jù)長度#define FIFO_STATUS 0x17 / FIFO棧入棧出狀態(tài)寄存器設(shè)置#define TX_ADR_W

28、IDTH 5 #define RX_ADR_WIDTH 5 #define TX_PLOAD_WIDTH 8 #define RX_PLOAD_WIDTH 8 sbit SCK = P20;sbit MISO = P21;sbit IRQ = P22;sbit MOSI = P23;sbit CSN = P24;sbit CE = P37;uchar bdata sta;sbit MAX_RT = sta4;sbit TX_DS = sta5;sbit RX_DR = sta6;uchar const TX_ADDRESSTX_ADR_WIDTH = 0x34,0x43,0x10,0x10,0

29、x01; /本地地址/主函數(shù)數(shù)據(jù)sbit LED = P35;uchar TxBuf8;extern uchar RH, RL, TH, TL;/延時模塊1void delay_us(uint i) /誤差 0us uchar a,b,c;for(c=i;c>0;c-) for(b=1;b>0;b-) for(a=32;a>0;a-);void delay(uchar ms) uchar i; while(ms-) for(i=0;i<250;i+); void delay1()/延時10us uchar i; i-; i-; i-; i-; i-; i-; void

30、longdelay(uchar s) /長延時 while(s-) delay(60); /延時模塊2void Delay_t(uint j) uchar i;for(;j>0;j-)for(i=0;i<27;i+);void delay2(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/lcd模塊BOOL lcd_bz()/測試LCD忙碌狀態(tài) BOOL result; rs = 0; rw = 1; ep = 1; result = (BOOL)(P0 & 0x80); ep = 0; return resu

31、lt; void write_cmd(uchar cmd)/ 寫指令 while(lcd_bz(); rs = 0; rw = 0; ep = 0; P0 = cmd; ep = 1; ep = 0; void write_addr(uchar addr)/寫地址 write_cmd(addr|0x80); /“位或”,讓addr的bit7強制賦值為1然后傳入函數(shù) 0x80=10000000Dvoid write_byte(uchar dat)/寫字節(jié) while(lcd_bz(); rs = 1; rw = 0; ep = 0; P0 = dat; ep = 1; ep = 0; void

32、lcd_init()/ 初始化 write_cmd(0x38); delay(1); write_cmd(0x08); delay(1); write_cmd(0x01); delay(1); write_cmd(0x06); delay(1); write_cmd(0x0c); delay(1);void display(uchar addr, uchar q)/在某一地址上顯示一字節(jié) delay(10); write_addr(addr); write_byte(q); longdelay(2); /dht模塊uchar data_byte; uchar RH, RL, TH, TL;uc

33、har receive_byte()/接收一個字節(jié) uchar i,temp,count;for(i=0;i<8;i+) count=2; while(!io)&&count+);/等待50us低電平結(jié)束 delay1(); delay1(); delay1(); temp=0; if(io=1) temp=1; count=2; while(io)&&count+); if(count=1)break; data_byte<<=1; data_byte|=temp; return data_byte;void receive()/接收數(shù)據(jù) u

34、char T_H,T_L,R_H,R_L,check,num_check; uchar count; io=0;Delay_t(180); io=1;delay1();delay1();delay1(); delay1(); io=1; if(!io)/讀取DHT11響應(yīng)信號 count=2;while(!io)&&count+);/DHT11高電平80us是否結(jié)束 count=2; while(io)&&count+); R_H=receive_byte(); R_L=receive_byte(); T_H=receive_byte(); T_L=receiv

35、e_byte(); check=receive_byte(); io=1; num_check=R_H+R_L+T_H+T_L; if(num_check=check) RH=R_H; RL=R_L; TH=T_H; TL=T_L; check=num_check; /nrf模塊uchar SPI_RW(uchar byte)uchar bit_ctr;for(bit_ctr=0;bit_ctr<8;bit_ctr+) / 輸出8位MOSI = (byte & 0x80); / 獲得byte的最高位數(shù)據(jù)byte = (byte << 1); / SCK = 1; /

36、byte |= MISO; / 獲得從MISO獲得的一位數(shù)據(jù)SCK = 0; / return(byte);/最后返回從MISO讀出的數(shù)據(jù) /*讀寫寄存器函數(shù)*/uchar SPI_RW_Reg(uchar reg, uchar value)uchar status;CSN = 0; / CSN拉低,啟動SPI通信status = SPI_RW(reg); /返回從MISO讀出的數(shù)據(jù),status應(yīng)為上次向該寄存器內(nèi)寫的valueSPI_RW(value); / 向寄存器中寫入數(shù)據(jù)CSN = 1; / CSN拉高,終止SPI通信return(status); / 返回2401 reg寄存器的狀

37、態(tài)/*讀出從機相關(guān)寄存器的數(shù)據(jù)*/uchar SPI_Read(uchar reg)uchar reg_val;CSN = 0; SPI_RW(reg); reg_val = SPI_RW(0); CSN = 1; return(reg_val); /*用于寫數(shù)據(jù),reg為寄存器地址 pBuf為待寫入數(shù)據(jù)地址 bytes為寫入數(shù)據(jù)的個數(shù)*/uchar SPI_Write_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status,byte_ctr;CSN = 0; / SPI使能status = SPI_RW(reg);for(byte_ctr=0

38、; byte_ctr<bytes; byte_ctr+)SPI_RW(*pBuf+);/指向下一個數(shù)據(jù) CSN = 1; return(status); / 返回24l01的狀態(tài)/*用于讀數(shù)據(jù),reg為寄存器地址,pBuf為待讀出數(shù)據(jù)地址,bytes為讀出數(shù)據(jù)的個數(shù)*/uchar SPI_Read_Buf(uchar reg, uchar *pBuf, uchar bytes)uchar status, byte_ctr;CSN = 0;status = SPI_RW(reg);for(byte_ctr=0;byte_ctr<bytes;byte_ctr+)pBufbyte_ctr

39、 = SPI_RW(0);CSN = 1;return(status);/*發(fā)送tx_buf中的數(shù)據(jù)*/void TxPacket(uchar * tx_buf)CE=0;SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);/StandBy I模式SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); / 裝載接收端地址SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH);SPI_RW_Reg(WRITE

40、_REG + EN_AA, 0x01); / 頻道0自動ACK應(yīng)答允許SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); / 允許接收地址只有頻道0,如果需要多頻道可以參考Page21SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x0a); SPI_RW_Reg(WRITE_REG + RF_CH, 0x40); / 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致/SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為4字節(jié)SPI_RW_Reg(WRITE_REG +

41、RF_SETUP, 0x07); / 裝載數(shù)據(jù)SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e); / IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送CE=1; /置高CE,激發(fā)數(shù)據(jù)發(fā)送delay_us(10);/*設(shè)定24L01為接收方式*/void RX_Mode(void)CE=0;SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);SPI_RW_Reg(WRITE_REG + EN_AA, 0x01); / 頻道0自動ACK應(yīng)答允許SPI_RW_Reg(WRITE_REG + EN_RXAD

42、DR, 0x01); / 允許接收地址只有頻道0,如果需要多頻道可以參考Page21 SPI_RW_Reg(WRITE_REG + RF_CH, 0x40); / 設(shè)置信道工作為2.4GHZ,收發(fā)必須一致SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); /設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為4字節(jié)SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); / Set PWR_UP bit, enable CRC(2 bytes)CE = 1; /*數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中*/uchar RxPacket(uchar

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論