2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩44頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  本科畢業(yè)論文(設(shè)計)開題報告</p><p>  題 目 智能消防車 </p><p>  院 系 信息工程系 </p><p>  專 業(yè)  電子信息工程 </p><p>  學生姓名 </p><p>  2013 年 10 月 10 日</p

2、><p>  教學單位 信息工程系 </p><p>  學生學號 2101234145</p><p>  本科畢業(yè)論文(設(shè)計)</p><p>  題  目 遙控消防車 </p><p>  學生姓名       </p><p>  專業(yè)名稱   電子信息工程

3、    </p><p>  指導教師           </p><p>  2014年03月18日</p><p><b>  遙控消防車</b></p><p>  摘要:本系統(tǒng)采用工業(yè)級STC89C52單片機為主控核心,功耗低,性能穩(wěn)定,系統(tǒng)各部分均采用模塊穩(wěn)定性高,系統(tǒng)給每個模塊單獨供

4、電,保證了運行時的可靠性。系統(tǒng)各模塊與主機的通信距離短,故此系統(tǒng)采用綜合布線,減少了無線模塊的使用,降低了成本。且本系統(tǒng)采用C語言編程,無線遙控模式,可遠程控制消防車的行走路線,滅火噴頭的旋轉(zhuǎn),水泵的上水等進行無人員投入遠距離滅火。</p><p>  關(guān)鍵字:遙控消防車;NRF24L01;STC89C52。</p><p>  Design of remote control fire

5、truck</p><p>  Abstract: In this design, the system using industrial grade STC89C52 micro controller to control the core, low power consumption, stable performance, each part of the system adopts the module

6、of high stability, system to each module power alone, to ensure the reliability of the runtime. The communication distance of each module in the system and the host of the short, so the system uses the integrated wiring,

7、 reducing the use of wireless module, reduces the cost. And this system uses the C langu</p><p>  KEY:Remote control fire truck;NRF24L01;STC89C52。</p><p><b>  目 錄</b></p><

8、;p><b>  1引言1</b></p><p><b>  2相關(guān)技術(shù)2</b></p><p>  2.1 STC89C52單片機2</p><p><b>  2.2步進電機2</b></p><p>  2.2.1供電模塊3</p>&l

9、t;p>  2.2.2供電模塊3</p><p>  2.3 NRF24L01無線收發(fā)模塊3</p><p><b>  3系統(tǒng)分析4</b></p><p>  4 系統(tǒng)的硬件電路設(shè)計5</p><p>  4.1 主控制器模塊的設(shè)計5</p><p>  4.2 NRF2

10、4L01無線模塊的設(shè)計5</p><p>  4.3 按鍵控制模塊的設(shè)計8</p><p>  4.4 晶振電路與復位電路設(shè)計8</p><p>  4.4.1 晶振電路8</p><p>  4.4.2 復位電路8</p><p>  4.5 電源模塊的設(shè)計10</p><p

11、>  4.6 L298N電機驅(qū)動模塊設(shè)計10</p><p>  4.7 ULN200311</p><p>  4.8 LM259611</p><p>  4.9 LM780512</p><p>  5 系統(tǒng)軟件設(shè)計13</p><p>  5.1設(shè)計軟件簡介13</p>

12、<p>  5.2軟件設(shè)計應用環(huán)境簡介13</p><p>  5.3 總體設(shè)計15</p><p>  5.4 NRF24L01模塊程序設(shè)計15</p><p>  6 調(diào)試結(jié)果與分析17</p><p>  6.1 測試儀器17</p><p>  6.2 測試方法17</p>

13、;<p>  6.3 調(diào)試過程與分析17</p><p><b>  參考文獻18</b></p><p>  附錄1 源程序清單19</p><p>  附錄2 總體實物圖35</p><p><b>  1引言</b></p><p>  近年來隨

14、著科技的飛速發(fā)展,單片機的應用正在不斷地走向深入,同時帶動傳統(tǒng)控制檢測技術(shù)日益更新。</p><p>  遙控消防車,是無人員投入火災現(xiàn)場必備的終端設(shè)備,是一種代替人員進入火災現(xiàn)場滅火的設(shè)備。智能消防車系統(tǒng)主要由:STC89C52單片機,NRF24L01無線收發(fā)模塊,左右減速電機,步進電機,水泵,風扇等部件組成。可進行遠程控制滅火。</p><p>  使用時,以STC89C52系列單片機

15、為控制核心設(shè)計搖控系統(tǒng)的發(fā)射器與接收器。搖控器由單片機、六個按鍵和NRF24L01模塊等組成.六個按鍵分別代表車的前進和后退、左轉(zhuǎn)和右轉(zhuǎn)、啟動滅火風扇和啟動二氧化碳。搖控器通過NRF24L01發(fā)射出去,接收器接收后,辨別發(fā)射傳輸?shù)男畔ⅲ瑢嚢l(fā)出命令進行滅火。</p><p><b>  2相關(guān)技術(shù)</b></p><p>  2.1 STC89C52單片機</p

