基于單片機(jī)的智能小車畢業(yè)論文_第1頁
基于單片機(jī)的智能小車畢業(yè)論文_第2頁
基于單片機(jī)的智能小車畢業(yè)論文_第3頁
基于單片機(jī)的智能小車畢業(yè)論文_第4頁
基于單片機(jī)的智能小車畢業(yè)論文_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

..本科畢業(yè)設(shè)計(jì)〔論文本科畢業(yè)設(shè)計(jì)〔論文基于單片機(jī)的智能小車控制專業(yè):測控技術(shù)與儀器姓名:咸蛋小超人20XX6月..基于單片機(jī)的智能小車控制摘要:智能化作為現(xiàn)代電子產(chǎn)品的新趨勢,是今后的電子產(chǎn)業(yè)的發(fā)展方向。智能化設(shè)計(jì)的電子產(chǎn)品可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)運(yùn)作,不需要人為的管理,可應(yīng)用于科學(xué)勘探、環(huán)境監(jiān)測、智能家居等方面?;趩纹瑱C(jī)的智能小車控制就是其中的一個(gè)體現(xiàn)。本設(shè)計(jì)實(shí)現(xiàn)了一種基于51單片機(jī)的自動(dòng)避障智能模型車系統(tǒng),通過紅外傳感器采集路況信息,通過對檢測信息的分析,自動(dòng)控制轉(zhuǎn)向電機(jī)轉(zhuǎn)向,改變行駛路徑,繞過障礙物,從而實(shí)現(xiàn)車穩(wěn)定避障。本課題設(shè)計(jì)的智能小車,具有自動(dòng)避障功能,超聲波測距報(bào)警,無線電遙控等功能。關(guān)鍵詞:智能車;51單片機(jī);避障;紅外線SmartcarbasedonSCMcontrolAbstract:Asanewtrendofmodernelectronicproducts,intelligentisthedevelopmentaldirectionofelectronicindustryafterthen.Electronicproducts,whichareintelligentlydesigned,canautomaticallyoperatefollowingthemodethatispre-set.Withoutthemanagementofhumanbeings,itcanbeusedforscientificexploring,environmentalmonitoring,intelligenthomefurnishing,etc.Oneoftheembodimentsistheintelligentcontrolcarwhichisbasedonsinglechipmicrocomputer.Inthedesign,anintelligentmodelcarsystembasedonMCU51hasbeenrealized.Itcancollecttrafficinformationwithinfraredsensors.Meanwhile,bytheanalysisofinformationexamined,itcantransferfromautomaticcontroltomotorsteeringinordertochangetherouteanddodgetheobstaclessothatthesteadyavoidanceofthebarriercancometrue.Inthispaper,acarwiththeabilityofintelligentjudgmenthasbeendesignedandmade.Itfunctionsasthedevicewhichcandodgeobstaclesautomatically,alarmwithultrasonicdistanceexamination,andremotecontrolbyradio.Keywords:SmartCart;Single-chip51;ObstacleAvoidance;InfraredTOC\o"1-3"\u目錄TOC\o"1-3"\u序言3第1章總體設(shè)計(jì)方案41.1課題任務(wù)分析41.2方案論證41.2.1小車遙控部分51.2.2小車驅(qū)動(dòng)部分6第2章系統(tǒng)硬件構(gòu)成72.1系統(tǒng)設(shè)計(jì)原理72.2主要元器件簡介72.2.1STC89C52RC簡介72.2.2NRF24L01無線收發(fā)芯片簡介82.2.3L298N芯片直流電機(jī)驅(qū)動(dòng)模塊92.2.4紅外避障模塊92.2.5HC-SR04超聲波測距模塊112.2.6蜂鳴器驅(qū)動(dòng)電路132.2.7液晶顯示電路132.2.8遙控部分獨(dú)立按鍵電路14第3章軟件的設(shè)計(jì)與說明153.1軟件設(shè)計(jì)153.2軟件的說明163.2.1遙控部分主程序流程163.2.224L01子程序流程圖173.2.3小車部分主程序流程圖18第4章調(diào)試與總結(jié)204.1硬件部分204.1.1硬件的焊接20..4.1.224L01無線電模塊204.1.3外接電源模塊204.2軟件部分214.2.1超聲波模塊214.3小車聯(lián)調(diào)214.4調(diào)試的總結(jié)23參考文獻(xiàn)24致謝26附錄27附件1L298N電機(jī)驅(qū)動(dòng)模塊27附件2小車側(cè)視圖28附件3小車俯視圖29附件4小車的遙控部分30附件5小車最終硬件圖31附件6程序清單321.遙控部分程序322.小車部分程序41附件7元器件清單50附件8英文資料及中文翻譯51..序言隨著我國科學(xué)技術(shù)的進(jìn)步,智能化和自動(dòng)化技術(shù)越來越普及,各種高科技也廣泛應(yīng)用于智能小車和機(jī)器人玩具制造領(lǐng)域,使智能機(jī)器人越來越多樣化。智能小車是一個(gè)多種高新技術(shù)的集成體,它融合了機(jī)械、電子、傳感器、計(jì)算機(jī)硬件、軟件、人工智能等許多學(xué)科的知識(shí),涉及到當(dāng)今許多前沿領(lǐng)域的技術(shù)[1]。而智能電動(dòng)車正是智能機(jī)器人的一種,具有不可估量的實(shí)際意義。智能車輛是一個(gè)運(yùn)用計(jì)算機(jī)、傳感、信息、通信、導(dǎo)航、人工智能及自動(dòng)控制等技術(shù)來實(shí)現(xiàn)環(huán)境感知、規(guī)劃決策和自動(dòng)行駛為一體的高新技術(shù)綜合體。它在軍事、民用和科學(xué)研究等方面已獲得了應(yīng)用,對解決道路交通安全提供了一種新的途徑。隨著汽車工業(yè)的迅速發(fā)展,關(guān)于汽車的研究也就越來越受人關(guān)注。全國電子大賽和省內(nèi)電子大賽幾乎每次都有智能小車這方面的題目,全國各高校也都很重視該題目的研究,許多國家已經(jīng)把電子設(shè)計(jì)比賽作為創(chuàng)新教育的戰(zhàn)略性手段。電子設(shè)計(jì)涉及到多個(gè)學(xué)科,機(jī)械電子、傳感器技術(shù)、自動(dòng)控制技術(shù)、人工智能控制、計(jì)算機(jī)與通信技術(shù)等等,是眾多領(lǐng)域的高科技[2]。電子設(shè)計(jì)技術(shù),它是一個(gè)國家高科技實(shí)例的一個(gè)重要標(biāo)準(zhǔn),可見其研究意義很大。第1章總體設(shè)計(jì)方案1.1課題任務(wù)分析當(dāng)前的電動(dòng)小汽車基本上采取的是基于純硬件電路的一種開環(huán)控制方法,或者是直線行使,或者是在遙控下作出前進(jìn)、后退、轉(zhuǎn)彎、停車等基本功能。但是這不能滿足某些特殊場合下的要求?;诖?本文設(shè)計(jì)了智能小車控制系統(tǒng)。智能小車是一個(gè)運(yùn)用傳感器、單片機(jī)、信號(hào)處理、電機(jī)驅(qū)動(dòng)及自動(dòng)控制等技術(shù)來實(shí)現(xiàn)環(huán)境感和自動(dòng)行駛為一體的高新技術(shù)綜合體,它在軍事、民用和科學(xué)研究等方面已獲得了應(yīng)用。通過各種選題之后,我們發(fā)現(xiàn)制作智能小車非常有意思,它喚起我們對玩具的革新思想,智能小車制作的興趣。自己遇到過的汽車的功能是怎樣的,想通過自己的手創(chuàng)作出屬于自己的智能汽車。也夾雜一種童年時(shí)對玩具智能化的假想。所以我選定制作單片機(jī)智能小車。通過這次設(shè)計(jì),掌握51單片機(jī)的原理,了解簡單傳感器組成原理,初步掌握傳感器的調(diào)整及測試方法,提高動(dòng)手能力和排除故障的能力。同時(shí)通過本課題設(shè)計(jì)與裝配、調(diào)試,提高自己的動(dòng)手能力,鞏固已學(xué)的理論知識(shí),建立單片機(jī)理論和實(shí)踐的結(jié)合,了解傳感器各單元電路之間的關(guān)系及相互影響,從而能正確設(shè)計(jì)、計(jì)算定時(shí)計(jì)數(shù)的各個(gè)單元電路。初步掌握傳感器的調(diào)整及測試方法。提高動(dòng)手能力和排除故障的能力。本設(shè)計(jì)采用直流減速電機(jī),電機(jī)專用驅(qū)動(dòng)芯片L298N進(jìn)行電機(jī)驅(qū)動(dòng)控制,主控芯片為STC89C52,測距部分采用超聲波模塊,控制器采用24L01無線電通信模塊,自動(dòng)避障部分采用紅外收發(fā)模塊。 本次設(shè)計(jì)雖然只是一個(gè)演示模型,但是具有充分的科學(xué)性和實(shí)用性。首先我們根據(jù)交通路面的復(fù)雜情況,按照適當(dāng)?shù)谋壤谱鞒鲆粋€(gè)路況模型,包括彎道、直道以及路面上設(shè)置的障礙物等。在彎、直道上,小車沿著預(yù)定軌道自由行使,當(dāng)小車遇到障礙物時(shí),脈沖調(diào)制的紅外線傳感器將檢測到的信號(hào)發(fā)送給單片機(jī),單片機(jī)根據(jù)程序發(fā)出相應(yīng)的控制信號(hào)控制小車自動(dòng)避開障礙物。由無線模塊控制小車進(jìn)行倒車、前進(jìn)、左轉(zhuǎn)、右轉(zhuǎn)等動(dòng)作。1.2方案論證1.2.1小車遙控部分方案一:小車的無線通信模塊采用紅外遙控,紅外收發(fā)遙控是目前大部份遙控小車采用的遙控手段,紅外遙控具有代碼簡單,操作性強(qiáng)的特點(diǎn)。如圖1-1為紅外遙控模塊實(shí)物圖。圖1-1紅外遙控模塊實(shí)物圖方案二:小車的通信模塊采用無線電NRF24L01模塊,NRF24L01是一款工作在2.4~2.5GHz,世界通用ISM頻段的單片無線收發(fā)器芯片。無線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型SchockburstTM模式控制器、功率放大器、晶體振蕩器、調(diào)制器、解調(diào)器。輸出功率、頻道選擇和協(xié)議的設(shè)置可以通過SPI接口進(jìn)行設(shè)置。如1-2為NRF24L01無線模塊實(shí)物圖。圖1-2NRF24L01無線模塊實(shí)物圖方案論證:方案一中的紅外遙控模塊的信號(hào)傳送距離有限,并且發(fā)送和接收的紅外信號(hào)容易受到干擾。NRF20L01發(fā)射頻率高,所受到的干擾影響較小,無線通信的距離比紅外的要長許多。小車的遙控是小車的最主要的部分之一,所以選擇NRF24L01無線通信模塊,故選擇方案一。1.2.2小車驅(qū)動(dòng)部分方案一:小車的電機(jī)驅(qū)動(dòng)部分采用自己搭建的9012三極管電路來實(shí)行小車的驅(qū)動(dòng),9012三極管電路具有電路簡單,操作方便的等特點(diǎn)。方案二:小車的電機(jī)驅(qū)動(dòng)部分采用L298N芯片直流電機(jī)驅(qū)動(dòng)模塊,該模塊具有較大的驅(qū)動(dòng)帶載能力,驅(qū)動(dòng)部分端子供電范圍Vs:+5V~+35V,并且另外自帶了5V、3V的輸出端口。方案論證:本設(shè)計(jì)為4輪驅(qū)動(dòng)的小車,對于小車驅(qū)動(dòng)部分要求能夠有較大的帯載能力,并且在小車的實(shí)際設(shè)計(jì)過程中,需要不同的輸出電壓來提供給小車的各個(gè)模塊。因此綜上所述采用方案二,小車的電機(jī)驅(qū)動(dòng)部分使用L298N芯片直流電機(jī)驅(qū)動(dòng)模塊。第2章系統(tǒng)硬件構(gòu)成2.1系統(tǒng)設(shè)計(jì)原理本設(shè)計(jì)主要分為兩部分:遙控部分和小車部分。遙控部分主要由電源電路,單片機(jī)最小系統(tǒng),無線電模塊組成,遙控部分的系統(tǒng)框圖如圖2-1所示。圖2-1遙控系統(tǒng)框圖小車部分由電源電路,單片機(jī)最小系統(tǒng),顯示電路,無線電木塊,報(bào)警電路,超聲波電路等電路模塊組成,小車部分的系統(tǒng)框圖如圖2-2所示。圖2-2小車的系統(tǒng)框圖2.2主要元器件簡介2.2.1STC89C52RC簡介常用的單片機(jī)有很多種:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、XX華邦<Winbond>W78系列、荷蘭PiliPs的PCF80C51系列、MicrochiP公司系列4位單片機(jī)、XX義隆的EM-78系列等[1]。本次設(shè)計(jì)最終選用了STC89C52單片機(jī)。本系統(tǒng)采用最常用的STC89C52單片機(jī),它是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲(chǔ)器〔FPEROM—FalshProgrammableandErasableReadOnlyMemory的低電壓,高性能CMOS8位微處理器。該器件采用ATMEL高密度非易失存儲(chǔ)器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲(chǔ)器組合在單個(gè)芯片中,ATMEL的STC89C52是一種高效微控制器。STC89C52單片機(jī)為很多嵌入式系統(tǒng)提供了一種靈活性高且價(jià)廉的方案。[6]引腳排列如圖2-3所示。圖2-3STC89系列引腳排列2.2.2NRF24L01無線收發(fā)芯片簡介NRF24L01是一款工作在2.4-2.5GHz,世界通用ISM頻段的單片無線收發(fā)器芯片。無線收發(fā)器包括:頻率發(fā)生器、增強(qiáng)型SchockburstTM模式控制器、功率放大器、晶體振蕩器、調(diào)制器、解調(diào)器。輸出功率、頻道選擇和協(xié)議的設(shè)置可通過SPI接口進(jìn)行設(shè)置。極低的電流消耗:當(dāng)工作在發(fā)射模式下發(fā)射功率為-6dBm時(shí)電流消耗為9mA,接收模式時(shí)為12.3mA。掉電模式和待機(jī)模式下電流消耗更低。NRF24L01引腳排列如圖2-4所示。圖2-4NRF24L01引腳排列2.2.3L298N芯片直流電機(jī)驅(qū)動(dòng)模塊該模塊由L298N作為雙H橋直流電機(jī)驅(qū)動(dòng)芯片,驅(qū)動(dòng)部分端子供電范圍Vs:+5V~+35V。如果在模塊上取電壓供電,則模塊供電范圍為Vs:+7V~+35V。模塊的驅(qū)動(dòng)不封峰值電流Io為2A。其他相關(guān)參數(shù)見表2-1。模塊的實(shí)物圖見附錄附件1〔注:紅色線框部分為電源接口。表2-1L298N芯片直流電機(jī)驅(qū)動(dòng)模塊產(chǎn)品參數(shù)邏輯部分端子供電范圍Vss+5V~+7V〔可板內(nèi)取電+5V邏輯部分工作電流范圍0~36mA控制信號(hào)輸入電壓范圍低電平:-0.3V≤Vin≤1.5V高電平:2.3V≤Vin≤Vss使能信號(hào)輸入電壓范圍低電平:-0.3≤Vin≤1.5V<控制信號(hào)無效>高電平:2.3V≤Vin≤Vss<控制信號(hào)有效>最大功耗20W〔溫度T=75℃時(shí)存儲(chǔ)溫度-25℃~+130℃驅(qū)動(dòng)板尺寸82mm*57mm*33mm<帶固定銅柱,散熱片高度>驅(qū)動(dòng)板重量60g其他擴(kuò)展控制方向指示燈、邏輯部分板內(nèi)取電接口2.2.4紅外避障模塊紅外避障的原理:用紅外線傳感器進(jìn)行避障。紅外線發(fā)射頭與接收頭于一體的檢測開關(guān),其工作原理是根據(jù)發(fā)射頭發(fā)出的光束,被物體反射,接收頭據(jù)此做出判斷是否有障礙物。當(dāng)有光線反射回來時(shí),輸出低電平。當(dāng)沒有光線反射回來時(shí),輸出高電平。單片機(jī)根據(jù)接收頭電平的高低做出相應(yīng)控制,避免小車碰到障礙物。由于接收管輸出TTL電平,有利于單片機(jī)對信號(hào)的處理。紅外接收二極管又叫紅外光電二極管,也可稱紅外光敏二極管。它廣泛用于各種家用電器的遙控接收器中,如音響、彩色電視機(jī)、空調(diào)器、VCD視盤機(jī)、DVD視盤機(jī)以及錄像機(jī)等。紅外接收二極管能很好地接收紅外發(fā)光二極管發(fā)射的波長為94Onm的紅外光信號(hào),而對于其他波長的光線則不能接收。因而保證了接收的準(zhǔn)確性和靈敏度。小車采用紅外線傳感器進(jìn)行避障的電路原理圖如下圖2-5所示,實(shí)物圖如圖2-6所示。紅外模塊的功能指標(biāo)如表2-2所示。表2-2紅外模塊的功能指標(biāo)使用芯片NE555工作電壓3.3V-5V輸出模式數(shù)字信號(hào)測量距離1CM-200CM探測距離是否可以調(diào)節(jié)是檢測信號(hào)探測到障礙物為高電平,無障礙物或超出探測范圍輸出低電平LED紅色為Power指示燈,綠色為Status指示燈圖2-5紅外線傳感器進(jìn)行避障的電路原理圖圖2-6紅外線傳感器進(jìn)行避障的實(shí)物圖2.2.5HC-SR04超聲波測距模塊HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達(dá)高到3mm;模塊包括超聲波發(fā)射器、接收器與控制電路?;竟ぷ髟恚?lt;1>采用IO口TRIG觸發(fā)測距,給至少10us的高電平信號(hào);<2>模塊自動(dòng)發(fā)送8個(gè)40khz的方波,自動(dòng)檢測是否有信號(hào)返回;<3>有信號(hào)返回,通過IO口ECHO輸出一個(gè)高電平,高電平持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。測試距離=<高電平時(shí)間*聲速<340M/S>>/2。HC-SR04超聲波測距模塊的時(shí)序圖如圖2-7所示。圖2-7超聲波模塊時(shí)序圖以上時(shí)序圖表明你只需要提供一個(gè)10uS以上脈沖觸發(fā)信號(hào),該模塊內(nèi)部將發(fā)出8個(gè)40kHz周期電平并檢測回波。一旦檢測到有回波信號(hào)則輸出回響信號(hào)?;仨懶盘?hào)的脈沖寬度與所測的距離成正比。由此通過發(fā)射信號(hào)到收到的回響信號(hào)時(shí)間間隔可以計(jì)算得到距離。公式:uS/58=厘米或者uS/148=英寸;或是:距離=高電平時(shí)間*聲速〔340M/S/2;建議測量周期為60ms以上,以防止發(fā)射信號(hào)對回響信號(hào)的影響。HC-SR04超聲波測距模塊的電路圖如圖2-8所示,實(shí)物圖如圖2-9所示。圖2-8超聲波模塊的電路圖圖2-9超聲波模塊實(shí)物圖2.2.6蜂鳴器驅(qū)動(dòng)電路蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè)備、電話機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母"H"或"HA"〔舊標(biāo)準(zhǔn)用"FM"、"LB"、"JD"等表示。由于自激蜂鳴器是直流電壓驅(qū)動(dòng)的,不需要利用交流信號(hào)進(jìn)行驅(qū)動(dòng),只需對驅(qū)動(dòng)口輸出驅(qū)動(dòng)電平并通過三極管放大驅(qū)動(dòng)電流就能使蜂鳴器發(fā)出聲音<其驅(qū)動(dòng)電路如圖2-10所示>,利用定時(shí)器來做定時(shí),通過定時(shí)翻轉(zhuǎn)電平產(chǎn)生符合蜂鳴器要求的頻率的波形,這個(gè)波形就可以用來驅(qū)動(dòng)蜂鳴器了。圖2-10蜂鳴器驅(qū)動(dòng)電路2.2.7液晶顯示電路該設(shè)計(jì)的顯示部分采用LCD1602來顯示超聲波測距模塊測得的距離。對于現(xiàn)實(shí)電路我們可以采用數(shù)碼管,也可以采用液晶顯示。液晶顯示相對于數(shù)碼管顯示電路更簡潔,顯示更明了,故我們采用液晶顯示電路。液晶又分字符型和點(diǎn)陣型,我們使用的液晶是字符型液晶。LCD1602自帶字符庫,不需要查找代碼,英文字符可直接使用。液晶電路使用時(shí),如果發(fā)現(xiàn)液晶不亮可以調(diào)節(jié)連接液晶的電位器,調(diào)節(jié)液晶的亮度。液晶顯示電路如圖2-11所示。圖2-11液晶顯示電路2.2.8遙控部分獨(dú)立按鍵電路遙控部分的獨(dú)立按鍵與單片機(jī)的接口設(shè)置為P2.0、P2.1、P2.2、P2.3、P2.4,分別控制小車的前進(jìn)、后退、左轉(zhuǎn)彎、右轉(zhuǎn)彎、以及功能切換。獨(dú)立按鍵采用低電平觸發(fā),即當(dāng)按下按鍵時(shí)給單片機(jī)一個(gè)低電平信號(hào),單片機(jī)隨后做出相應(yīng)的處理,當(dāng)按鍵松開時(shí),單片機(jī)接收到一個(gè)高電平信號(hào),單片機(jī)隨后繼續(xù)做出相應(yīng)處理。遙控部分的獨(dú)立按鍵電路如圖2-12所示。圖2-12遙控部分獨(dú)立按鍵電路第3章軟件的設(shè)計(jì)與說明3.1軟件設(shè)計(jì)系統(tǒng)功能的實(shí)現(xiàn)依賴于軟、硬件的協(xié)同工作。主控芯片為STC89C52RC單片機(jī)。單片機(jī)控制軟件實(shí)現(xiàn)遙控和小車的各項(xiàng)功能。程序編譯采用KeiluVision4編程軟件,KeiluVision4程序編譯界面如圖3-1所示。程序部分采用目前單片機(jī)最通用的C語言進(jìn)行編程。程序的燒錄軟件采用STC_ISP_V479軟件燒寫編譯好的HEX文件,STC_ISP_V479軟件程序燒寫界面如圖3-2所示。圖3-1KeiluVision4編程軟件界面圖3-2STC_ISP_V479軟件程序燒寫界面3.2軟件的說明3.2.1遙控部分主程序流程遙控部分主程序流程圖如圖3-3所示。程序從主函數(shù)開始執(zhí)行,24L01無線模塊初始化,同時(shí)在主函數(shù)中定義單片機(jī)口對應(yīng)的按鍵按下時(shí)所發(fā)出的函數(shù)值。接下來判斷是否有按鍵按下,如果有按鍵按下,則發(fā)送相應(yīng)的按鍵對應(yīng)的函數(shù)值,接著判斷是否又有按鍵按下。如果未發(fā)現(xiàn)按鍵按下則在主函數(shù)中循環(huán)判斷是否有按鍵按下。圖3-3遙控主程序流程圖3.2.224L01子程序流程圖24L01子程序流程圖如圖3-4所示,本模塊子程序采用收發(fā)一體的驅(qū)動(dòng)程序,即使該模塊既可以在需要時(shí)發(fā)送信號(hào),又可以在需要時(shí)接收信號(hào)。24L01子程序模塊先初始化,初始化的同時(shí)在設(shè)置的寫入reg函數(shù)中寫入本地地址,寫入接收端地址,并且設(shè)置頻道0自動(dòng)ACK應(yīng)答允許。設(shè)置24L01的允許接收地址只有頻道0,并且是信道工作在2.4GHz,以及設(shè)置數(shù)據(jù)長度為32字節(jié),發(fā)射速率為1MHz。圖3-424L01子程序流程圖3.2.3小車部分主程序流程圖小車部分主程序流程圖如圖3-5所示。程序從主函數(shù)開始執(zhí)行,24L01無線模塊初始化,液晶顯示模塊初始化,24L01無線電模塊初始化,超聲波模塊初始化。各個(gè)模塊初始化完畢后,單片機(jī)判斷是否接受到了信號(hào),如果接收到信號(hào),則判斷相應(yīng)的按鍵值,如果沒有接收到按鍵值則返回繼續(xù)判斷是否接受到信號(hào)。接收到信號(hào)后,小車開始執(zhí)行鍵值對應(yīng)的相應(yīng)的命令。而超聲波測距,并在液晶上顯示相應(yīng)距離,危險(xiǎn)距離報(bào)警都是貫穿在整個(gè)while〔1的語句中的。圖3-5小車部分主程序流程圖調(diào)試與總結(jié)基于單片機(jī)的智能小車控制有許多的模塊,在做整體設(shè)計(jì)之前首先是對每個(gè)模塊的調(diào)試。只有在確保每個(gè)模塊都正常的情況下才能進(jìn)行總體的設(shè)計(jì)和總體的調(diào)試。每個(gè)模塊都需要軟硬件的調(diào)試才能確保模塊的正常。4.1硬件部分4.1.1硬件的焊接單片機(jī)的電路系統(tǒng)相對于簡單一些,對于焊接只要多練習(xí)就不會(huì)出現(xiàn)問題,但是,單片機(jī)的電路系統(tǒng)中只要出于一處的錯(cuò)誤,則會(huì)對檢測造成很大的不便,而且電路的交叉線較多,對于各種鋒利的引腳都要注意處理,否則會(huì)刺破帶有包皮的導(dǎo)線,則會(huì)對電路造成短路現(xiàn)象。在本次單片機(jī)的設(shè)計(jì)調(diào)試中遇到了很多的問題?;叵脒@些問題只要認(rèn)真多思考都是可以避免的,主要問題在于單片機(jī)上的測試用燈不亮,原因出于焊接時(shí)間過長導(dǎo)致電路板上的金屬片脫落,造成斷路。解決方案:重新引線使電路重新導(dǎo)通。4.1.224L01無線電模塊24L01模塊是直接購買的模塊,在調(diào)試的時(shí)候按照商家提供的時(shí)序圖,編寫程序后卻一直無法通信,既不接受信號(hào)也不發(fā)送信號(hào)。首先排除了程序上的錯(cuò)誤,然后對硬件各部分電壓進(jìn)行測量并無發(fā)現(xiàn)異常,最后詳細(xì)的閱讀了說明書,發(fā)現(xiàn)24L01是3.3V~3.6V電壓供電,而自己設(shè)計(jì)的電源部分缺少了去耦電容導(dǎo)致了硬件的無法正常工作。解決方案:在3.3V電源處并入1個(gè)104瓷片電容,1個(gè)100uF電解電容,減少電源的波動(dòng)對模塊帶來的影響。4.1.3外接電源模塊在剛剛接觸小車的時(shí)候,本設(shè)計(jì)的小車應(yīng)為是4輪驅(qū)動(dòng)的,所以比一般的小車更加吃電流,剛剛開始使用的普通的電池僅僅調(diào)試幾次就沒電了,而使用的兩節(jié)3.7V的充電電池串聯(lián)效果也不盡理想,該小車使用的減速電機(jī)對電流的要求非常大,故購買了SONY的電腦適配器,該適配器可以提供19.5V的輸出電壓,以及高達(dá)4.5A的直流電流。所以設(shè)計(jì)了采用7805,與7809并聯(lián)的方式作為SONY適配器下級(jí)穩(wěn)壓輸出,成為了小車的外部供電電源。由于小車的電流需求非常大,小車在該電源的供電下只能維持10s的行駛時(shí)間。在接下來的檢查中發(fā)現(xiàn),由于夏天天氣熱,7809散熱比較慢,而單個(gè)7809的最高輸出電流在1.5A。7809由于溫度過高進(jìn)入了掉電保護(hù)模式。解決方案:在7809旁邊并入一個(gè)7809,相當(dāng)于加大了7809的輸出電流。在此同時(shí),在7809的片子上加上散熱片,使7809及時(shí)散熱。該方案的實(shí)施使得小車的續(xù)航能力大大提高。4.2軟件部分4.2.1超聲波模塊超聲波模塊是直接購買的模塊,在調(diào)試的時(shí)候按照商家提供的時(shí)序圖,編寫程序。但是編寫后超聲波測量時(shí)值測量一次,不能一直保持測量狀態(tài)。經(jīng)檢查后發(fā)現(xiàn),電路焊接正常,接口正常,所以排除了硬件問題的可能性。在接下來程序的檢查中發(fā)現(xiàn)了超聲波中count<>計(jì)算函數(shù)放在了while<1>函數(shù)外面。解決方案:超聲波中count<>計(jì)算函數(shù)放在while<1>函數(shù)的循環(huán)內(nèi),并且根據(jù)時(shí)序圖加上1ms的延時(shí)。該方案的實(shí)施,使得小車能夠一直保持測距的狀態(tài),并且在LCM1602上一直持續(xù)顯示正確的數(shù)值。4.3小車聯(lián)調(diào)小車的聯(lián)調(diào)是一個(gè)非常復(fù)雜的過程,在此過程中,不僅僅是對平時(shí)的專業(yè)知識(shí)的考驗(yàn),更是對自己的耐心的考驗(yàn)。小車聯(lián)調(diào)的時(shí)候遇到了很多問題:在無線電模塊調(diào)試的時(shí)候,小車執(zhí)行的動(dòng)作與發(fā)射的信號(hào)的所需要執(zhí)行的動(dòng)作不一致,要求小車往左的時(shí)候小車并沒有往左轉(zhuǎn)彎,要求小車前進(jìn)的時(shí)候小車也并沒有前進(jìn)。解決方案:對小車的控制電機(jī)轉(zhuǎn)動(dòng)的IO口進(jìn)行逐一排查,找出問題為小車的IO口與程序定義的有所不同。重新再程序中定義IO口后,小車就能按照無線信號(hào)發(fā)射的要求做出相應(yīng)的動(dòng)作。當(dāng)無線電模塊發(fā)射了相應(yīng)的信號(hào)后,小車執(zhí)行的動(dòng)作正確,但是有時(shí)候并沒有執(zhí)行相應(yīng)的動(dòng)作,如同"聾啞"一般不接收信號(hào)。當(dāng)按鍵多次按下后,小車才執(zhí)行相應(yīng)的動(dòng)作。解決方案:小車的"聾啞"并不是真正的"聾啞",無線電模塊在發(fā)射信號(hào)的時(shí)候并不是每次都能發(fā)射出去,發(fā)射出去的信號(hào)小車的接收部分的無線模塊不一定能夠接收。而且,按鍵的抖動(dòng)也會(huì)對無線的發(fā)射信號(hào)產(chǎn)生影響。故在程序中有按鍵按下時(shí),發(fā)射5次信號(hào)信號(hào),提高無線模塊的信號(hào)發(fā)射次數(shù),并且在按鍵程序中加入10ms的去抖程序。實(shí)施該方案后小車對信號(hào)的接受靈敏度大幅度提高,能夠準(zhǔn)確快速的做出相應(yīng)的信號(hào)所要求的動(dòng)作。4.4調(diào)試的總結(jié)通過這次設(shè)計(jì),掌握51單片機(jī)的原理,了解簡單傳感器組成原理,初步掌握傳感器的調(diào)整及測試方法,提高動(dòng)手能力和排除故障的能力。同時(shí)通過本課題設(shè)計(jì)與裝配、調(diào)試,提高自己的動(dòng)手能力,鞏固已學(xué)的理論知識(shí),建立單片機(jī)理論和實(shí)踐的結(jié)合,了解傳感器各單元電路之間的關(guān)系及相互影響,從而能正確設(shè)計(jì)、計(jì)算定時(shí)計(jì)數(shù)的各個(gè)單元電路。初步掌握傳感器的調(diào)整及測試方法。提高動(dòng)手能力和排除故障的能力。調(diào)試期間要多向同學(xué)老師請教,有問題就該虛心請教。經(jīng)過多次的反復(fù)測試與分析,可以對電路的原理及功能更加熟悉,同時(shí)提高了設(shè)計(jì)能力與對電路的分析能力,同時(shí)在軟件的編程方面得到更高的提高,對編程能力得到加強(qiáng),同時(shí)對所學(xué)的知識(shí)得到很大的提高與鞏固。參考文獻(xiàn)[1]徐國華.移動(dòng)機(jī)器人的發(fā)展現(xiàn)狀及其趨勢[J].機(jī)器人技術(shù)與應(yīng)用,2001,<03>:1102-1103,1150.[2]彭宏業(yè),段哲民編著.小型舞蹈機(jī)器人的驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)[J].國外電子元器件.2005,<04>:56-65.[3]陳南主編.定位控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].XX科技大學(xué)學(xué)報(bào).2003.[4]譚浩強(qiáng).C語言程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,1998.[5]蘇衛(wèi)東,任思聰?shù)龋疁乜叵鋽?shù)學(xué)模型的建立及其自適應(yīng)PID控制[J].中國慣性技術(shù)學(xué)報(bào),1995年,<3>:4.[6]萬福君.MCS-51單片機(jī)原理、系統(tǒng)設(shè)計(jì)與應(yīng)用[M].北京:清華大學(xué)出版社,2008.[7]彭宏業(yè),段哲民編著.小型舞蹈機(jī)器人的驅(qū)動(dòng)系統(tǒng)設(shè)計(jì)[J].國外電子元器件.2005,<4>.[8]劉甘娜等編著.IBM-PC微機(jī)原理及接口技術(shù)[J].XX:XX電子科技大學(xué)出版社,1998.[9]孫廣清.便攜式溫度傳感標(biāo)定裝置[D].西北工業(yè)大學(xué)碩士學(xué)位論文,2007.[10]鮑麗星,陳曉爭.一種高精度信號(hào)源的設(shè)計(jì)[J].XX航空航天大學(xué),2008,16<4>:588-590.[11]黨宏社.智能車輛系統(tǒng)發(fā)展及其關(guān)鍵技術(shù)概述[J].公路交通科技,2002.<4>[12]林敏.簡易數(shù)字化語音存儲(chǔ)與回放系統(tǒng)[J].儀表技術(shù),2008,28〔9:13-18.[13]余祖俊.微機(jī)監(jiān)測與控制應(yīng)用系統(tǒng)設(shè)計(jì),北方交通大學(xué)出版社,2001.12[14]溫志明.運(yùn)動(dòng)控制系統(tǒng)分析與應(yīng)用[J],國防工業(yè)出版社,2008.2[15]WANGSHX,WUGN,JIANGW,etal.Theprincipleandilluminationappliesoflightemittingdiode[J].LightandLighting,2006,14〔5:21-23.[16]I.MFilanvsky,H.Baltes.CMOSSchmitTriggerDesign[J].IEEETransactiomsonCircuitsandSystem-FundamentalTheoryandApplications.1994,41<1>:46-49.致謝在作品完成之際,我們要特別感謝XXX老師的熱情關(guān)懷和悉心指導(dǎo)。在我們作品制作的過程中,老師們給了我們很多耐心的指導(dǎo)和啟發(fā),不僅讓我學(xué)到了專業(yè)知識(shí),還讓我學(xué)到了很多做人的道理。特別是他們廣博的學(xué)識(shí)、深厚的學(xué)術(shù)素養(yǎng)、嚴(yán)謹(jǐn)?shù)闹螌W(xué)精神和一絲不茍的工作作風(fēng)使我們終生受益,在此表示真誠地感謝。在作品的制作過程中,也得到了許多同學(xué)的寶貴建議,在此一并致以誠摯的謝意。感謝所有關(guān)心、支持、幫助過我們的朋友。最后,向在百忙中抽出時(shí)間對本文進(jìn)行評審并提出寶貴意見的各位領(lǐng)導(dǎo)老師表示衷心地感謝!由于自身水平有限,設(shè)計(jì)中一定存在很多不足之處,敬請各位老師批評指正。附錄附件1L298N電機(jī)驅(qū)動(dòng)模塊

