版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
武漢理工大學(xué)《學(xué)科基礎(chǔ)課群綜合訓(xùn)練》報告《單片機(jī)應(yīng)用設(shè)計》任務(wù)書學(xué)生姓名:男神專業(yè)班級:指導(dǎo)教師:龍毅宏工作單位:信息工程學(xué)院題目:基于單片機(jī)的2.4G無線通信系統(tǒng)課程設(shè)計目的:1、熟悉單片機(jī)應(yīng)用系統(tǒng)的硬件設(shè)計及軟件設(shè)計的基本方法;將《單片機(jī)原理與應(yīng)用》理論課的理論知識應(yīng)用于實際的應(yīng)用系統(tǒng)中;訓(xùn)練單片機(jī)應(yīng)用技術(shù),鍛煉實際動手能力提高正確地撰寫論文的基本能力。課程設(shè)計內(nèi)容和要求完成硬件電路的設(shè)計,其中包括單片機(jī)和NRF24L01芯片模塊的設(shè)計;完成無線通信模塊的程序設(shè)計與實現(xiàn),上機(jī)運行調(diào)試程序,記錄實驗結(jié)果(如圖表等),并對實驗結(jié)果進(jìn)行分析和總結(jié);
課程設(shè)計報告書按學(xué)校統(tǒng)一規(guī)范來撰寫,報告主要包括以下內(nèi)容:目錄、摘要、關(guān)鍵詞、基本原理、方案論證、硬件設(shè)計、軟件設(shè)計(帶流程圖、程序清單)、仿真結(jié)果、實物運行結(jié)果照片、結(jié)論、參考文獻(xiàn)等;查閱不少于6篇參考文獻(xiàn)。初始條件:STC89C52和NRF24L01模塊;先修課程:單片機(jī)原理與應(yīng)用。時間安排:第19周,安排設(shè)計任務(wù),完成硬件設(shè)計;第20周,完成軟件設(shè)計、撰寫報告,答辯。指導(dǎo)教師簽名:年月日系主任(或責(zé)任教師)簽名:年月日
目錄摘要 摘要隨著現(xiàn)代信息技術(shù)的飛速發(fā)展,數(shù)據(jù)的無線傳輸在工業(yè)、農(nóng)業(yè)及人們的日常生活中扮演著一個越來越重要的角色,它對人們的生活具有很大的影響,所以數(shù)據(jù)的無線傳輸應(yīng)用的設(shè)計與研究有十分重要的意義。本文給出了一種基于單片機(jī)的2.4G無線通信系統(tǒng),主要采用STC89C52單片機(jī)與NRF24L01無線通信模塊進(jìn)行半雙工通信,通過按鍵輸入數(shù)據(jù),LCD1602顯示發(fā)送和接收到的信息。文中主要介紹了單片機(jī)、無線通信模塊的工作原理,系統(tǒng)的各模塊設(shè)計,以及程序設(shè)計,硬件電路設(shè)計。結(jié)果表明該系統(tǒng)結(jié)構(gòu)簡單,可靠,功耗較低,成本低,能夠滿足設(shè)計要求。關(guān)鍵詞:STC89C52NRF24L01通信
AbstractWiththerapiddevelopmentofmoderninformationtechnology,wirelessdatatransmissioninindustry,agricultureandPeople'sDailylifeplayanincreasinglyimportantrole,ithasagreatinfluenceonpeople'slives,sothedesignofthewirelesstransmissionofdataapplicationandtheresearchhastheveryvitalsignificance.Thispaperpresentsa2.4Gwirelesscommunicationsystembasedonsinglechipmicrocomputer,mainlyadoptsSTC89C52MCUNRF24L01wirelesscommunicationmodulewithhalfduplexcommunication,throughthepressedkeyinputdata,LCD1602displaytosendandreceiveinformation.Thispapermainlyintroducestheworkingprincipleofsingle-chipcomputer,wirelesscommunicationmodule,themoduledesignofthesystem,aswellasprogramdesign,hardwarecircuitdesign.Theresultsshowthatthesystemhassimplestructure,reliable,lowpowerconsumption,lowcost.Tomeetthedesignrequirements
Keywords:STC89C52NRF24L01communication
1緒論隨著現(xiàn)代信息技術(shù)的飛速發(fā)展,數(shù)據(jù)的無線傳輸在工業(yè)、農(nóng)業(yè)及人們的日常生活中扮演著一個越來越重要的角色,并且已滲透到社會的各個角落,有著廣闊的市場和業(yè)務(wù)需要。它對人們的生活具有很大的影響,所以數(shù)據(jù)的無線傳輸應(yīng)用的設(shè)計與研究有十分重要的意義。目前主要的無線技術(shù)有:藍(lán)牙(Bluetooth),紅外數(shù)據(jù)傳輸(IrDA),無線局域網(wǎng)(Wi—Fi)、ZigBee等。Bluetooth是無線數(shù)據(jù)和語音傳輸?shù)拈_放式標(biāo)準(zhǔn),它將各種通信設(shè)備、計算機(jī)及其終端設(shè)備、各種數(shù)字?jǐn)?shù)據(jù)系統(tǒng)、甚至家用電器采用無線方式聯(lián)接起來。由于藍(lán)牙采用無線接口來代替有線電纜連接,具有很強(qiáng)的移植性,并且適用于多種場合,加上該技術(shù)功耗低、對人體危害小,而且應(yīng)用簡單、容易實現(xiàn),所以易于推廣。但同時其應(yīng)用成本升高,普及難度增大,且通信速率較慢;IrDA是一種利用紅外線進(jìn)行點對點通信的技術(shù),是第一個實現(xiàn)無線個人局域網(wǎng)(PAN)的技術(shù),但它對于點對多點的通信顯得無能為力,且紅外技術(shù)只能在視線可以達(dá)到的范圍內(nèi)定向傳輸,中間不能有任何阻擋,同時要求通信設(shè)備的位置相對固定,這樣就無法應(yīng)用于移動設(shè)備;Wi—Fi是以太網(wǎng)的一種無線擴(kuò)展,主要目的是提供WLAN接人,但由于其硬件實現(xiàn)需要很大的容納空間,且往往在商用計算機(jī)系統(tǒng)中實現(xiàn),這就限制了其在工業(yè)領(lǐng)域,尤其是在某些不依賴通用計算機(jī)的特殊工業(yè)場合的應(yīng)用。ZigBee技術(shù)是一種短距離、低功耗的無線通信技術(shù),主要用于距離短、功耗低且傳輸速率不高的各種電子設(shè)備之間進(jìn)行數(shù)據(jù)傳輸以及典型的有周期性數(shù)據(jù)、間歇性數(shù)據(jù)和低反應(yīng)時間數(shù)據(jù)傳輸?shù)膽?yīng)用。針對這些問題提出了一種功耗低、成本低且利于在嵌入式系統(tǒng)中實現(xiàn)的基于單片機(jī)的無線通信系統(tǒng),它基于無需申請就可使用的2.4GISM頻段,可廣泛適用于消費類電子、無線遙控玩具、汽車用自動化、家庭自動化控制及建筑安全裝置等領(lǐng)域。
2系統(tǒng)整體方案設(shè)計設(shè)計要求以STC89C52單片機(jī)為主控,NRF24L01模塊作為無線通信模塊,剩余需要設(shè)計的主要有輸入和輸出顯示設(shè)備。輸入設(shè)備常用的主要有按鍵和串口,按鍵硬件簡單,能夠輸出的1、0兩種電平,傳遞的信息速度較慢,程序時間簡單;串口通過電腦能夠一次性發(fā)送大量數(shù)據(jù),數(shù)據(jù)傳輸速率快,程序?qū)崿F(xiàn)相對較復(fù)雜,并且需要電腦來傳遞數(shù)據(jù)不利于系統(tǒng)的獨立工作??紤]到目前學(xué)習(xí)的深度以及實現(xiàn)的便捷性,采用按鍵實現(xiàn)1、0兩種信號的輸入,根據(jù)數(shù)字電路的知識,僅通過1、0兩種信號就能傳遞出目前計算機(jī)所有的信息,能夠?qū)崿F(xiàn)要求的無線通信系統(tǒng)。輸出顯示設(shè)備主要有小燈、液晶、串口等設(shè)備。小燈通過亮滅來代表高低電平,硬件電路簡單控制程序簡單。液晶主要有LCD1602和LCD12864兩種,具有字符顯示功能,硬件接口使用較多,程序控制較復(fù)雜但現(xiàn)實的信息豐富,能夠靈活的顯示各種調(diào)試的信息,大大加快代碼的調(diào)試進(jìn)度。串口通過電腦能夠一次性發(fā)送大量數(shù)據(jù),數(shù)據(jù)傳輸速率快,程序?qū)崿F(xiàn)相對較復(fù)雜,并且需要電腦來傳遞數(shù)據(jù)不利于系統(tǒng)的獨立工作??紤]到系統(tǒng)程序的調(diào)試,采用液晶作為顯示設(shè)備,根據(jù)實際需要以及元件價格采用LCD1602作為輸出顯示設(shè)備。系統(tǒng)框圖如圖1所示。圖1系統(tǒng)框圖
3基本原理3.1STC89C52微處理器STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,具有8K字節(jié)系統(tǒng)可編程Flash存儲器。STC89C52使用經(jīng)典的MCS-51內(nèi)核,但做了很多的改進(jìn)使得芯片具有傳統(tǒng)51單片機(jī)不具備的功能。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得STC89C52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。STC89C52具有如下基本功能:8k字節(jié)Flash,512字節(jié)RAM,32位I/O口線,看門狗定時器,內(nèi)置4KBEEPROM,復(fù)位電路,3個16位定時器/計數(shù)器,4個外部中斷,一個7向量4級中斷結(jié)構(gòu)(兼容傳統(tǒng)51的5向量2級中斷結(jié)構(gòu)),全雙工串行口。另外STC89C52可降至0Hz靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU停止工作,允許RAM、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié),單片機(jī)一切工作停止,直到下一個中斷或硬件復(fù)位為止。最高運作頻率35MHz,6T/12T可選。因此其基本特性表現(xiàn)為:8K字節(jié)程序存儲空間,512字節(jié)數(shù)據(jù)存儲空間,內(nèi)帶4K字節(jié)EEPROM存儲空間,可直接使用串口下載。STC89C52器件參數(shù)如下:1、增強(qiáng)型8051單片機(jī),6時鐘/機(jī)器周期和12時鐘/機(jī)器周期可以任意選擇,指令代碼完全兼容傳統(tǒng)8051。2、工作電壓:5.5V~3.3V(5V單片機(jī))/3.8V~2.0V(3V單片機(jī))。3、工作頻率范圍:0~40MHz,相當(dāng)于普通8051的0~80MHz,實際工作頻率可達(dá)48MHz。4、用戶應(yīng)用程序空間為8K字節(jié)。5、片上集成512字節(jié)RAM。6、通用I/O口(32個),復(fù)位后為:P1/P2/P3是準(zhǔn)雙向口/弱上拉,P0口是漏極開路輸出,作為總線擴(kuò)展用時,不用加上拉電阻,作為I/O口用時,需加上拉電阻。7、ISP(在系統(tǒng)可編程)/IAP(在應(yīng)用可編程),無需專用編程器,無需專用仿真器,可通過串口(RXD/P3.0,TXD/P3.1)直接下載用戶程序,數(shù)秒即可完成一片。8、具有EEPROM功能。9、共3個16位定時器/計數(shù)器,即定時器T0、T1、T210、外部中斷4路,下降沿中斷或低電平觸發(fā)電路,PowerDown模式可由外部中斷低電平觸發(fā)中斷方式喚醒。11、通用異步串行口(UART),還可用定時器軟件實現(xiàn)多個UART。12、工作溫度范圍:-40~+85℃(工業(yè)級)/0~75℃(商業(yè)級)。13、PDIP封裝。STC89C52管腳圖如圖2所示。圖2STC89C52管腳圖3.2NRF24L01無線通信模塊3.2.1NRF24L01芯片概述NRF24L01是由NORDIC生產(chǎn)的工作在2.4GHz~2.5GHz的ISM頻段的單片無線收發(fā)器芯片。無線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型“SchockBurst”模式控制器、功率放大器、晶體振蕩器、調(diào)制器和解調(diào)器。輸出功率頻道選擇和協(xié)議的設(shè)置可以通過SPI接口進(jìn)行設(shè)置。幾乎可以連接到各種單片機(jī)芯片,并完成無線數(shù)據(jù)傳送工作。其電流消耗極低:當(dāng)工作在發(fā)射模式下發(fā)射功率為0dBm時電流消耗為11.3mA,接收模式時為12.3mA,掉電模式和待機(jī)模式下電流消耗更低。其主要應(yīng)用領(lǐng)域包括:無線鼠標(biāo)、鍵盤、游戲機(jī)操縱桿、無線門禁、無線數(shù)據(jù)通訊、安防系統(tǒng)、遙控裝置、遙感勘測和玩具等領(lǐng)域,因此應(yīng)用十分廣泛。NRF24L01器件參數(shù)如下所示:1、小體積,QFN204x4mm封裝。2、寬電壓工作范圍,1.9V~3.6V,輸入引腳可承受5V電壓輸入。3、工作溫度范圍,-40℃~+80℃。4、工作頻率范圍,2.400GHz~2.525GHz。5、發(fā)射功率可選擇為0dBm、-6dBm、-12dBm和-18dBm。6、數(shù)據(jù)傳輸速率支持1Mbps、2Mbps。7、低功耗設(shè)計,接收時工作電流12.3mA,0dBm功率發(fā)射時11.3mA,掉電模式時僅為900nA。8、126個通訊通道,6個數(shù)據(jù)通道,滿足多點通訊和調(diào)頻需要9、增強(qiáng)型“ShockBurst”工作模式,硬件的CRC校驗和點對多點的地址控制。10、數(shù)據(jù)包每次可傳輸1~32Byte的數(shù)據(jù)11、4線SPI通訊端口,通訊速率最高可達(dá)8Mbps,適合與各種MCU連接。12、可通過軟件設(shè)置工作頻率、通訊地址、傳輸速率和數(shù)據(jù)包長度。13、MCU可通過IRQ引腳快判斷是否完成數(shù)據(jù)接收和數(shù)據(jù)發(fā)送。NRF24L01芯片共有20個引腳,其管腳圖如圖3所示:圖3NRF24L01管腳圖各引腳功能如下:CE:使能發(fā)射或接收;CSN、SCK、MOSI、MISO:SPI引腳端,微處理器可通過此引腳配置NRF24L01;IRQ:中斷標(biāo)志位;VDD:電源輸入端,+1.8~+3.9V;VSS:電源地;XC1,XC2:晶體振蕩器引腳;VDD_PA:為功率放大器供電,輸出為1.8V;ANT1,ANT2:天線接口;IREF:參考電流輸入。3.2.3工作模式工作模式由CE引腳與PWR_UP、PRIM_RX兩寄存器共同控制,可以配置為發(fā)送模式、接收模式、待機(jī)模式、掉電模式。其中發(fā)送模式分為發(fā)送模式一和發(fā)送模式二。發(fā)送模式一:在進(jìn)入此模式后,只要CSN置高,在FIFO中的數(shù)據(jù)就會立即發(fā)射出去,直到所有數(shù)據(jù)發(fā)射完畢,之后進(jìn)入待機(jī)模式二。發(fā)送模式二:正常的發(fā)射模式,CE端的高電平應(yīng)至少保持10us,NRF24L01將發(fā)射一個數(shù)據(jù)包,之后進(jìn)入待機(jī)模式一。待機(jī)模式分為待機(jī)模式一和待機(jī)模式二。待機(jī)模式一:用于降低電流損耗,在該模式下晶體振蕩器仍然是工作的。待機(jī)模式二:在當(dāng)FIFO寄存器為空且CE=1時進(jìn)入此模式。待機(jī)模式下,所有配置字仍然保留。在掉電模式下電流損耗最小,同時NRF24L01也不工作,但其所有配置寄存器的值仍然保留。具體工作模式轉(zhuǎn)變見圖4。圖4工作模式3.2.4工作原理發(fā)射數(shù)據(jù)時,首先將NRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入NRF24L01緩存區(qū),TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù);若自動應(yīng)答開啟,那么NRF24L01在發(fā)射數(shù)據(jù)后立即進(jìn)入接收模式,接收應(yīng)答信號(自動應(yīng)答接收地址應(yīng)該與接收節(jié)點地址TX_ADDR一致)。如果收到應(yīng)答,則認(rèn)為此次通信成功,TX_DS置高,同時TX_PLD從TXFIFO中清除;若未收到應(yīng)答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(ARC)達(dá)到上限,MAX_RT置高,TXFIFO中數(shù)據(jù)保留以便在次重發(fā),MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,若CE為低則NRF24L01進(jìn)入空閑模式1,若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進(jìn)入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進(jìn)入空閑模式2。接收數(shù)據(jù)時,首先將NRF24L01配置為接收模式,接著延遲130μs進(jìn)入接收狀態(tài)等待數(shù)據(jù)的到來。當(dāng)接收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RXFIFO中,同時中斷標(biāo)志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時自動應(yīng)答開啟,接收方則同時進(jìn)入發(fā)射狀態(tài)回傳應(yīng)答信號。最后接收成功時,若CE變低,則NRF24L01進(jìn)入空閑模式1。在寫寄存器之前一定要進(jìn)入待機(jī)模式或掉電模式。3.3SPI串行外設(shè)接口SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便。SPI的通信原理很簡單,它以主從方式工作,這種模式通常有一個主設(shè)備和一個或多個從設(shè)備,需要至少4根線,事實上3根也可以(單向傳輸時)。也是所有基于SPI的設(shè)備共有的,它們是MISO(數(shù)據(jù)輸入)、MOSI(數(shù)據(jù)輸出)、SCK(時鐘)、CSN(片選)。SPI時序較簡單,主要是在SCK時鐘的控制下,兩個雙向移位寄存器進(jìn)行數(shù)據(jù)交換,上升沿發(fā)送、下降沿接收、高位先發(fā)送。上升沿到來的時候,MOSI上的電平將被發(fā)送到從設(shè)備的寄存器中,下降沿到來的時候,MISO上的電平將被接收到主設(shè)備的寄存器中。具體時序圖如圖5、圖6所示。圖5SPI讀操作時序圖6SPI寫操作時序NRF24L01與STC89C52單片機(jī)采用4線SPI通信協(xié)議進(jìn)行通信,由于STC89C52單片機(jī)并沒有SPI通信接口,故采用4個IO口進(jìn)行模擬SPI通信,最大數(shù)據(jù)傳輸速度能達(dá)到10Mbps。采用特殊的SPI指令快速訪問最頻繁使用的功能,其指令為8bit,有簡單的寄存器配置映射圖。其指令如圖7所示。圖7SPI指令格式3.4LCD1602液晶顯示LCD1602也叫1602字符型液晶,它是一種專門用來顯示字母、數(shù)字、符號等的點陣型液晶模塊。它由若干個5X7或者5X11等點陣字符位組成,每個點陣字符位都可以顯示一個字符,每位之間有一個點距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因為如此所以它不能很好地顯示圖形。1602是指顯示的內(nèi)容為16X2,即可以顯示兩行,每行16個字符液晶模塊。1602采用標(biāo)準(zhǔn)的16腳接口,其中:第1腳:GND為電源地。第2腳:VCC接5V電源正極。第3腳:V0為液晶顯示器對比度調(diào)整端,接正電源時對比度最弱,接地電源時對比度最高(對比度過高時會產(chǎn)生“鬼影”,使用時可以通過一個10K的電位器調(diào)整對比度)。第4腳:RS為寄存器選擇,高電平時選擇數(shù)據(jù)寄存器、低電平0時選擇指令寄存器。第5腳:RW為讀寫信號線,高電平時進(jìn)行讀操作,低電平時進(jìn)行寫操作。第6腳:EN端為使能端,高電平時讀取信息,負(fù)跳變時執(zhí)行指令。第7~14腳:D0~D7為8位雙向數(shù)據(jù)端。第15~16腳:空腳或背燈電源。15腳背光正極,16腳背光負(fù)極。LCD1602采用3.3V或5V供電電壓,對比度可調(diào),內(nèi)含復(fù)位電路,能夠提供各種控制命令如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能。其有80字節(jié)顯示數(shù)據(jù)存儲器DDRAM,內(nèi)建有192個5X7點陣的字型的字符發(fā)生器CGROM,8個可由用戶自定義的5X7的字符發(fā)生器CGRAM。由于其功耗低、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。實物圖如圖8所示。圖8LCD1602實物圖
4硬件電路設(shè)計4.1STC89C52最小系統(tǒng)設(shè)計對于STC89C52單片機(jī)電路,主要設(shè)計出其最小系統(tǒng),包括:電源濾波電路,晶體振蕩電路,復(fù)位電路。單片機(jī)采用+5V電源進(jìn)行供電,由于空氣中存在電磁干擾,不利于電壓的穩(wěn)定,需要添加濾波電路。電源濾波電路包括一個100μF電容和幾個0.1μF電容進(jìn)行去耦。復(fù)位電路采用按鍵加電容組合,具備上電復(fù)位和手動按鍵復(fù)位的功能。上電復(fù)位:RC在通電瞬間的充電過程中,RST引腳會出現(xiàn)一定寬度的正脈沖,只要該正脈沖保持10ms以上,就能保證單片機(jī)自動復(fù)位。晶振電路加入2個20pF的電容,主要是幫組晶振起振,并維持震蕩信號的穩(wěn)定。電路圖如圖9所示。圖9單片機(jī)最小系統(tǒng)電路4.2外設(shè)電路設(shè)計NRF24L01無線通信模塊,由于該模塊制作比較復(fù)雜,電感等原件不利于焊接等,因此此設(shè)計中采用現(xiàn)有的模塊,其電路如圖10所示。圖10NRF24L01通信模塊電路采用3個按鍵加上拉電阻構(gòu)成輸入設(shè)備,電路圖如圖11所示。圖11按鍵輸入設(shè)備電路由于NRF24L01無線通信模塊采用1.9~3.9V電壓進(jìn)行供電,一旦超出3.9V電壓極可能出現(xiàn)燒毀現(xiàn)象,而STC89C52單片機(jī)采用+5V電壓供電,因此需要一個電壓轉(zhuǎn)換電路。采用ASM1117芯片進(jìn)行5V轉(zhuǎn)3.3V對無線通信模塊進(jìn)行供電,根據(jù)ASM1117芯片數(shù)據(jù)手冊,在輸入和輸出之間均需要加入濾波電容。其電路如圖12所示。圖12ASM1117電壓轉(zhuǎn)換電路采用LCD1602進(jìn)行接收和發(fā)送數(shù)據(jù)的顯示,由于STC89C52單片機(jī)P0口無上拉電阻,不能輸出高電平,故在與P0口連接的DB0~DB7接入上拉電阻,使P0口能夠正常輸出高電平。V0引腳為背光對比度調(diào)節(jié)電阻,接一個10K的可調(diào)電阻以保證液晶能夠正常顯示。電路如圖13所示。圖13LCD1602原理圖4.3系統(tǒng)整體電路系統(tǒng)整體電路如下所示,各引腳之間沒有采用線直接連接,而是通過net進(jìn)行連接。圖14系統(tǒng)整體電路圖
5軟件程序設(shè)計5.1編程軟件KEIL簡介KeilC51是美國KeilSoftware公司出品的51系列兼容單片機(jī)C語言軟件開發(fā)系統(tǒng),與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。Keil提供了包括C編譯器、宏匯編、鏈接器、庫管理和一個功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開發(fā)方案,通過一個集成開發(fā)環(huán)境(μVision)將這些部分組合在一起。運行Keil軟件需要WIN98、NT、WIN2000、WINXP等操作系統(tǒng)。在使用C語言編程時,那么Keil幾乎就是不二之選,即使不使用C語言而僅用匯編語言編程,其方便易用的集成環(huán)境、強(qiáng)大的軟件仿真調(diào)試工具也會事半功倍。KeilC51單片機(jī)軟件開發(fā)系統(tǒng)工具包的整體結(jié)構(gòu),μVision與Ishell分別是C51forWindows和forDos的集成開發(fā)環(huán)境(IDE),可以完成編輯、編譯、連接、調(diào)試、仿真等整個開發(fā)流程。開發(fā)人員可用IDE本身或其它編輯器編輯C或匯編源文件。然后分別由C51及C51編譯器編譯生成目標(biāo)文件(.obj)。目標(biāo)文件可由LIB51創(chuàng)建生成庫文件,也可以與庫文件一起經(jīng)L51連接定位生成絕對目標(biāo)文件(.abs)。abs文件由OH51轉(zhuǎn)換成標(biāo)準(zhǔn)的hex文件,以供調(diào)試器dScope51或tScope51使用進(jìn)行源代碼級調(diào)試,也可由仿真器使用直接對目標(biāo)板進(jìn)行調(diào)試,也可以直接寫入程序存貯器如EPROM中。使用獨立的Keil仿真器時,注意事項:1、仿真器標(biāo)配11.0592MHz的晶振,但用戶可以在仿真器上的晶振插孔中換插其他頻率的晶振。2、仿真器上的復(fù)位按鈕只復(fù)位仿真芯片,不復(fù)位目標(biāo)系統(tǒng)。3、仿真芯片的31腳(/EA)已接至高電平,所以仿真時只能使用片內(nèi)ROM,不能使用片外ROM;但仿真器外引插針中的31腳并不與仿真芯片的31腳相連,故該仿真器仍可插入到擴(kuò)展有外部ROM(其CPU的/EA引腳接至低電平)的目標(biāo)系統(tǒng)中使用。采用Keil具有眾多優(yōu)點:KeilC51生成的目標(biāo)代碼效率非常之高,多數(shù)語句生成的匯編代碼很緊湊,容易理解。在開發(fā)大型軟件時更能體現(xiàn)高級語言的優(yōu)勢。與匯編相比,C語言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢,因而易學(xué)易用。用過匯編語言后再使用C來開發(fā),體會更加深刻。5.1主程序設(shè)計主程序main.c運行時,先進(jìn)入main();函數(shù)進(jìn)行運行。首先,開總中斷,初始化LCD1602,初始化NRF24L01無線通信模塊,設(shè)置相應(yīng)的通信參數(shù)。接著配置定時器0為工作方式1定時2ms。進(jìn)入while(1)主循環(huán),使用KeyDriver()函數(shù)判斷按鍵是否按下,如果按下則調(diào)用KeyAction()函數(shù)執(zhí)行相應(yīng)的操作(包括無線發(fā)射模塊的發(fā)送,液晶清屏)。接著設(shè)置進(jìn)入接收模式,如果接收到數(shù)據(jù),判斷數(shù)據(jù)并在液晶上顯示。同時每2ms進(jìn)入中斷對按鍵狀態(tài)進(jìn)行掃描,將狀態(tài)值寫入KeySta[]數(shù)組當(dāng)中,在主循環(huán)中判定按鍵是否按下和彈起。程序流程框圖如圖15所示。圖15程序流程圖5.2外設(shè)程序設(shè)計外設(shè)驅(qū)動程序主要包括LCD1602.c、SPI.c、NRF24L01.c。LCD1602.c文件當(dāng)中包括初始化函數(shù)InitLcd1602();設(shè)置顯示起始RAM地址函數(shù)LcdSetCursor(uint8x,uint8y);清屏函數(shù)LcdClearScreen();向LCD1602寫一字節(jié)數(shù)據(jù)函數(shù)LcdWriteDat(uint8dat);LCD1602寫命令函數(shù)LcdWriteCmd(uint8cmd);以及查詢LCD1602是否就緒的LcdWaitReady()函數(shù);最后在主函數(shù)或其他需要的地方調(diào)用LcdShowChar(uint8x,uint8y,uint8chr)函數(shù)來顯示單個字符;調(diào)用LcdShowStr(uint8x,uint8y,uint8*str)函數(shù)來顯示字符串。LCD1602初始化程序如下。voidInitLcd1602(){LcdWriteCmd(0x38);//16*2顯示,5*7點陣,8位數(shù)據(jù)接口LcdWriteCmd(0x0C);//顯示器開,光標(biāo)關(guān)閉LcdWriteCmd(0x06);//文字不動,地址自動+1LcdWriteCmd(0x01);//清屏}SPI.c文件當(dāng)中主要包含讀寫函數(shù)。SPI_RW(uint8num)函數(shù)、SPI_Read(uint8reg)函數(shù)、SPI_RW_Reg(uint8reg,uint8value)函數(shù)、SPI_Read_Buf(uint8reg,uint8*pBuf,uint8nBytes)函數(shù)、SPI_Write_Buf(uint8reg,uint8*pBuf,uint8nBytes)函數(shù)。通過spi這些函數(shù)完成單片機(jī)與NRF24L01無線通信模塊之間的通信。NRF24L01.c文件主要包括:模塊初始化函數(shù)Init_NRF24L01(void);數(shù)據(jù)發(fā)送函數(shù)NRF24L01_TxBuffer(uint8*tx_buf);接收模式設(shè)置函數(shù)SetRX_Mode(void);數(shù)據(jù)接收函數(shù)NRF24L01_RxBuffer(uint8*rx_buf);其中初始化函數(shù)如下所示。voidInit_NRF24L01(void){Delay_us(100); CE=0;//chipenable CSN=1;//SPIdisable SCK=0;// SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//寫發(fā)送地址 SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//寫接收端地址,數(shù)據(jù)通道0 SPI_RW_Reg(WRITE_REG+EN_AA,0x01);//數(shù)據(jù)通道0自動應(yīng)答 SPI_RW_Reg(WRITE_REG+EN_RXADDR,0x01);//允許接收地址頻道0 SPI_RW_Reg(WRITE_REG+RF_CH,0);//設(shè)置信道工作頻率為2.4GHz,收發(fā)必須一致 SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//設(shè)置接收數(shù)據(jù)長度,本次設(shè)置為32字節(jié) SPI_RW_Reg(WRITE_REG+RF_SETUP,0x07); //設(shè)置發(fā)射速率為1MHz,發(fā)射功率最大值為0dB}按鍵驅(qū)動掃描在中斷中完成,通過定時器0定時2ms,將連續(xù)5次的掃描值記錄在KeySta[]數(shù)組中,在主程序中判斷是否按下彈起。其中按鍵0按下發(fā)送數(shù)據(jù)1并在液晶顯示1,;按鍵1按下發(fā)送數(shù)據(jù)2,并在液晶顯示0;按鍵2按下發(fā)送數(shù)據(jù)3,并且液晶清屏。當(dāng)接收端接收到數(shù)據(jù)1時液晶顯示數(shù)據(jù)1,接收端接收到數(shù)據(jù)2時液晶顯示數(shù)據(jù)0;當(dāng)接收端接收到數(shù)據(jù)3時清除液晶屏幕。KeyScan()函數(shù)如下所示。voidKeyScan(){ staticuint8keybuf[3]={0xFF,0xFF,0xFF}; uint8i; keybuf[0]=(keybuf[0]<<1)|KEY1; keybuf[1]=(keybuf[1]<<1)|KEY2; keybuf[2]=(keybuf[2]<<1)|KEY3; for(i=0;i<3;i++) { if((keybuf[i]&0x1F)==0x00) //按下10ms消抖 { KeySta[i]=0; } elseif((keybuf[i]&0x1F)==0x1F)//彈起 { KeySta[i]=1; } }}
6實物制作電路板正面如圖16所示,電路板反面如圖17所示。圖16電路板正面圖圖17電路板反面圖通信設(shè)備1發(fā)送數(shù)據(jù)10101111001并顯示在LCD1602第一行t:之后,接收端顯示接收的數(shù)據(jù)在r:之后,如圖18所示。可以看見通信正常。圖18設(shè)備1發(fā)送設(shè)備2接收通信設(shè)備2發(fā)送數(shù)據(jù)100111101并顯示在LCD1602第一行t:之后,接收端顯示接收的數(shù)據(jù)在r:之后,如圖19所示??梢钥匆娡ㄐ耪?。圖19設(shè)備2發(fā)送設(shè)備1接收
7總結(jié)分析本次課程設(shè)計設(shè)計了一個基于單片機(jī)的2.4GHz無線通信系統(tǒng),采用STC89C52單片機(jī)作為主控制器,采用低功耗的NRF24L01無線通信模塊作為通信設(shè)備進(jìn)行無線通信,以按鍵作為輸入設(shè)備,LCD1602作為輸出設(shè)備,成功的實現(xiàn)了信號的輸出,數(shù)據(jù)傳輸以及信息的顯示,系統(tǒng)運行穩(wěn)定,取得了預(yù)期的效果?;?1系列單片機(jī)的無線收發(fā)系統(tǒng)對低成本、低功耗、功能強(qiáng)等特點的要求得以充分體現(xiàn),從而使得高性價比的無線收發(fā)系統(tǒng)能夠?qū)崿F(xiàn)向日常應(yīng)用和工業(yè)檢測等更廣領(lǐng)域的快速推廣成為可能。在電路設(shè)計中查閱了大量資料,確保電路設(shè)計的正確性,并通過硬件的焊接以及檢測并結(jié)合簡單的軟件測試將硬件成功的制作出來。在進(jìn)行軟件程序編寫時,采用了模塊化編寫方式,首先對簡單的按鍵程序進(jìn)行編寫與調(diào)試,接著對LCD1602顯示設(shè)備進(jìn)行調(diào)試,以方便接下來的程序調(diào)試。最后,對無線通信模塊進(jìn)行編寫,先根據(jù)數(shù)據(jù)手冊寫出SPI程序,再編寫NRF24L01的發(fā)送接收程序,逐步測試。測試過程中出現(xiàn)接收方接收狀態(tài)標(biāo)志位RX_DR一直為1的情況,經(jīng)過長時間的調(diào)試以及相應(yīng)資料的查詢,終于解決的此問題。在硬件設(shè)計的過程中,使我感到標(biāo)準(zhǔn)的52系列的單片機(jī)的數(shù)據(jù)通信能力開始顯得捉襟見肘,并難以與許多新型數(shù)據(jù)接口直接連接。這主要是因為標(biāo)準(zhǔn)52系列單片機(jī)本身提供的數(shù)據(jù)傳輸接口只有8位并行數(shù)據(jù)和全雙工串行數(shù)據(jù)接口兩種,而沒有以硬件的形式提供其他各類新型數(shù)據(jù)傳輸接口。采用標(biāo)準(zhǔn)52系列單片機(jī)的應(yīng)用系統(tǒng)必需通過軟件或硬件方式對數(shù)據(jù)傳輸接口進(jìn)行擴(kuò)展,才能滿足數(shù)據(jù)通信速率和各種新型數(shù)據(jù)接口的需要。例如在本設(shè)計中單片機(jī)與NRF24L01之間的通信采用的是SPI通信接口協(xié)議,而STC89C52并沒有提供相應(yīng)的接口,只能通過IO口模擬的方式模擬SPI通信。通過本次課程設(shè)計,使我對單片機(jī)和無線通信模塊又了更深的理解,對KEIL和AD等軟件進(jìn)一步熟悉了。同時通過自己編寫程序,對C51的編程風(fēng)格有了進(jìn)一步的理解,在編寫程序的時候通過查閱數(shù)據(jù)手冊以及相應(yīng)的資料鍛煉了相應(yīng)的能力。本系統(tǒng)是從硬件和軟件兩方面來設(shè)的,目的性強(qiáng),對自己所學(xué)知識的一個綜合能力的很好的考驗,也是發(fā)揮自我創(chuàng)新能力的挑戰(zhàn)。
8參考文獻(xiàn)[1]劉嵐尹勇等,單片計算機(jī)基礎(chǔ)及應(yīng)用(第1版),武漢理工大學(xué)出版社,2016年[2]尹勇撒繼銘等,單片計算機(jī)原理及應(yīng)用(第1版),科學(xué)出版社,2013年[3]謝自美.電子線路設(shè)計·實驗·測試(第3版),華中科技大學(xué)出版社,2014年[4]劉教瑜.單片機(jī)原理及應(yīng)用.武漢理工大學(xué)出版社,2011年[5]陳小中,黃寧,趙小俠編著.單片機(jī)接口技術(shù)使用子程序.人民郵政出版社,2005年[6]常敏,王涵,范江波等編著.51單片機(jī)應(yīng)用程序開發(fā)與實踐.電子工業(yè)出版社,2009年[7]白延敏編著.51單片機(jī)典型系統(tǒng)開發(fā)實例精講.電子工業(yè)出版社,2009年
9附錄9.1附錄1元件清單表見表1。表1元件清單表元件清單表元件板一板二合計單片機(jī)最小系統(tǒng)112LCD1602112按鍵336AMS111711210μF電容11222μF電容1124.7k排阻1124.7k電阻331排10k滑阻112NRF24L01模塊112排針225排杜邦線224排電源線112排針對應(yīng)的插孔112排萬用板1129.2附錄2主要代碼如下:*****************************************************************************************************main.c********************************************************************************************************#include<reg52.h>#include"config.h"#include"Lcd1602.h"#include"main.h"#include"Nrf24l01.h"#include"spi.h"uint8KeySta[3]={1,1,1};//按鍵狀態(tài)標(biāo)志uint8T0RH=0; //T0重載值的高字節(jié)uint8T0RL=0; //T0重載值的低字節(jié)uint8x1=2,x2=2; //液晶顯示位置bitRx_flag=0; //接收數(shù)據(jù)標(biāo)志位externuint8bdatanrf_sta;externuint8idataRxBuf[2]; //接收緩存存入idata區(qū)externuint8idataTxBuf[2]; //發(fā)送緩存voidmain(){EA=1;//開總中斷InitLcd1602();//初始化液晶Init_NRF24L01(); //初始化NRF24L01ConfigTimer0(2); //配置定時器0LcdShowStr(0,0,"t:");LcdShowStr(0,1,"r:");while(1){ KeyDriver(); SetRX_Mode(); Rx_flag=NRF24L01_RxBuffer(RxBuf);//接收數(shù)據(jù) if(Rx_flag)//判定接收到數(shù)據(jù) { Rx_flag=0; if(RxBuf[1]) { if(RxBuf[1]==1) { LcdShowChar(x2,1,'1'); x2++; } elseif(RxBuf[1]==2) { LcdShowChar(x2,1,'0'); x2++; } elseif(RxBuf[1]==3) { LcdClearScreen(); LcdShowStr(0,0,"t:"); LcdShowStr(0,1,"r:"); x1=2; x2=2; } } }}}/*按鍵動作函數(shù),執(zhí)行相應(yīng)的按鍵動作*/voidKeyAction(uint8i){ if(i==0) //按鍵0按下,發(fā)送1 { LcdShowChar(x1,0,'1'); x1++; TxBuf[1]=1; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0x00; Delay(2000); } elseif(i==1) //按鍵1按下,發(fā)送0 { LcdShowChar(x1,0,'0'); x1++; TxBuf[1]=2; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0x00; Delay(2000); } elseif(i==2) //按鍵2按下,清屏 { LcdClearScreen(); LcdShowStr(0,0,"t:"); LcdShowStr(0,1,"r:"); x1=2; x2=2; TxBuf[1]=3; NRF24L01_TxBuffer(TxBuf); TxBuf[1]=0; Delay(2000); }}/*按鍵驅(qū)動函數(shù),判定那個按鍵按下*/voidKeyDriver(){ uint8i; staticuint8pdatabackup[3]={1,1,1}; for(i=0;i<3;i++) { if(backup[i]!=KeySta[i])//檢測按鍵動作{if(backup[i]!=0)//按鍵按下時執(zhí)行動作{KeyAction(i);//調(diào)用按鍵動作函數(shù)} backup[i]=KeySta[i];//刷新前一次的備份值 } }}/*按鍵掃描函數(shù)*/voidKeyScan(){ staticuint8keybuf[3]={0xFF,0xFF,0xFF}; uint8i; keybuf[0]=(keybuf[0]<<1)|KEY1; keybuf[1]=(keybuf[1]<<1)|KEY2; keybuf[2]=(keybuf[2]<<1)|KEY3; for(i=0;i<3;i++) { if((keybuf[i]&0x1F)==0x00) //按下10ms消抖 { KeySta[i]=0; } elseif((keybuf[i]&0x1F)==0x1F)//彈起 { KeySta[i]=1; } }}/*延時函數(shù)*/voidDelay(uint16s){ uint16i; for(i=0;i<s;i++); for(i=0;i<s;i++);}/*配置并啟動T0,ms-T0定時時間*/voidConfigTimer0(uint16ms){uint32tmp;tmp=(SYS_MCLK*ms)/1000;//計算所需的計數(shù)值tmp=65536-tmp;//計算定時器重載值tmp=tmp+34;//補(bǔ)償中斷響應(yīng)延時造成的誤差T0RH=(uint8)(tmp>>8);//定時器重載值拆分為高低字節(jié)T0RL=(uint8)tmp;TMOD&=0xF0;//清零T0的控制位TMOD|=0x01;//配置T0為模式1TH0=T0RH;//加載T0重載值TL0=T0RL;ET0=1;//使能T0中斷TR0=1;//啟動T0}/*T0中斷服務(wù)函數(shù),實現(xiàn)系統(tǒng)定時和按鍵掃描*/voidInterruptTimer0()interrupt1{TH0=T0RH;//重新加載重載值TL0=T0RL;KeyScan();//執(zhí)行按鍵掃描 }*********************************************************************************************************NRF24L01.c**************************************************************************************************************#include"NRF24L01.H"uint8bdatanrf_sta;sbitRX_DR=nrf_sta^6;sbitTX_DS=nrf_sta^5;sbitMAX_DS=nrf_sta^4; uint8idataRxBuf[2]={0}; //接收緩存存入idata區(qū)uint8idataTxBuf[2]={0}; //發(fā)送緩存uint8constTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uint8constRX_ADDRESS[RX_ADR_WIDTH]={
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學(xué)生心理健康教育與感恩教育教案范文
- 課時1 七年級 Unit 1 2025年中考英語(仁愛版)一輪復(fù)習(xí)基礎(chǔ)練(含答案)
- 課堂表揚(yáng)的藝術(shù)教師經(jīng)驗分享
- 2024至2030年中國地軌行走式收放線裝置數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國疊氮化鈉數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國醫(yī)療垃圾焚燒爐數(shù)據(jù)監(jiān)測研究報告
- 2024至2030年中國六開雙色雙面印刷機(jī)行業(yè)投資前景及策略咨詢研究報告
- 2024年重慶市初中學(xué)業(yè)水平暨高中招生考試語文試題(A卷)含答案
- 2024年中國立式管道式離心泵市場調(diào)查研究報告
- 2024年中國油炸牛排模型市場調(diào)查研究報告
- 期中試卷(試題)-2024-2025學(xué)年三年級上冊數(shù)學(xué)青島版
- 期中押題卷(試題)-2024-2025學(xué)年數(shù)學(xué)六年級上冊北師大版
- 期中模擬(1-3單元)(試題)-2024-2025學(xué)年六年級上冊數(shù)學(xué)蘇教版
- 統(tǒng)編版2024年新版道德與法治七年級上冊第二單元《成長的時空》單元整體教學(xué)設(shè)計
- 點亮文明 課件 2024-2025學(xué)年蘇少版(2024)初中美術(shù)七年級上冊
- 廉政法規(guī)知識測試及答案
- 少兒美術(shù)課件國家寶藏系列《云肩》
- 國開2024年秋《機(jī)電控制工程基礎(chǔ)》形考任務(wù)3答案
- 中國高血壓防治指南(2024年修訂版)解讀(總)
- (高清版)JTGT 5440-2018 公路隧道加固技術(shù)規(guī)范
- 工程造價咨詢服務(wù)方案(技術(shù)方案)
評論
0/150
提交評論