16、><p>  STC89C52是一種8K字節(jié)閃爍可編程可擦除只讀存儲器的低電壓高性能的CMOS8的微處理器,該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造。與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。主控芯片內(nèi)部電路圖如圖1所示。</p><p>  圖1 STC89C52內(nèi)部電路圖</p><p><b>  2.2步進電機</b><

17、;/p><p>  步進電機作為該系統(tǒng)的驅(qū)動電機。由于其轉(zhuǎn)過的角度可以精確的計數(shù),實現(xiàn)小車前進路程和位置的精確定位,也能準確引導小車駛向火源。</p><p>  采用專用芯片L298N作為電機驅(qū)動芯片。L298N是一個具有高電壓大電流的全橋驅(qū)動芯片,它相應頻率高,輸出電壓最高可達50V,可以直接通過電源來調(diào)節(jié)輸出電壓;可以直接用單片機的IO口通過光耦芯片提供信號。</p>&l

18、t;p><b>  2.2.1供電模塊</b></p><p>  用航空鋰電池經(jīng)7805電壓變換電路為電機供電。再用12V蓄電池為系統(tǒng)供電,蓄電池具有較強的電流驅(qū)動能力以及穩(wěn)定的電壓輸出性能。采用此種供電方式后,單片機和傳感器工作穩(wěn)定,電機工作互不影響,能夠滿足系統(tǒng)的要求。</p><p><b>  2.2.2供電模塊</b></

19、p><p>  LM2596-adj把鋰電池輸出的16.8V電壓降為9V來為L298N電機驅(qū)動供電驅(qū)動小車運行。LM2596轉(zhuǎn)換效率高,輸出電壓可高達40V,輸出電流可高達3A,具有過流保護作用。</p><p>  ULN2003工作電壓高,工作電流大,灌電流可達500mA所以用來驅(qū)動步進電機</p><p>  鹽酸和碳酸鈉反應產(chǎn)生二氧化碳氣體,排出空氣使包圍在蠟燭

20、周圍的氧濃度降低進而產(chǎn)生窒息,起到了滅火的作用。 </p><p>  2.3 NRF24L01無線收發(fā)模塊</p><p>  采用NRF24L01芯片無線控制小車的前進后退及轉(zhuǎn)彎。它RF24L01B微功率無線通訊模塊,采用Nordic公司的NRF24L01芯片,2.4G全球開發(fā)ISM頻段免許可證使用,最高工作速率達2Mbps,125頻道滿足多點通信和跳頻通信需要,內(nèi)置PCB天線體積小巧

21、約37*17mm,高效GFSK調(diào)制,抗干擾能力強,特別適合工業(yè)控制、無線音視頻傳輸?shù)阮I(lǐng)域。NRF24L01是一款低成本無線收發(fā)器。它內(nèi)置頻率合成器,功率放大器,晶體振蕩器、調(diào)制器等功能模塊。</p><p><b>  3系統(tǒng)分析</b></p><p>  本系統(tǒng)包括電機驅(qū)動、步進電機、無線收發(fā)等模塊。系統(tǒng)結(jié)構(gòu)圖如圖2所示。</p><p>

22、<b>  圖2 系統(tǒng)結(jié)構(gòu)圖</b></p><p>  供電系統(tǒng)包括可調(diào)的Lm2596芯片、Lm7805芯片、Ams1117等。供電系統(tǒng)結(jié)構(gòu)圖如圖3所示。</p><p><b>  圖3供電系統(tǒng)結(jié)構(gòu)圖</b></p><p>  4 系統(tǒng)的硬件電路設(shè)計</p><p>  4.1 主控制器

23、模塊的設(shè)計</p><p>  本設(shè)計采用了STC89C52芯片為主控制器,該芯片的應用電路于其他51單片機完全一樣。介于小車各部分功能均為模塊實現(xiàn),所以,將單片機最小系統(tǒng)布局好后,其余各I/O口用排針引出。STC單片機支持串口下載功能,所以省去了調(diào)試時不住地插拔片子的麻煩,也保證了片子的完好。單片機引腳分布圖及最小系統(tǒng)圖如圖4如所示。</p><p><b>  圖4單片機最

24、小系統(tǒng)</b></p><p>  4.2 NRF24L01無線模塊的設(shè)計</p><p>  NRF24L01 是 NORDIC 公司最近生產(chǎn)的一款無線通信通信芯片,采用 FSK 調(diào)制,內(nèi)部集成NORDI自己的 Enhanced Short Burst 協(xié)議??梢詫崿F(xiàn)點對點或是 1 對 6 的無線通信。</p><p>  無線通信速度可以達到 2M