附件2小車側(cè)視圖

附件3小車俯視圖附件4小車的遙控部分附件5小車最終硬件圖附件6程序清單1.遙控部分程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;//****************************************NRF24L01端口定義***************************************sbit MISO =P1^0;sbit MOSI =P1^1;sbit SCK =P1^2;sbit CE =P1^3;sbit CSN =P1^4;sbit IRQ =P1^5;//************************************按鍵***************************************************sbit KEY1=P2^0;sbit KEY2=P2^1;sbit KEY3=P2^2;sbit KEY4=P2^3;sbit KEY5=P2^4;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH20 //20uintsTXpayload#defineRX_PLOAD_WIDTH20 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址ucharTxBuf[20]; ////***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0 //寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF //保留//*************************************SPI<nRF24L01>寄存器地址****************************************************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗(yàn)?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#defineEN_AA0x01//自動(dòng)應(yīng)答功能設(shè)置#defineEN_RXADDR0x02//可用信道設(shè)置#defineSETUP_AW0x03//收發(fā)地址寬度設(shè)置#defineSETUP_RETR0x04//自動(dòng)重發(fā)功能設(shè)置#defineRF_CH0x05//工作頻率設(shè)置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設(shè)置#defineSTATUS0x07//狀態(tài)寄存器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數(shù)據(jù)地址#defineRX_ADDR_P10x0B//頻道1接收數(shù)據(jù)地址#defineRX_ADDR_P20x0C//頻道2接收數(shù)據(jù)地址#defineRX_ADDR_P30x0D//頻道3接收數(shù)據(jù)地址#defineRX_ADDR_P40x0E//頻道4接收數(shù)據(jù)地址#defineRX_ADDR_P50x0F//頻道5接收數(shù)據(jù)地址#defineTX_ADDR0x10//發(fā)送地址寄存器#defineRX_PW_P00x11//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P10x12//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P20x13//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P30x14//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P40x15//接收頻道0接收數(shù)據(jù)長度#defineRX_PW_P50x16//接收頻道0接收數(shù)據(jù)長度#defineFIFO_STATUS0x17//FIFO棧入棧出狀態(tài)寄存器設(shè)置//**************************************************************************************voidDelay<unsignedints>;voidinerDelay_us<unsignedcharn>;voidinit_NRF24L01<void>;uintSPI_RW<uintuchar>;ucharSPI_Read<ucharreg>;voidSetRX_Mode<void>;uintSPI_RW_Reg<ucharreg,ucharvalue>;uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>;uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>;unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>;voidnRF24L01_TxPacket<unsignedchar*tx_buf>;//*****************************************長延時(shí)*****************************************voidDelay<unsignedints>{ unsignedinti; for<i=0;i<s;i++>; for<i=0;i<s;i++>;}//******************************************************************************************uint bdatasta;//狀態(tài)標(biāo)志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;/******************************************************************************************/*延時(shí)函數(shù)/******************************************************************************************/voidinerDelay_us<unsignedcharn>{ for<;n>0;n--> _nop_<>;}//****************************************************************************************/*NRF24L01初始化//***************************************************************************************/voidinit_NRF24L01<void>{inerDelay_us<100>; CE=0;//chipenable CSN=1;//Spidisable SCK=0;//Spiclocklineinithigh SPI_Write_Buf<WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH>;//寫本地地址 SPI_Write_Buf<WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH>;//寫接收端地址 SPI_RW_Reg<WRITE_REG+EN_AA,0x01>;//頻道0自動(dòng) ACK應(yīng)答允許 SPI_RW_Reg<WRITE_REG+EN_RXADDR,0x01>;//允許接收地址只有頻道0,如果需要多頻道可以參考Page21 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}/****************************************************************************************************/*函數(shù):uintSPI_RW<uintuchar>/*功能:NRF24L01的SPI寫時(shí)序/****************************************************************************************************/uintSPI_RW<uintuchar>{ uintbit_ctr; for<bit_ctr=0;bit_ctr<8;bit_ctr++>//output8-bit { MOSI=<uchar&0x80>;//output'uchar',MSBtoMOSI uchar=<uchar<<1>;//shiftnextbitintoMSB.. SCK=1;//SetSCKhigh.. uchar|=MISO; //capturecurrentMISObit SCK=0; //..thensetSCKlowagain }return<uchar>; //returnreaduchar}/****************************************************************************************************/*函數(shù):ucharSPI_Read<ucharreg>/*功能:NRF24L01的SPI時(shí)序/****************************************************************************************************/ucharSPI_Read<ucharreg>{ ucharreg_val; CSN=0;//CSNlow,initializeSPIcommunication... SPI_RW<reg>;//Selectregistertoreadfrom.. reg_val=SPI_RW<0>;//..thenreadregistervalue CSN=1;//CSNhigh,terminateSPIcommunication return<reg_val>;//returnregistervalue}/****************************************************************************************************//*功能:NRF24L01讀寫寄存器函數(shù)/****************************************************************************************************/uintSPI_RW_Reg<ucharreg,ucharvalue>{ uintstatus; CSN=0;//CSNlow,initSPItransaction status=SPI_RW<reg>;//selectregister SPI_RW<value>;//..andwritevaluetoit.. CSN=1;//CSNhighagain return<status>;//returnnRF24L01statusuchar}/****************************************************************************************************//*函數(shù):uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>/*功能:用于讀數(shù)據(jù),reg:為寄存器地址,pBuf:為待讀出數(shù)據(jù)地址,uchars:讀出數(shù)據(jù)的個(gè)數(shù)/****************************************************************************************************/uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>{ uintstatus,uchar_ctr; CSN=0; //SetCSNlow,initSPItranaction status=SPI_RW<reg>; //Selectregistertowritetoandreadstatusuchar for<uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++> pBuf[uchar_ctr]=SPI_RW<0>;// CSN=1; return<status>;//returnnRF24L01statusuchar}/*********************************************************************************************************/*函數(shù):uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>/*功能:用于寫數(shù)據(jù):為寄存器地址,pBuf:為待寫入數(shù)據(jù)地址,uchars:寫入數(shù)據(jù)的個(gè)數(shù)/*********************************************************************************************************/uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>{ uintstatus,uchar_ctr; CSN=0;//SPI使能 status=SPI_RW<reg>; for<uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++>// SPI_RW<*pBuf++>; CSN=1;//關(guān)閉SPI return<status>;//}/****************************************************************************************************//*函數(shù):voidSetRX_Mode<void>/*功能:數(shù)據(jù)接收配置/****************************************************************************************************/voidSetRX_Mode<void>{ CE=0; SPI_RW_Reg<WRITE_REG+CONFIG,0x0f>; //IRQ收發(fā)完成中斷響應(yīng),16位CRC ,主接收 CE=1; inerDelay_us<130>;}/******************************************************************************************************//*函數(shù):unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>/*功能:數(shù)據(jù)讀取后放如rx_buf接收緩沖區(qū)中/******************************************************************************************************/unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>{unsignedcharrevale=0; sta=SPI_Read<STATUS>; //讀取狀態(tài)寄存其來判斷數(shù)據(jù)接收狀況 if<RX_DR> //判斷是否接收到數(shù)據(jù) { CE=0; //SPI使能 SPI_Read_Buf<RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH>;//readreceivepayloadfromRX_FIFObuffer revale=1; //讀取數(shù)據(jù)完成標(biāo)志 } SPI_RW_Reg<WRITE_REG+STATUS,sta>;//接收到數(shù)據(jù)后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標(biāo)志 returnrevale;}/***********************************************************************************************************/*函數(shù):voidnRF24L01_TxPacket<unsignedchar*tx_buf>/*功能:發(fā)送tx_buf中數(shù)據(jù)/**********************************************************************************************************/voidnRF24L01_TxPacket<unsignedchar*tx_buf>{ CE=0; //StandByI模式 SPI_Write_Buf<WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH>;//裝載接收端地址 SPI_Write_Buf<WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH>; //裝載數(shù)據(jù) SPI_RW_Reg<WRITE_REG+CONFIG,0x0e>; //IRQ收發(fā)完成中斷響應(yīng),16位CRC,主發(fā)送 SPI_RW_Reg<WRITE_REG+STATUS,0X7E>; CE=1; //置高CE,激發(fā)數(shù)據(jù)發(fā)送 inerDelay_us<10>;}//************************************主函數(shù)************************************************************voidmain<void>{ ucharbizhangflag=0;init_NRF24L01<>; while<1> { if<KEY1==0> { Delay<5>; if<KEY1==0> { TxBuf[1]=0x99; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY1==0>; Delay<5>; //發(fā)送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY2==0> { Delay<5>; if<KEY2==0> { TxBuf[1]=0x66; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY2==0>; Delay<5>; //發(fā)送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY3==0> { Delay<5>; if<KEY3==0> { TxBuf[1]=0x69; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY3==0>; Delay<5>; //發(fā)送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY4==0> { Delay<5>; if<KEY4==0> { TxBuf[1]=0x96; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY4==0>; Delay<5>; //發(fā)送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY5==0> { Delay<5>; if<KEY5==0> { if<bizhangflag==0> { bizhangflag=1; TxBuf[1]=0xAA; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY5==0>; } else { bizhangflag=0; TxBuf[1]=0x55; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY5==0>; } } }2.小車部分程序#include<reg52.h>#include<intrins.h>#include"1602.h"#include"delay.h"typedefunsignedcharuchar;typedefunsignedcharuint;//****************************************NRF24L01端口定義***************************************sbit MISO =P0^0;sbit MOSI =P0^1;sbit SCK =P0^2;sbit CE =P0^3;sbit CSN =P0^4;sbit IRQ =P0^5;#defineKeyPort1P0#defineDataPortP3//定義按鍵端口sbitRightSenser=P2^3; sbitLeftSenser=P2^2;sbitTX=P2^1;sbitRX=P2^0;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH20 //20uintsTXpayload#defineRX_PLOAD_WIDTH20 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數(shù)據(jù)指令#defineWR_TX_PLOAD0xA0 //寫待發(fā)數(shù)據(jù)指令#defineFLUSH_TX0xE1 //沖洗發(fā)送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復(fù)裝載數(shù)據(jù)指令#defineNOP0xFF //保留//*************************************SPI<nRF24L01>寄存器地址****************************************************#defineCONFIG0x00//配置收發(fā)狀態(tài),CRC校驗(yàn)?zāi)J揭约笆瞻l(fā)狀態(tài)響應(yīng)方式#defineEN_AA0x01//自動(dòng)應(yīng)答功能設(shè)置#defineEN_RXADDR0x02//可用信道設(shè)置#defineSETUP_AW0x03//收發(fā)地址寬度設(shè)置#defineSETUP_RETR0x04//自動(dòng)重發(fā)功能設(shè)置#defineRF_CH0x05//工作頻率設(shè)置#defineRF_SETUP0x06//發(fā)射速率、功耗功能設(shè)置#defineSTATUS0x07//狀態(tài)寄存器#defineOBSERVE_TX0x08//發(fā)送監(jiān)測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數(shù)據(jù)地址#defineRX_ADDR_P10x0B//頻道1接收數(shù)據(jù)地址#defineRX_ADDR_P20x0C//頻道2接收數(shù)據(jù)地址#defineRX_ADDR_P3

溫馨提示

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

評論

0/150

提交評論