25、(bps)。NORDIC 公司提供通信模塊的 GERBER 文件,可以直接加工生產(chǎn)。嵌入式工程師或是單片機愛好者只需要為單片機系統(tǒng)預留 5個GPIO,1個中斷輸入引腳,就可以很容易實現(xiàn)無線通信的功能,非常適合用來為 MCU 系統(tǒng)構(gòu)建無線通信功能。</p><p>  發(fā)射數(shù)據(jù)時,首先將nRF24L01配置為發(fā)射模式:接著把接收節(jié)點地址TX_ADDR和有效數(shù)據(jù)TX_PLD按照時序由SPI口寫入nRF24L01緩存區(qū)

26、,TX_PLD必須在CSN為低時連續(xù)寫入,而TX_ADDR在發(fā)射時寫入一次即可,然后CE置為高電平并保持至少10μs,延遲130μs后發(fā)射數(shù)據(jù);若自動應答開啟,那么nRF24L01在發(fā)射數(shù)據(jù)后立即進入接收模式,接收應答信號(自動應答接收地址應該與接收節(jié)點地址TX_ADDR一致)。如果收到應答,則認為此次通信成功,TX_DS置高,同時TX_PLD從TX FIFO中清除;若未收到應答,則自動重新發(fā)射該數(shù)據(jù)(自動重發(fā)已開啟),若重發(fā)次數(shù)(AR

27、C)達到上限,MAX_RT置高,TX FIFO中數(shù)據(jù)保留以便在次重發(fā);MAX_RT或TX_DS置高時,使IRQ變低,產(chǎn)生中斷,通知MCU。最后發(fā)射成功時,若CE為低則nRF24L01進入空閑模式1;若發(fā)送堆棧中有數(shù)據(jù)且CE為高,則進入下一次發(fā)射;若發(fā)送堆棧中無數(shù)據(jù)且CE為高,則進入空閑模式2。</p><p>  接收數(shù)據(jù)時,首先將nRF24L01配置為接收模式,接著延遲130μs進入接收狀態(tài)等待數(shù)據(jù)的到來。當接

28、收方檢測到有效的地址和CRC時,就將數(shù)據(jù)包存儲在RX FIFO中,同時中斷標志位RX_DR置高,IRQ變低,產(chǎn)生中斷,通知MCU去取數(shù)據(jù)。若此時自動應答開啟,接收方則同時進入發(fā)射狀態(tài)回傳應答信號。最后接收成功時,若CE變低,則nRF24L01進入空閑模式1。</p><p>  NRF24L01模塊電路圖如圖5圖6所示。</p><p>  圖5 NRF24L01結(jié)構(gòu)圖</p>

29、<p>  圖6 NRF24L01模塊電路</p><p>  NRF24L01的指令列表如表1所示。</p><p>  表1 NRF24L01令列表</p><p>  4.3 按鍵控制模塊的設(shè)計</p><p>  本設(shè)計中,采用獨立按鍵對單片機核心芯片STC89C52RC進行輸入控制。各按鍵分別一端接地,一端接單片

30、機引腳。實現(xiàn)功能:六個鍵分別表示不按代表不控制車,按下代表控制。</p><p>  4.4 晶振電路與復位電路設(shè)計</p><p>  4.4.1 晶振電路</p><p>  晶振電路為單片機AT89C51工作提供時鐘信號,芯片中有一個用于構(gòu)成內(nèi)部振蕩器的高增益反相放大器,引腳XTAL1和XTAL2分別是該放大器的輸入端和輸出端。這個放大器與作為反饋元件的片

31、外石英晶體或陶瓷諧振蕩器一起構(gòu)成自激振蕩器。電路中的外接石英晶體及電容C5、C6接在放大器的反饋回路中構(gòu)成并聯(lián)振蕩電路。由于外接電容C5、C6的容量大小會輕微影響振蕩頻率的高低、振蕩器工作的穩(wěn)定性、起振的難易程度及溫度穩(wěn)定性,如果使用石英晶體,電容的容量大小范圍為20pF~40pF;如果使用陶瓷諧振,則電容容量大小為30 pF~50 pF。本設(shè)計中使用石英晶體,電容的容值設(shè)定為30pF。</p><p>  4.

32、4.2 復位電路</p><p>  本設(shè)計采用的是手動按鈕復位。手動按鈕復位需要人為在復位輸入端REST上加入高電平,采用的辦法是在REST端和正電源Vcc之間接一個按鈕。當人為按下按鈕時,則Vcc的+5V電平就會直接加到REST端,系統(tǒng)復位。由于人的動作再快也會使按鈕保持接通達數(shù)十毫秒,所以,設(shè)計完全能夠滿足復位的時間要求。復位電路中SW-PB為手動復位開關(guān),電容Ch1可避免高頻諧波對電路的干擾。</

33、p><p>  因為 MCS-51系列單片機采用高電平復位方式,其內(nèi)部復位電路如圖3-15所示,高電平復位脈沖RST引腳輸入到內(nèi)部施密特觸發(fā)器整形后,送CPU內(nèi)部復位電路。CPU在每一個機器周期的S5P2相采樣施密特觸發(fā)器的輸出端,若為高電平,則強迫機器進入復位狀態(tài)。為了保證CPU內(nèi)部各個單元電路可靠復位,RST引腳復位脈沖高電平維持時間必須大于等于2個機器周期(即24個振蕩周期)。內(nèi)部復位電路如圖7所示。

34、 </p><p><b>  圖 7 復位電路</b></p><p>  可以使用RC分立元件或微處理器監(jiān)控芯片構(gòu)成MCS-51單片機的外部復位電路。本設(shè)計中采用RC分立元件構(gòu)成MCS-51外部復位電路,外部復位電路圖電路如圖8所示。</p><p><b>  圖8 外部復位電路</b></p>&

35、lt;p>  按下復位按鍵K20時,電容C3通過R1放電,當電容放電結(jié)束后,RST引腳電位由R1、R2分壓比決定。由于R2>>R1,因此RST引腳為高電平,CPU進入復位狀態(tài)。松開復位按鍵后,電容C3充電,RST引腳電位下降,使CPU脫離復位狀態(tài)。R1的作用在于限制復位按鈕瞬間電容C3的放電電流,避免產(chǎn)生火花,以保護按鈕的觸點。</p><p>  單片機的復位都是靠外部電路實現(xiàn)的,在時鐘電路工

36、作后,只要在單片機的RST引腳上出現(xiàn)24個時鐘振蕩脈沖以上的高電平,單片機便實現(xiàn)初始化狀態(tài)復位。為了保證應用系統(tǒng)可靠地復位,在設(shè)計復位電路時,通常使RST保持高電平。只要RST保持高電平,則單片機就循環(huán)復位。</p><p>  4.5 電源模塊的設(shè)計</p><p>  電源是整個系統(tǒng)穩(wěn)定運行的基本要求,所以,制作一個小巧的可靠的電源就必須對電力資源合理分配。由于本次設(shè)計中電源分動力供

37、電和邏輯供電兩部分,為了減小干擾,兩部分電源應相互獨立。其中,電機的動力供電有2596輸出,7805穩(wěn)壓供電為單片機提供電源,而NRF24L01工作電壓為3.3V所以用ASM1117為其供電。</p><p>  4.6 L298N電機驅(qū)動模塊設(shè)計</p><p>  雙電機驅(qū)動芯片L298N,性能可以滿足小車的電機控制要求,而且外圍電路比較簡單,穩(wěn)定性較好,驅(qū)動能力夠強。能夠很好的保證

38、兩電機的同步。實物圖及接線圖如圖9和圖10所示。</p><p>  圖9 L298N電機驅(qū)動模塊</p><p>  圖10 L298N電機驅(qū)動電路圖</p><p>  其內(nèi)部包含4通道邏輯驅(qū)動電路。是一種二相和四相電機的專用驅(qū)動器,即內(nèi)含二個H橋的高電壓大電流雙全橋式驅(qū)動器,接收標準TTL邏輯電平信號,可驅(qū)動46V、2A以下的電機。</p>

39、<p>  4.7 ULN2003</p><p>  其具有電流增益高、工作電壓高、溫度范圍寬、帶負載能力強等特點。在系統(tǒng)中為步進電機供電。原理圖如圖11所示。</p><p>  圖11 ULN2003原理圖</p><p>  4.8 LM2596</p><p>  此芯片具有輸出電壓、電流大,輸出線性好且負載可調(diào)

40、,具有過流保護作用等特點。在系統(tǒng)中為步進電機供電。實物圖和原理圖如圖12所示。</p><p>  圖 12 LM2596</p><p>  LM2596的線路圖如圖13所示。</p><p>  圖13 LM2596</p><p>  4.9 LM7805</p><p>  LM7805是一片最經(jīng)典的三

41、端線性穩(wěn)壓芯片,具有較好的線性穩(wěn)壓效果,外圍電路十分簡單,所以在本次設(shè)計中選為邏輯供電穩(wěn)壓芯片。為了得到理想的電壓,在輸出端用大的濾波電容和小電容并聯(lián)的方式進行整波。電路圖如圖14所示。</p><p>  圖14 LM7805</p><p><b>  5 系統(tǒng)軟件設(shè)計</b></p><p><b>  5.1設(shè)計軟件簡介&

42、lt;/b></p><p>  Keil C51的V8. xx是目前世界上最好的51單片機的匯編和C語言的開發(fā)工具。它支持匯編、C語言以及混合編程,同時具備強大的軟件仿真和硬件仿真功能。在此次設(shè)計中采用開發(fā)環(huán)境的正是此項。[3] (1)創(chuàng)建項目:執(zhí)行[Project]|[NewμVision Project]菜單命令,將新創(chuàng)建一個項目。為項目建一個單獨的文件夾,然后選擇子文件夾并鍵入項目的名稱。在項

43、目創(chuàng)建之前,需要為新建的項目選擇一個CPU。在命名項目名稱后,彈出的對話框,其中顯示的是器件數(shù)據(jù)庫,用戶只要選擇所需要的MCU就可以了。選擇AT89S52之后,右邊一欄是對這個單片機的基本的說明,然后單擊[確定]按鈕。2、添加配置啟動代碼:啟動文件STARTUP.C中包含了目標啟動代碼,可在每個project中加入這個文件。 (2)項目設(shè)置:μVision 3允許用戶為目標硬件設(shè)置選項,可以通過工具條圖標打開,也可以用鼠標右擊項目

44、窗口中的Files標簽頁中的Target1,在右鍵菜單中選擇[Options for Targe1]命令:          Output:定義Keil工具的輸出文件,并定義生成處理</p><p>  5.2軟件設(shè)計應用環(huán)境簡介</p><p> ?。?)Target標簽:單擊Target標簽,其中各參數(shù)設(shè)置如下:①Xtal(MHz):設(shè)置單片機的工作的頻率,默認值是24.0MHz。

45、②Use On-chip ROM(0x0~0x1FFF): Flash ROM。單片機的EA引腳接高電平,則一定需要選中這個選項。③Memory Model:變量存儲空間。(2)Output標簽:①Select Folder for Objects:選擇編譯之后的目標文件存儲在哪個目錄。②Name of Executable:設(shè)置生成的目標文件的名字。③Create Executable:生成omf以及hex文件。④Cre

46、ate Hex File:要生成hex文件一定要選中該選項。⑤Create Library:生成lib庫文件。(3)Listing標簽:Keil C51在編譯之后除了聲稱目標文件之外,還生成*.lst、*.m51的文件。用戶可以在Listing標簽中設(shè)置*.lst、*.m51文件的各種選項。(4)C51標簽:用戶通過C51標簽來設(shè)置C51編譯器的特別的工具選項。(5)A51標簽:A51標簽用來設(shè)置匯編器的特別工</p>

47、;<p><b>  5.3 總體設(shè)計</b></p><p>  該系統(tǒng)包括無線發(fā)送和接收、步進電機控制系統(tǒng)、水泵控制系統(tǒng)和滅火風扇和噴頭的控制系統(tǒng)等。流程圖如圖15所示。</p><p>  圖15 系統(tǒng)總流程圖</p><p>  5.4 NRF24L01模塊程序設(shè)計</p><p>  該射頻模塊集

48、成了NORDIC公司生產(chǎn)的無線射頻芯片nRF24L01。其發(fā)射部分流程圖如圖16所示。</p><p>  圖16發(fā)射部分的流程</p><p><b>  其核心代碼如下:</b></p><p>  SetTX_Mode(); //設(shè)置為發(fā)送模式</p><p>  TxBuf[1] = 1; </p>

49、;<p>  nRF24L01_TxPacket(TxBuf);//發(fā)送buffer 里的數(shù)據(jù)</p><p>  TxBuf[1] = 0x00;</p><p>  接收部分流程圖如圖17所示。</p><p>  圖17 接收部分的流程</p><p><b>  其核心代碼如下:</b></

50、p><p>  SetRX_Mode(); //設(shè)置為接收模式</p><p>  nRF24L01_RxPacket(RxBuf); //將接收到的數(shù)據(jù)存到RxBuf中</p><p>  if(RxBuf[1]==1) </p><p><b>  {</b></p><p>  in1=0;

51、 in2=1;</p><p>  in3=0; in4=1;</p><p>  RxBuf[1]=0; </p><p><b>  led1 = 1;</b></p><p><b>  }</b></p><p><b>  6 調(diào)試結(jié)果與分析</b

52、></p><p><b>  6.1 測試儀器</b></p><p>  萬用表,軟件Protues。</p><p><b>  6.2 測試方法</b></p><p>  先接通電源,看看系統(tǒng)能否正常工作,如果不能,可以在系統(tǒng)供電情況下,用萬用表檢測發(fā)射板和接收板各個模塊的電壓,

53、如果出現(xiàn)電壓為0或者無限大的情況,則為短路或者斷路,一一排查之后可以確定是哪個地方的問題,檢修后再次接通電源調(diào)試,使用protues軟件事先調(diào)試按鍵邏輯與顯示邏輯觀察是否正常。</p><p>  6.3 調(diào)試過程與分析</p><p>  在本次設(shè)計過程中,由于使用的是宏晶的STC89C52RC芯片,這個系列的程序下載只需通過MAX232下載接口就可以。使得本次設(shè)計中硬件仿真變的就比較

54、簡單,因為有了硬件仿真工具就可以隨時修改程序,通過一步一步的調(diào)試來達到最后的目的,同時尤其學會了分部調(diào)試的思想,這就使得當遇到問題時不會覺得無從下手,不會覺得那么迷茫,使調(diào)試變得比較有條理。</p><p>  在檢查完硬件電路沒有短路、斷路的情況下,接通電源,并且測試各個集成片的電源電壓是否符合要求,以及單片機晶振是否起振,只有晶振正常起振單片機才能工作,通過檢測,上述情況均正常。</p><

55、;p>  在protues軟件當中以單步聯(lián)調(diào)的方法,測試按鍵邏輯與LCD1602現(xiàn)實邏輯 在實際電路調(diào)試過程中,由于沒有深入的了解24l01的收發(fā)機制,導致第一次試驗接收器,經(jīng)常接受到亂碼,系統(tǒng)不能正常工作。在查閱相關(guān)資料和優(yōu)化代碼后,以多次檢測接受數(shù)據(jù)的方法,成功解決了該問題。</p><p><b>  參考文獻</b></p><p>  [1]郭

56、天祥 新概念51單片機c語言教程 北京: 電子工業(yè)出版社 2009</p><p>  [2] 譚浩強.C程序設(shè)計(第二版) [M] .北京:清華大學出版社,2006-01</p><p>  [3] 潘永雄.新編單片機原理與應用[M].西安電子科技大學出版社,2007-02,19~25,65~66</p><p>  [4]祁偉,楊婷

57、 單片機C51程序設(shè)計教程與實驗 北京:航空航天出版社 2006</p><p>  [5]CNKI數(shù)據(jù)庫 http://www.cnki.net/</p><p>  [6]無線電雜志 刊號 ISSN 0512-4174 北京盛通印刷股份有限公司</p><p>  [7] 英慶,王代華,張志杰.基于nRF24L01的無線數(shù)據(jù)傳輸系統(tǒng)[J].現(xiàn)代電

58、子技術(shù),2008,31(7):68-82.</p><p>  [8] 丁永紅,孫運強.基于nRF2401的無線數(shù)傳系統(tǒng)設(shè)計[J].國外電子測量技術(shù),2008,27(4):45-47.</p><p>  [9] 時志云,蓋建平,王代華,等.新型高速無線射頻器件nRF24L01及其應用[J].國外電子元器件,2007(8):42-44.</p><p>  [10]

59、 康華光.電子技術(shù)基礎(chǔ)數(shù)字部分[M].第四版,北京:高等教育出版社,2000.</p><p><b>  附錄1 源程序清單</b></p><p>  #include <reg52.h> </p><p>  #include "nrf.h"</p><p>  sbit key1=

60、P3^3;</p><p>  sbit key2=P3^4;</p><p>  sbit key3=P3^5;</p><p>  sbit key4=P3^6;</p><p>  sbit key5=P2^4;</p><p>  sbit key6=P2^6;</p><p>  sb

61、it key7=P2^5;</p><p>  sbit key8=P2^7;</p><p>  sbit led1=P2^0;</p><p>  void left();</p><p>  void right();</p><p>  unsigned char RxBuf[20]={0},flag,flag

62、1,flag2;</p><p>  void delay(unsigned int ms)</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for(i=0; i<ms; i++)</p><p>  for(j=0; i&

63、lt;110; i++);</p><p><b>  }</b></p><p>  unsigned char TxBuf[20]={0}; </p><p>  void main()</p><p><b>  {</b></p><p>  init_NRF24

64、L01();</p><p>  P2 = 0xff;</p><p>  P3 = 0xff;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 0;</p><p>  flag3 = 0;</p><p>  flag4 =

65、0;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  flag1 = 0;</p><p>  if(key1 == 0 ) //前進</p><p><b>  {</b></p

66、><p><b>  delay(5);</b></p><p>  if(key1 == 0)</p><p><b>  {</b></p><p>  TxBuf[1] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit

67、 Tx buffer data</p><p>  TxBuf[1] = 0x00;</p><p>  led1 = 1;</p><p><b>  do{</b></p><p>  if(key1==1)</p><p><b>  {</b></p>

68、<p>  TxBuf[2] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 =

69、 1;</p><p><b>  }</b></p><p>  if(key5 == 0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  flag2 = 0; </p>

70、<p>  if(key5 == 0)</p><p><b>  {</b></p><p>  TxBuf[4] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[4] = 0x00;&

71、lt;/p><p><b>  do{</b></p><p>  if(key5 == 1)</p><p><b>  {</b></p><p>  TxBuf[1] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit

72、Tx buffer data</p><p>  TxBuf[1] = 0x00;</p><p>  flag2 = 1;</p><p><b>  }</b></p><p>  if(key1==1)</p><p><b>  {</b></p>&l

73、t;p>  TxBuf[2] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 1;

74、</p><p>  flag2 = 1;</p><p><b>  }</b></p><p>  }while(flag2 == 0);</p><p><b>  }</b></p><p><b>  }</b></p><

75、p>  if(key6 == 0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  flag2 = 0; </p><p>  if(key6 == 0)</p><p><b>  {<

76、;/b></p><p>  TxBuf[5] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[5] = 0x00;</p><p><b>  do{</b></p><p&

77、gt;  if(key6 == 1)</p><p><b>  {</b></p><p>  TxBuf[1] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[1] = 0x00;</p>

78、;<p>  flag2 = 1;</p><p><b>  }</b></p><p>  if(key1==1)</p><p><b>  {</b></p><p>  TxBuf[2] = 1;</p><p>  nRF24L01_TxPacket

79、(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 1;</p><p>  flag2 = 1;</p><p><b>

80、;  }</b></p><p>  }while(flag2 == 0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while(flag1 == 0);</p><p><b>  }&l

81、t;/b></p><p><b>  }</b></p><p>  flag1 = 0;</p><p>  if(key2 == 0 ) //前進</p><p><b>  {</b></p><p><b>  delay(5);</b>

82、;</p><p>  if(key2 == 0)</p><p><b>  {</b></p><p>  TxBuf[3] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[

83、3] = 0x00;</p><p>  led1 = 1;</p><p><b>  do{</b></p><p>  if(key2==1)</p><p><b>  {</b></p><p>  TxBuf[2] = 1;</p><p&g

84、t;  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 1;</p><p><b>  }</b&g

85、t;</p><p>  if(key5 == 0)</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  flag2 = 0; </p><p>  if(key5 == 0)</p><p&

86、gt;<b>  {</b></p><p>  TxBuf[6] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[6] = 0x00;</p><p><b>  do{</b>

87、</p><p>  if(key5 == 1)</p><p><b>  {</b></p><p>  TxBuf[3] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[3

88、] = 0x00;</p><p>  flag2 = 1;</p><p><b>  }</b></p><p>  if(key2==1)</p><p><b>  {</b></p><p>  TxBuf[2] = 1;</p><p> 

89、 nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 1;</p><p>  flag2 = 1;</p>

90、<p><b>  }</b></p><p>  }while(flag2 == 0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key6 == 0)</p><p><

91、;b>  {</b></p><p><b>  delay(5);</b></p><p>  flag2 = 0; </p><p>  if(key6 == 0)</p><p><b>  {</b></p><p>  TxBuf[7] = 1;&

92、lt;/p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[7] = 0x00;</p><p><b>  do{</b></p><p>  if(key6 == 1)</p><p><b

93、>  {</b></p><p>  TxBuf[3] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[3] = 0x00;</p><p>  flag2 = 1;</p><p>

94、;<b>  }</b></p><p>  if(key2==1)</p><p><b>  {</b></p><p>  TxBuf[2] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p>

95、;<p>  TxBuf[2] = 0x00;</p><p><b>  led1 = 0;</b></p><p>  flag1 = 1;</p><p>  flag2 = 1;</p><p><b>  }</b></p><p>  }while(

96、flag2 == 0);</p><p><b>  }</b></p><p><b>  }</b></p><p>  }while(flag1 == 0);</p><p><b>  }</b></p><p><b>  }<

97、;/b></p><p>  if(key3 == 0)</p><p><b>  {</b></p><p><b>  delay(3);</b></p><p>  if(key3 == 0)</p><p><b>  {</b><

98、/p><p>  TxBuf[8] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[8] = 0x00;</p><p>  while(!key3);</p><p>  TxBuf[9] = 1;&l

99、t;/p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[9] = 0x00;</p><p><b>  }</b></p><p><b>  } </b></p><p>

100、  if(key4 == 0)</p><p><b>  {</b></p><p><b>  delay(3);</b></p><p>  if(key4 == 0)</p><p><b>  {</b></p><p>  TxBuf[10]

101、 = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[10] = 0x00;</p><p>  while(!key4);</p><p>  TxBuf[11] = 1;</p><p>  nRF2

102、4L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[11] = 0x00;</p><p><b>  }</b></p><p><b>  } </b></p><p>  if(key7 == 0 &&

103、; flag3 ==0 ) //前進</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key7 == 0)</p><p><b>  {</b></p><p>  TxBuf

104、[12] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[12] = 0x00;</p><p><b>  led1 = 1;</b></p><p>  flag3 = 1;</p>

105、<p><b>  }</b></p><p><b>  }</b></p><p>  if(key7 == 1&& flag3 == 1)</p><p><b>  {</b></p><p>  TxBuf[13] = 1;</p&g

106、t;<p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[13] = 0x00;</p><p>  flag3 = 0;</p><p><b>  }</b></p><p>  if(key8 == 0 &

107、amp;& flag4 ==0 ) //前進</p><p><b>  {</b></p><p><b>  delay(5);</b></p><p>  if(key8 == 0)</p><p><b>  {</b></p><p>

108、;  TxBuf[14] = 1;</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[14] = 0x00;</p><p><b>  led1 = 1;</b></p><p>  flag4 = 1;<

109、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  if(key8 == 1&& flag4 == 1)</p><p><b>  {</b></p><p>  TxBuf[15] = 1;

110、</p><p>  nRF24L01_TxPacket(TxBuf);// Transmit Tx buffer data</p><p>  TxBuf[15] = 0x00;</p><p>  flag4 = 0;</p><p><b>  }</b></p><p><b>

111、;  }</b></p><p><b>  }</b></p><p>  #include <reg52.h> </p><p>  #include "nrf.h"</p><p>  unsigned char RxBuf[20]={0};</p><

112、;p>  //八拍方式驅(qū)動,順序為A AB B BC C CD D DA</p><p>  unsigned char code clockWise[]={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09}; </p><p>  unsigned char speed=5,j,i; //步進電機的轉(zhuǎn)速</p><p>  u

113、nsigned int D,T,speeda,speedb; </p><p>  sbit ena = P3^3;</p><p>  sbit enb = P1^3;</p><p>  sbit in1 = P3^7;</p><p>  sbit in2 = P3^6;</p><p>  sbit in3 =

114、 P3^5;</p><p>  sbit in4 = P3^4;</p><p>  sbit led1= P1^7;</p><p>  sbit fengshan = P0^1;</p><p>  sbit shuibong = P0^0;</p><p>  void stepper_motor_left()

115、;</p><p>  void stepper_motor_right(); //步進電機右轉(zhuǎn)</p><p>  void delay(unsigned int ms)</p><p><b>  {</b></p><p>  unsigned int i,j;</p><p>  for

116、(i=0; i<ms; i++)</p><p>  for(j=0; j<110; j++);</p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  TMOD=0x10;/

117、/設(shè)置定時器1,定時器1為工作方式1</p><p>  TH1=(65536-100)/256;</p><p>  TL1=(65536-100)%256;</p><p>  EA=0;//開總中斷</p><p><b>  ET1=0;</b></p><p>  TR1=0;//啟動定

118、時器1</p><p>  IT0=1;//低電平觸發(fā)</p><p>  EX0=1;//允許中斷 </p><p><b>  ena=1;</b></p><p><b>  enb=1;</b></p><p><b>  in1=0;</b&g

119、t;</p><p><b>  in2=0;</b></p><p><b>  in3=0;</b></p><p><b>  in4=0;</b></p><p><b>  speeda=0;</b></p><p>&l

120、t;b>  speedb=0;</b></p><p>  P0 = 0xff;</p><p>  init_NRF24L01();</p><p>  SetRX_Mode(); </p><p><b>  led1 = 0;</b></p><p>  shuibong=

121、0;</p><p>  fengshan=0;</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  SetRX_Mode(); </p><p>  nRF24L01_RxPacket(RxBuf); <

122、/p><p>  if(RxBuf[1]==1) </p><p><b>  {</b></p><p>  in1=0; in2=1;</p><p>  in3=0; in4=1;</p><p>  RxBuf[1]=0; </p><p><b>  

123、led1 = 1;</b></p><p><b>  }</b></p><p>  if(RxBuf[2]==1) </p><p><b>  {</b></p><p>  in1=0; in2=0;</p><p>  in3=0; in4=0;&l

124、t;/p><p>  RxBuf[2]=0;</p><p>  led1 = 0; </p><p><b>  }</b></p><p>  if(RxBuf[3]==1) </p><p><b>  {</b></p><p>  in1=

125、1; in2=0;</p><p>  in3=1; in4=0;</p><p>  RxBuf[3]=0; </p><p>  led1 = 1; </p><p><b>  }</b></p><p>  if(RxBuf[4]==1) </p><p>&

126、lt;b>  {</b></p><p>  in1=0; in2=0;</p><p>  in3=0; in4=1;</p><p>  RxBuf[4]=0; </p><p>  led1 = 1; </p><p><b>  }</b></p><

127、;p>  if(RxBuf[5]==1) </p><p><b>  {</b></p><p>  in1=0; in2=1;</p><p>  in3=0; in4=0;</p><p>  RxBuf[5]=0;</p><p>  led1 = 1; </p>

128、<p><b>  }</b></p><p>  if(RxBuf[6]==1) </p><p><b>  {</b></p><p>  in1=0; in2=0;</p><p>  in3=1; in4=0;</p><p>  RxBuf[6]

129、=0; </p><p>  led1 = 1; </p><p><b>  }</b></p><p>  if(RxBuf[7]==1) </p><p><b>  {</b></p><p>  in1=1; in2=0;</p><p&g

130、t;  in3=0; in4=0;</p><p>  RxBuf[7]=0; </p><p>  led1 = 1; </p><p><b>  }</b></p><p>  if(RxBuf[8]==1) </p><p><b>  {</b></p&

131、gt;<p><b>  do</b></p><p><b>  {</b></p><p>  SetRX_Mode(); </p><p>  nRF24L01_RxPacket(RxBuf); </p><p>  stepper_motor_left();</p>

132、<p>  }while(RxBuf[9]==0);</p><p>  RxBuf[8]=0;</p><p>  RxBuf[9]=0; </p><p>  led1 = 1; </p><p><b>  }</b></p><p>  if(RxBuf[10]==1)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論