久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7035|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

基于單片機(jī)智能小車(chē)設(shè)計(jì)相關(guān)論文資料

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:195969 發(fā)表于 2017-5-10 12:52 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
業(yè)

      基于單片機(jī)智能小車(chē)設(shè)計(jì)
Design based on microcomputer smart car


           學(xué)院名稱: 電子信息與電氣工程學(xué)院
           專業(yè)班級(jí):自動(dòng)化2013級(jí)2班     
           學(xué)生姓名:魯順
           學(xué)    號(hào):    13020610225
           指導(dǎo)教師姓名:楊欣
           指導(dǎo)教師職稱:講師

                           2017 5
畢業(yè)設(shè)計(jì)(論文)原創(chuàng)性聲明和使用授權(quán)說(shuō)明
原創(chuàng)性聲明
本人鄭重承諾:所呈交的畢業(yè)設(shè)計(jì)(論文),是我個(gè)人在指導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng)發(fā)表或公布過(guò)的研究成果,也不包含我為獲得安陽(yáng)工學(xué)院及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過(guò)的材料。對(duì)本研究提供過(guò)幫助和做出過(guò)貢獻(xiàn)的個(gè)人或集體,均已在文中作了明確的說(shuō)明并表示了謝意。
       名:               日   期:       
指導(dǎo)教師簽名:               日  期:       
使用授權(quán)說(shuō)明
本人完全了解安陽(yáng)工學(xué)院關(guān)于收集、保存、使用畢業(yè)設(shè)計(jì)(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(jì)(論文)的印刷本和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)校可以采用影印、縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前提下,學(xué)校可以公布論文的部分或全部?jī)?nèi)容。

作者簽名:                   日   期:        
目錄
摘要        5
Abstract.        6
          7
第一章 方案設(shè)計(jì)與論證        9
1.1 設(shè)計(jì)任務(wù)及要求        9
1.2 設(shè)計(jì)方案論證        9
1.2.1 單片機(jī)選擇        9
1.2.2 電機(jī)驅(qū)動(dòng)芯片的選擇        11
1.2.3 路況檢測(cè)模塊        12
2 系統(tǒng)硬件電路與實(shí)現(xiàn)        14
2.1 主控模塊電路設(shè)計(jì)        14
2.1.1 STC89C52單片機(jī)的簡(jiǎn)介        14
2.1.2時(shí)鐘電路        16
2.1.3復(fù)位電路        18
2.2紅外遙控模塊的電路設(shè)計(jì)        19
2.2.1紅外遙控的實(shí)現(xiàn)原理        20
2.2.2紅外發(fā)射器        21
2.2.3紅外接收器        22
2.3電機(jī)驅(qū)動(dòng)模塊的設(shè)計(jì)        23
2.3.1 L293D芯片簡(jiǎn)介        24
2.4路況檢測(cè)模塊        26
2.4.1 HC-SR04超聲波模塊        26
2.4.2 循跡模塊        29
2.4.3傳感器的選擇        30
2.5藍(lán)牙無(wú)線傳輸模塊        31
2.5.1藍(lán)牙模塊的選擇        31
2.5.2顯示模塊的電路顯示        35
2.6智能防撞報(bào)警模塊        36
2.6.1智能防撞報(bào)警模塊原理        36
3系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)        38
3.1整體程序的構(gòu)架        39
3.2紅外遙控解碼的實(shí)現(xiàn)        39
3.3電機(jī)驅(qū)動(dòng)        42
3.4 小車(chē)尋跡        42
3.5 小車(chē)防撞報(bào)警        44
4 小車(chē)系統(tǒng)原理圖        46
總結(jié)        48
參考文獻(xiàn)        50
附錄        52
元件清單        52
系統(tǒng)程序        53













基于單片機(jī)智能小車(chē)設(shè)計(jì)
摘要:隨著科學(xué)技術(shù)的不斷進(jìn)步,關(guān)于汽車(chē)的研究也成為人們關(guān)注的焦點(diǎn),智能車(chē)輛將成為未來(lái)的必然產(chǎn)物,本設(shè)計(jì)產(chǎn)品就是根據(jù)這一大背景下提出來(lái)的,本設(shè)計(jì)是基于STC89C52單片機(jī)控制及傳感器技術(shù)的,來(lái)實(shí)現(xiàn)小車(chē)自動(dòng)自動(dòng)尋線尋跡,利用超聲波模塊來(lái)完成避障功能,小車(chē)前輪由兩個(gè)電機(jī)驅(qū)動(dòng)左右兩個(gè)輪,通過(guò)兩個(gè)電機(jī)的轉(zhuǎn)速及轉(zhuǎn)動(dòng)時(shí)間的差別,達(dá)到小車(chē)正常行駛和轉(zhuǎn)向的目的。安裝藍(lán)牙模塊,通過(guò)手機(jī)app來(lái)實(shí)現(xiàn)無(wú)線通信,來(lái)控制小車(chē)的行駛。
關(guān)鍵詞:智能小車(chē);STC89S52單片機(jī);尋線;避障;超聲波傳感器;藍(lán)牙






Design based on microcomputer smart car
Abstract:Along with the advance of science and technology, the research on vehicle has become the focus of attention, intelligent vehicle will become the inevitable outcome of the future, the design of products is based on this background, this design is based on the STC89C52 single-chip microcomputer control and sensor technology, to realize the automatic automatic car line tracing, the use of ultrasonic module to complete obstacle avoidance function, the car front wheel driven by two motor around two rounds, through two motor rotation speed and the difference of time, achieve the goal of the car moving and steering.Install bluetooth module, realize the wireless communication through mobile phone app, to control the motion of the car.Key words:Smart car;STC89S52 ;microcontroller; Line; Obstacle avoidance; Ultrasonic sensor; bluetooth.




隨著科學(xué)技術(shù)的飛速發(fā)展,關(guān)于智能汽車(chē)的研究也就備受人們的關(guān)注。每年舉行的全國(guó)電子大賽中,各種功能的智能小車(chē)項(xiàng)目都占很大的比例,全國(guó)的各個(gè)高校也都非常重視智能小車(chē)課題的研究。可見(jiàn)其研究意義很大。智能小車(chē)是現(xiàn)代科學(xué)技術(shù)的新產(chǎn)品,將會(huì)是以后的發(fā)展方向和必然產(chǎn)物,他可以在沒(méi)有人直接參與的情況下,利用外加的設(shè)備或裝備,使小車(chē)的某個(gè)工作狀態(tài)或者參數(shù)自動(dòng)的按照預(yù)定的規(guī)定運(yùn)行。可用于科學(xué)探索偵察等的用途。智能小車(chē)的控制器模塊主要接收傳感器部分發(fā)送過(guò)來(lái)的實(shí)時(shí)信號(hào),并且根據(jù)之前燒錄到單片機(jī)中的軟件程序,來(lái)命令智能小車(chē)做出相應(yīng)的動(dòng)作,就像是人的大腦部分。而執(zhí)行器模塊和傳感器模塊則像是人體的四肢和眼睛耳朵一樣。單片機(jī)具備構(gòu)造簡(jiǎn)單、可靠性高、多功能、適合在惡劣環(huán)境中工作、抗干擾能力高及小型化等優(yōu)勢(shì),他滲透到生活的各個(gè)領(lǐng)域,可以說(shuō)哪一個(gè)范疇都能找到單片機(jī)的蹤影,首先應(yīng)用最廣泛的就是生產(chǎn)自動(dòng)化領(lǐng)域的應(yīng)用,能降低勞動(dòng)程度,提高生產(chǎn)效率,還可以應(yīng)用實(shí)時(shí)測(cè)量方面、智能化儀表、智能化產(chǎn)品、家用電器、國(guó)防現(xiàn)代化、信息通信領(lǐng)域等。這些年來(lái),單片機(jī)技術(shù)突飛猛進(jìn),一些高功能的單片機(jī)如雨后春筍大量涌現(xiàn),技術(shù)日新月異,是我們做智能小車(chē)的首選。

第一章 方案設(shè)計(jì)與論證
1.1 設(shè)計(jì)任務(wù)及要求
本智能小車(chē)的設(shè)計(jì)要求如下:
●具有單片機(jī)控制核心模塊;
●具有電機(jī)驅(qū)動(dòng)模塊;
       ●具有超聲波避障模塊;
●具有光電感應(yīng)模塊;
       ●具有七段數(shù)碼管顯示模塊;
       ●具有無(wú)線藍(lán)牙傳輸模塊;
●具有防撞報(bào)警模塊;

1.2 設(shè)計(jì)方案論證1.2.1 單片機(jī)選擇
方案一:采用MSP430單片機(jī)
MSP430系列單片機(jī)他具有處理能力強(qiáng)、超低功耗、片內(nèi)資源豐富等優(yōu)點(diǎn)。但是也有很多不足之處,比如價(jià)格較高,比較適用于復(fù)雜的應(yīng)用系統(tǒng),當(dāng)用戶設(shè)計(jì)需要更多考慮成本時(shí),MSP430單片機(jī)并不一定合適。
方案二:采用STC89C52單片機(jī)
全靜態(tài)工作,工作范圍:0Hz~24MHz;
●三級(jí)程序存儲(chǔ)器加密;
●128×8位內(nèi)部RAM;
●32位雙向輸入輸出線;
兩個(gè)十六位定時(shí)器/計(jì)數(shù)器
五個(gè)中斷源,兩級(jí)中斷優(yōu)先級(jí);
●一個(gè)全雙工的異步串行口;
●間歇和掉電兩種工作方式;
方案選擇:
綜上所述:通過(guò)以上兩種方案的比較,在本系統(tǒng)中的單片機(jī)選
第二個(gè)方案,MSP430對(duì)系統(tǒng)的控制比較麻煩并且價(jià)位較高,所以選擇使用STC89S52作為控制器芯片。
1.2.2 電機(jī)驅(qū)動(dòng)芯片的選擇
方案一:使用L298N芯片來(lái)驅(qū)動(dòng)普通直流電機(jī),用該芯片作為電機(jī)驅(qū)動(dòng),操縱便利,比較平穩(wěn),直流電機(jī)具有能耗低、性能優(yōu)越、振動(dòng)小、噪聲低、維護(hù)成本低、調(diào)整范圍廣等優(yōu)點(diǎn),普通直流電機(jī)結(jié)構(gòu)緊湊,體積小,造型美觀,通用性強(qiáng),采用新型密封裝置的直流電機(jī)保護(hù)性能好,對(duì)環(huán)境適應(yīng)性強(qiáng),可在惡劣的環(huán)境中連續(xù)工作。        
方案二:采用步進(jìn)電機(jī),步進(jìn)電動(dòng)機(jī)最主要的功能就是能夠控制位置,你要它在什么地方停止,它就在什么地方停止,并且可以實(shí)現(xiàn)開(kāi)環(huán)控制無(wú)需反饋信號(hào),優(yōu)點(diǎn)是中低輸出力矩大、性價(jià)比高,只有伺服的四分之一左右,缺點(diǎn)是振動(dòng)大、發(fā)熱大高速性能差、有丟步的可能,需要專門(mén)的驅(qū)動(dòng)器。        
方案選擇:
本智能小車(chē)設(shè)計(jì)采用方案一更好,購(gòu)買(mǎi)方便,價(jià)錢(qián)合理。
1.2.3 路況檢測(cè)模塊
方案一:使用超聲波傳感器,超聲波是一種機(jī)械波,依靠介質(zhì)才能傳播,從發(fā)射信號(hào)開(kāi)始到接收到信號(hào)結(jié)束來(lái)計(jì)算往返的時(shí)間差,并且將信號(hào)放大后放到主控制芯片當(dāng)中從而判定距離,這就是它工作的原理。現(xiàn)在應(yīng)用比較廣泛的還有一種方法也是利用同樣的原理實(shí)現(xiàn)的,比如紅外光探頭,同樣可以在高精度下完成測(cè)量,并且簡(jiǎn)化了電路,它的使用成本低、易于操作,在智能機(jī)器人發(fā)揮著很大的作用。        方案二:使用視覺(jué)傳感器,它主要是由攝像頭及處理圖像的控制器組成,廣泛的應(yīng)用于生產(chǎn)現(xiàn)場(chǎng),用于檢測(cè)零部件的優(yōu)良,從而避免次品外流,可以同時(shí)測(cè)量多個(gè)目標(biāo),具有高精度的特點(diǎn),其優(yōu)點(diǎn)是尺寸小,價(jià)格合理,但是算法復(fù)雜,運(yùn)行速度慢。
方案選擇:
        綜合以上方案,采用方案一較為合理,因?yàn)楸驹O(shè)計(jì)的智能小車(chē)實(shí)現(xiàn)避障功能即可,無(wú)需太復(fù)雜,并不需要經(jīng)過(guò)傳輸回來(lái)的圖像來(lái)分析前方障礙物。





2 系統(tǒng)硬件電路與實(shí)現(xiàn)
本智能小車(chē)采用了STC89C52單片機(jī)作為主要控制芯片來(lái)處理各個(gè)模塊的運(yùn)行,系統(tǒng)整體硬件總框圖如圖2.1
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB2E.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB2F.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB30.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB31.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB32.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB33.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB34.tmp.png
             2.1 系統(tǒng)硬件總體框圖


2.1 主控模塊電路設(shè)計(jì)
2.1.1 STC89C52單片機(jī)的簡(jiǎn)介
STC89C52是STC公司生產(chǎn)的一種低功耗、高性能CMOS8位微控制器,其主要特點(diǎn)是:
全靜態(tài)工作,工作范圍:0Hz~24MHz;
●三級(jí)程序存儲(chǔ)器加密;
●128×8位內(nèi)部RAM;
●32位雙向輸入輸出線;
兩個(gè)十六位定時(shí)器/計(jì)數(shù)器
五個(gè)中斷源,兩級(jí)中斷優(yōu)先級(jí);
●一個(gè)全雙工的異步串行口;
●間歇和掉電兩種工作方式;


2.1 STC89C52的管腳圖
1)主要特性:
        file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB35.tmp.jpg
        2.1.1
用戶應(yīng)用程序空間為8K字節(jié)
片上集成512字節(jié)RAM
具有EEPROM功能
3個(gè)16位定時(shí)器/計(jì)數(shù)器。即定時(shí)器T0、T1、T2
●PDIP封裝

2.2紅外遙控模塊的電路設(shè)計(jì)
2.2.1紅外遙控的實(shí)現(xiàn)原理
怎么樣才能讓燒錄的程序去分析0位和1位是紅外遙控能夠?qū)崿F(xiàn)的至關(guān)重要步驟,高電平脈沖后的低電平的脈寬的不一樣也就定義了是位0還是位1,位0代表的是脈沖寬度0.565ms、時(shí)間間隔為0.56ms、周期為1.125ms;而位1代表的脈沖脈寬為0.565ms、時(shí)間間隔為1.685ms、周期為2.25ms。
        解碼和上訴紅外遙控實(shí)現(xiàn)原理類似,也是如何讓程序去識(shí)別分析0位和1位。位0和位1的相同點(diǎn)是都是從低電平0.565ms開(kāi)始的,不同點(diǎn)在于它們的高電平寬度不同,所以高電平寬度就是區(qū)分位0還是位1的關(guān)鍵。紅外遙控的流程圖如圖2.2.1所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB36.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB37.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB47.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB48.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB49.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4A.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4B.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4C.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4D.tmp.png        充電放大        解調(diào)        解碼
                             2.2.1

2.2.2紅外發(fā)射器
該電路的主要控制器件是采用PPM進(jìn)行編碼遙控器芯片HT6221,紅外遙控發(fā)射器電路圖如圖2.2.2所示。各個(gè)開(kāi)關(guān)的功能分別為:K1停止;K2右轉(zhuǎn);K3左轉(zhuǎn);K4啟動(dòng);K5加速;K6循跡;K7制動(dòng);K8后退。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4E.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB4F.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB50.tmp.png
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB51.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB52.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB63.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB64.tmp.png                     鍵盤(pán)        編碼調(diào)制        LED

                2.2.2
2.2.3紅外接收器
紅外線接收器的主要特點(diǎn):
●小型設(shè)計(jì)
內(nèi)置專用IC
●寬角度及長(zhǎng)距離接收
●抗干擾能力強(qiáng)
●能抵擋環(huán)境干擾光纖
●低電壓工作
●紅外線接收器的結(jié)構(gòu)
脈沖信號(hào)輸出端,直接接單片機(jī)的IO口
●GND接系統(tǒng)的地線(0V)
●VCC接系統(tǒng)的電源正極(+5V)
該模塊的電路如圖2.2.3所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB65.tmp.jpg

           2.2.3


2.3電機(jī)驅(qū)動(dòng)模塊的設(shè)計(jì)
2.3.1 L293D芯片簡(jiǎn)介
L293D驅(qū)動(dòng)芯片主要特點(diǎn)是:
工作電壓高,最高工作電壓可達(dá)36V
●該芯片可以驅(qū)動(dòng)兩臺(tái)直流電機(jī)
一、直流電機(jī)驅(qū)動(dòng)模塊的參數(shù)
輸入邏輯電壓:5.0V
輸入電機(jī)電壓:5.0V-36.0V
輸出驅(qū)動(dòng)電流:1000mA
尺寸:(長(zhǎng))34mm * (寬)18mm * (高)8mm
連接方式:
P1:控制M1電機(jī)PWM1輸入引腳。
D1:控制M1電機(jī)轉(zhuǎn)向輸入引腳。
P2:控制M2電機(jī)PWM2輸入引腳。
D2:控制M2電機(jī)轉(zhuǎn)向輸入引腳。
GND:電源地接口。
5V:邏輯電源+5V接口。
VC:輸入電機(jī)驅(qū)動(dòng)電壓接口。
GND: 電源地接口。
M1+:M1電機(jī)驅(qū)動(dòng)輸出引腳正極。
M1-:M1電機(jī)驅(qū)動(dòng)輸出引腳負(fù)極。
M2+:M2電機(jī)驅(qū)動(dòng)輸出引腳正極。
M2-:M2電機(jī)驅(qū)動(dòng)輸出引腳負(fù)極。
電機(jī)驅(qū)動(dòng)模塊的硬件電路圖如圖2.3.1
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB66.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB67.tmp.jpg
                                         2.3.1

2.4路況檢測(cè)模塊
2.4.1 HC-SR04超聲波模塊
1、此模塊性能穩(wěn)定,測(cè)度距離精確,模塊高精度,盲區(qū)小,圖2.4.1為HC-SR04超聲波模塊實(shí)物圖。

2、 主要技術(shù)參數(shù):
使用電壓:DC---5V  
靜態(tài)電流:小于2mA      
電平輸出:高5V     
電平輸出:底0V        
感應(yīng)角度:不大于15度  
探測(cè)距離:2cm-450cm
高精度 可達(dá)0.2cm
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB68.tmp.jpg
         2.4.1
3、電氣參數(shù)

        電氣參數(shù)
    HC-SR04超聲波模塊
        工作電壓
[size=12.0000pt]        DC15V
        工作電流
[size=12.0000pt]        15mA
        工作頻率
          40Hz
        最遠(yuǎn)射程
[size=12.0000pt]        4m
        最近射程
          2cm
[size=12.0000pt]        測(cè)量角度
[size=12.0000pt]        15度
[size=12.0000pt]        輸入觸發(fā)信號(hào)
      10us的TTL脈沖
[size=12.0000pt]        輸出會(huì)回響信號(hào)
輸出TTL電平信號(hào)與射程成比例
[size=12.0000pt]         規(guī)格尺寸
[size=12.0000pt]        45*20*15mm

2.4.2 循跡模塊
小車(chē)循跡的原理:使用紅外探測(cè)法使小車(chē)延黑線行駛,其主要特點(diǎn)是紅外線在不同顏色的物體上反射性質(zhì)不同,在小車(chē)行駛過(guò)程中不斷地向地面發(fā)射紅外光,當(dāng)紅外光遇到白色紙質(zhì)地板時(shí)發(fā)生漫反射,反射光被裝在小車(chē)上的接收管接收;如果遇到黑線則紅外光被吸收,小車(chē)上的接收管接收不到紅外光,小車(chē)前方探頭實(shí)物如圖2.4.2所示。
         file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB69.tmp.jpg
                   2.4.2

2.4.3傳感器的選擇:
ST系列集成紅外探頭價(jià)格便宜、體積小、使用方便、性能可靠、用途廣泛,所以該系統(tǒng)中最終選擇了LM324反射傳感器作為紅外光的發(fā)射和接收器件,其內(nèi)部結(jié)構(gòu)和外接電路均較為簡(jiǎn)單,其硬件原理圖如圖2.4.3所示,LM324引腳圖(管腳圖)如圖2.4.3-2所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB6A.tmp.jpg                                  2.4.3-1

LM324的特點(diǎn):
  ●短跑保護(hù)輸出
  ●真差動(dòng)輸入級(jí)
  ●可單電源工作:3V-32V
  ●每封裝含四個(gè)運(yùn)算放大器。
  ●具有內(nèi)部補(bǔ)償?shù)墓δ堋?/font>
  ●共模范圍擴(kuò)展到負(fù)電源
  ●行業(yè)標(biāo)準(zhǔn)的引腳排列
  ●輸入端具有靜電保護(hù)功能

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB6B.tmp.jpg
       2.4.3-2


2.5藍(lán)牙無(wú)線傳輸模塊
2.5.1藍(lán)牙模塊的選擇
ZS-040是比較早的產(chǎn)品,AT指令集很少,包括修改藍(lán)牙名(限于從機(jī)),修改密碼,修改波特率,詢問(wèn)版本號(hào)等幾個(gè)基本功能,在本次設(shè)計(jì)中我們只需實(shí)現(xiàn)簡(jiǎn)單的通信,因此選用ZS-040模塊,產(chǎn)品實(shí)物圖如圖2.5.1所示。
        file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB7C.tmp.jpg
             2.5.1-1
藍(lán)牙模塊ZS-040的主要特征:
●無(wú)線收發(fā)
1、靈敏度(誤碼率)達(dá)到 -80dBm
2、-4 -> 6dBm 功率可調(diào)輸出
性能概要 完整的藍(lán)牙解決方案
1、藍(lán)牙 2.0 帶 EDR, 2Mbps-3Mbps 調(diào)制度
2、外置 8Mbit FLASH
3、可選 PIO 控制
4、 標(biāo)準(zhǔn) HCI 端口(UART or USB)
5、 USB 協(xié)議: Full Speed USB1.1, Compliant With 2.0
6、模塊可以作為 SMD 貼片工藝
7、RoHS 制程
8、引腳半孔工藝
低功耗
高性能無(wú)線收發(fā)系統(tǒng)
低成本
應(yīng)用領(lǐng)域
1、藍(lán)牙車(chē)載免提
2、藍(lán)牙 GPS
3、藍(lán)牙 PCMCIA , USB Dongle
4、藍(lán)牙數(shù)據(jù)傳送
軟件
  CSR
二、 藍(lán)牙通信模塊的分析處理,引腳定義如圖2.5.1-2所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB7D.tmp.jpg
    2.5.1-2
1) ZS-040藍(lán)牙轉(zhuǎn)串口模塊的作用是將從手機(jī)藍(lán)牙發(fā)送過(guò)來(lái)的指令接收到后轉(zhuǎn)換成串口的形式通過(guò)單片機(jī)的串口傳給單片機(jī)。只需將該模塊的RXD接上51單片機(jī)的TXD引腳,TXD接51的RXD,然后接單片機(jī)的VCC供電,因?yàn)槲覀冎挥盟邮帐謾C(jī)藍(lán)牙信號(hào),不發(fā)送數(shù)據(jù),參考原理圖如圖2.5.1-3所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB7E.tmp.jpg
            2.5.1-3
2.5.2顯示模塊的電路顯示
本系統(tǒng)采用一個(gè)七段數(shù)碼管顯示器,其電路原理圖如圖2.6.2所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB7F.tmp.jpg
                2.6.2
當(dāng)手機(jī)app控制智能小車(chē)前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)時(shí),一位七段數(shù)碼管分別顯示1234

2.6智能防撞報(bào)警模塊

2.6.1智能防撞報(bào)警模塊原理
智能防撞報(bào)警系統(tǒng)是現(xiàn)代智能小車(chē)必裝的一個(gè)系統(tǒng)模塊,有很大的研究?jī)r(jià)值,有十分重要的現(xiàn)實(shí)意義。使智能小車(chē)能夠自動(dòng)的判別前方是否有障礙物,如果前方遇到有障礙物則會(huì)自動(dòng)的調(diào)節(jié)狀態(tài)以避開(kāi)障礙物所帶來(lái)的嚴(yán)重?fù)p失,同時(shí)在即將遇到障礙物之前,能夠觸發(fā)報(bào)警系統(tǒng),以警告主人避免危險(xiǎn)。

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB80.tmp.png將智能小車(chē)放在空曠無(wú)人的地面上,位于小車(chē)前端的兩個(gè)探頭能夠感應(yīng)前方是否有阻礙行駛的障礙物,與此同時(shí),朝下的探頭也會(huì)同時(shí)接收到來(lái)自路面路況的實(shí)時(shí)信息狀況,當(dāng)小車(chē)運(yùn)行到障礙物旁邊時(shí),裝置在小車(chē)上面的主控芯片STC89C52單片機(jī)就會(huì)接收到此時(shí)的路況信息,進(jìn)而去改變小車(chē)的運(yùn)行方向,使小車(chē)趕緊掉頭行駛,同時(shí)發(fā)出報(bào)警信號(hào)。報(bào)警模塊硬件圖如圖2.6.1所示。








                   2.6.1
當(dāng)智能小車(chē)前面遇到障礙物時(shí),主控芯片單片機(jī)分析之后會(huì)送給P0.6一個(gè)高電平信號(hào),使得三極管V1導(dǎo)通,從而引起SB1蜂鳴器導(dǎo)通,發(fā)出報(bào)警信號(hào)。

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB81.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB82.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB83.tmp.pngfile:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB84.tmp.png3系統(tǒng)軟件設(shè)計(jì)與實(shí)現(xiàn)
在進(jìn)行智能小車(chē)的系統(tǒng)軟件設(shè)計(jì)時(shí),我們將所有涉及到的模塊程序全部都放入到到遙控器中,這種方法主要是為了方便控制,并且不占用CPU,因?yàn)檫b控模塊、尋跡模塊、以及避障模塊等都同時(shí)用到了實(shí)時(shí)檢測(cè)掃描,這樣不僅占用CPU,而且幾個(gè)程序同時(shí)運(yùn)行還會(huì)產(chǎn)生矛盾沖突使小車(chē)無(wú)法正常工作。各個(gè)模塊的整體控制如圖3.1所示。
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB85.tmp.png













         3.1

當(dāng)遙控器發(fā)送紅外信號(hào)時(shí),會(huì)開(kāi)啟STC89C52單片機(jī)外部中斷0使主程序立刻進(jìn)入中斷函數(shù),并且進(jìn)行解碼。完成解碼任務(wù)以后,主程序再接收遙控的反饋信息,主程序?qū)Ρ冗b控器輸入值之后進(jìn)入相應(yīng)模塊執(zhí)行相關(guān)操作,由電機(jī)驅(qū)動(dòng)來(lái)完成各個(gè)模塊的處理操作,所以在圖3.1中最終箭頭是指向電機(jī)控制模塊的。
3.1整體程序的構(gòu)架
程序框圖如圖3.1.1所
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB95.tmp.png
3.1.1
3.2紅外遙控解碼的實(shí)現(xiàn)
因?yàn)楦鱾(gè)模塊的程序控制都放在了遙控模塊這一單元里面,所以整個(gè)智能小車(chē)的主要線索就是紅外遙控的解碼,并且發(fā)揮了整個(gè)系統(tǒng)入口的作用。
每當(dāng)遙控器上有按鍵被按下時(shí),脈寬波形便被由1腳接收到由遙控器發(fā)送的紅外信號(hào)所解碼,于此同時(shí)促使主控芯片單片機(jī)產(chǎn)生中斷,而且開(kāi)啟定時(shí)器、脈沖個(gè)數(shù)計(jì)數(shù)。記錄出每一個(gè)脈沖所經(jīng)歷的時(shí)間和脈沖的總數(shù),等到一幀的數(shù)據(jù)發(fā)送完成以后,單片機(jī)結(jié)束計(jì)數(shù),并且關(guān)閉定時(shí)器。然后再進(jìn)入判斷階段,首先判斷這一幀數(shù)據(jù)中的脈沖個(gè)數(shù),如果脈沖個(gè)數(shù)大于31個(gè)則將數(shù)據(jù)全部舍棄,要是剛剛好則判斷接收到的脈沖是1還是0,接收完之后將數(shù)據(jù)保存起來(lái),再來(lái)比對(duì)數(shù)據(jù)的是否正確,首先比對(duì)前導(dǎo)碼是否符合,也就是看一下使用中的遙控器是不是與小車(chē)匹配的遙控器,如果都正確之后再來(lái)將碼值存起來(lái)。主程序只需要調(diào)用一個(gè)swich函數(shù)來(lái)對(duì)相應(yīng)碼值進(jìn)行對(duì)應(yīng)函數(shù)的調(diào)用就可以了,比如手動(dòng)按下了下 鍵,則調(diào)用后退函數(shù)來(lái)完成小車(chē)的后退動(dòng)作。如圖3.2所示
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB96.tmp.png
                         3.2


3.3電機(jī)驅(qū)動(dòng)
從整體上上來(lái)看,電機(jī)驅(qū)動(dòng)在小車(chē)運(yùn)行中占主導(dǎo)作用,就像是人體的四肢,它用來(lái)執(zhí)行小車(chē)的所有動(dòng)態(tài)操作,任何一個(gè)模塊所執(zhí)行命令的外在表現(xiàn)。
電機(jī)驅(qū)動(dòng)包括驅(qū)動(dòng)控制直流電機(jī)的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)以及暫停這五個(gè)功能,這五個(gè)功能不僅僅只是遙控器按下上下左右之后才執(zhí)行,而是每一個(gè)模塊都會(huì)有執(zhí)行電機(jī)驅(qū)動(dòng)模塊的操作,所以在設(shè)計(jì)程序時(shí),最合理的設(shè)計(jì)應(yīng)該是將這些前進(jìn)、后退、左右轉(zhuǎn)向單獨(dú)編譯成一個(gè)個(gè)的函數(shù)塊,每一個(gè)子模塊的運(yùn)行就只需調(diào)用這些函數(shù)就可完成。這樣做就節(jié)省了很大的程序空間。舉個(gè)例子,在編寫(xiě)前進(jìn)函數(shù)時(shí),為了滿足小車(chē)前進(jìn)功能,只需將P0.0P0.3賦值1010就可完成,其他左轉(zhuǎn)右轉(zhuǎn)只是改變相應(yīng)P0.0P0.3的碼值則可實(shí)現(xiàn)。

3.4 小車(chē)尋跡
當(dāng)主人打開(kāi)尋跡模塊功能后,就會(huì)不停地掃描單片基中與四個(gè)前方探測(cè)器相連接的IO端口,每當(dāng)檢測(cè)到哪個(gè)探測(cè)器有信號(hào)進(jìn)入了,就會(huì)立刻進(jìn)入之前編寫(xiě)過(guò)的判斷處理程序,,當(dāng)左面的第一和第二級(jí)傳感器檢測(cè)到了黑線,就會(huì)使小車(chē)左轉(zhuǎn)向,當(dāng)小車(chē)右面的第一第二級(jí)傳感器檢測(cè)到了黑線,則會(huì)使小車(chē)右轉(zhuǎn)向,在經(jīng)過(guò)不斷地調(diào)整后,小車(chē)會(huì)繼續(xù)延著黑線行駛,并不斷地重復(fù)上訴動(dòng)作,從而實(shí)現(xiàn)了小車(chē)的尋跡功能。
3.4為小車(chē)尋跡模塊的程序流程圖



file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB97.tmp.png
                3.4 尋跡程序流程圖
3.5 小車(chē)防撞報(bào)警
當(dāng)開(kāi)啟防撞報(bào)警功能的時(shí)候,智能小車(chē)就會(huì)進(jìn)入防撞報(bào)警函數(shù),控制小車(chē)該模塊功能的單片機(jī)IO口是P3.7,首先判斷小車(chē)前方是否有懸崖或者障礙物,如果沒(méi)有則繼續(xù)前進(jìn),如果有則會(huì)后退并且報(bào)警,進(jìn)而再坐轉(zhuǎn)彎而避免危險(xiǎn),3.5為防撞報(bào)警模塊的程序流程圖。
























                3.5 防撞報(bào)警程序流程圖





file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB98.tmp.png

    4 小車(chē)系統(tǒng)原理圖
硬件電路總設(shè)計(jì)圖如圖4.1所示
file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB99.tmp.jpg

                      4.1 硬件電路原理圖

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB9A.tmp.jpg最終主板PCB圖

file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml\wpsB9B.tmp.png前板PCB
致謝
時(shí)間猶如白駒過(guò)隙,轉(zhuǎn)眼間畢業(yè)論文就要完成了,同時(shí)也意味著我們即將離開(kāi)美好的大學(xué)校園到社會(huì)上去實(shí)現(xiàn)自身的人身價(jià)值了。可以說(shuō)經(jīng)歷了這次的畢業(yè)設(shè)計(jì)和論文真的讓我成長(zhǎng)了好多,從一開(kāi)始拿到題目的迷茫無(wú)助,努力的翻閱資料到后來(lái)完成題目時(shí)的欣悅,這一整個(gè)過(guò)程都?xì)v歷在目,這種將成為大學(xué)生活中一段美好的回憶。
        很早以前就想做一個(gè)智能小車(chē)玩玩,所以在畢業(yè)設(shè)計(jì)選題目的時(shí)候我就直接沒(méi)有考慮其他的項(xiàng)目了,當(dāng)拿到這個(gè)題目的時(shí)候,我的畢業(yè)指導(dǎo)老師著重強(qiáng)調(diào)了對(duì)軟件的學(xué)習(xí)和對(duì)電路的設(shè)計(jì),智能小車(chē)所涉及到的功能模塊比較多并且電路的復(fù)雜度也不低,對(duì)于一個(gè)新手來(lái)說(shuō)從開(kāi)始的設(shè)計(jì)電路到仿真和焊接這一系列的步驟能一氣呵成的完成實(shí)屬不易,但是在指導(dǎo)老師的悉心教導(dǎo)以及自己的努力下終于還算是小有成就的完成了。        
在不斷的努力下我的畢業(yè)設(shè)計(jì)終于完成了。開(kāi)始的時(shí)候,我還以為所謂的畢業(yè)設(shè)計(jì)和畢業(yè)論文只是對(duì)所學(xué)知識(shí)的總結(jié),并非難事,到后來(lái)遇到了好多困難,舉步維艱,之前學(xué)習(xí)的理論知識(shí)太多了,都沒(méi)有用到實(shí)踐中去,真正做起來(lái)的時(shí)候不知道從哪里入手,不知道自己為實(shí)現(xiàn)什么樣的目的要怎么規(guī)劃達(dá)到目的的過(guò)程,
才明白了“紙上得來(lái)終覺(jué)淺,才知此事要躬行”的道理。畢業(yè)設(shè)計(jì)不僅是對(duì)所學(xué)知識(shí)的總結(jié)和應(yīng)用,更是在實(shí)際應(yīng)用中培養(yǎng)自身如何做一項(xiàng)完整事情的培訓(xùn),可以說(shuō)是學(xué)校在畢業(yè)前對(duì)學(xué)生踏入社會(huì)的一次做事能力的培訓(xùn)。
        














              參考文獻(xiàn)
[1] 楊永輝.《現(xiàn)代電子技術(shù)》[J] .智能小車(chē)的多傳感器數(shù)據(jù)融合.2005
[2] 何立民.《單片機(jī)與嵌入式系統(tǒng)應(yīng)用》[J].基于HCS12的小車(chē)智能控制系統(tǒng)設(shè)計(jì).2007
[3] 譚浩強(qiáng).《C程序設(shè)計(jì)》.北京:清華大學(xué)出版社,2005,7
[4] 張立.《電子世界》[J].電動(dòng)小車(chē)的循跡.2004
[5] 武慶生,仇梅.單片機(jī)原理與應(yīng)用(M).電子科技大學(xué)出版,1998,12
[6] 徐科軍.傳感器與檢測(cè)技術(shù)[M].電子工業(yè)出版社,2007
[7] 劉瑞新.單片機(jī)原理及應(yīng)用教程 .機(jī)械工業(yè)出版社,2003,7
[8] 劉湘濤,江世明.單片機(jī)原理與應(yīng)用[M].電子工業(yè)出版社,2006
[9] 何立民.單片機(jī)初級(jí)教程[M].北京航空航天大學(xué)出版社,1999
[10] 熊建云. Protel99 SE.北京:機(jī)械工業(yè)出版社,2007
[11] 鄭郁正.單片機(jī)原理及應(yīng)用.四川大學(xué)出版杜,2003
[12] 盧靜,陳非凡,張高飛等.基于單片機(jī)的無(wú)刷直流電動(dòng)機(jī)控制系統(tǒng)設(shè)計(jì).北京機(jī)械工業(yè)學(xué)院學(xué)報(bào),2002,10
[13] 張燕,曾光宇.光電式傳感器的應(yīng)用與發(fā)展[J].科技情報(bào)開(kāi)發(fā)與經(jīng)濟(jì),2007
[14] 曹開(kāi)田.基于單片機(jī)的紅外遙控密碼鎖的設(shè)計(jì)與實(shí)現(xiàn)[J].應(yīng)用研究,2010
[15] 裴彥純.陳志超.基于單片機(jī)系統(tǒng)的紅外遙控器應(yīng)用[J].現(xiàn)代儀器,2004
[16] 賴麒文.8051單片機(jī)C語(yǔ)言徹底應(yīng)用[M].科學(xué)出版社,2002
[17] 郭天祥.51單片機(jī)C語(yǔ)言教程.北京:電子工業(yè)出版社, 2009













附錄元件清單
位號(hào)
名稱
位號(hào)
名稱
C3
104瓷片電容
X1
7P座子
R6,R7,R24,R25
4.7k色環(huán)電阻
Z2
插件晶振
D1,D2,D3
紅色發(fā)光二極管
R23
10k色環(huán)電阻
D4
綠色發(fā)光二極管
D5
發(fā)光二極管
IC3
插件IC
IC5
LM393插件IC
IC1
單片機(jī)芯
J1,J2
跳線
IR1
紅外接收
P2
4P彎排針
J7
3P排針
R14
15k色環(huán)電阻
C1
電解電容
R15
4.7k色環(huán)電阻
USB1
USB歐姆座
R22
220歐色環(huán)電阻
M1
2P座子
R26
1.5k色環(huán)電阻
RL1
光敏電阻
X1
7P座子
P8
4P排母
R8
220歐色環(huán)電阻
RX1
排阻
C6
104瓷片電容
S1
撥動(dòng)開(kāi)關(guān)
C9
104瓷片電容
S3
按鍵
C14
104瓷片電容
SB1
無(wú)緣蜂鳴器
CA1
電解電容
SM1
數(shù)碼管
M2
2P座子
V1
插件三極管
M3
2P座子
W1
可調(diào)電位器
P1
2P座子
R20
560
RL2
光敏電阻
R21
560
S4
按鍵
R22
560
W2
可調(diào)電位器
R23
560
D6
發(fā)光二極管
R24
560
R17
15k色環(huán)電阻
R25
10K
R27
1.5k色環(huán)電阻
R7
4.7k色環(huán)電阻
2個(gè)
墊圈
R24
4.7k色環(huán)電阻
4個(gè)
通孔銅柱
R25
4.7k色環(huán)電阻
17個(gè)
螺絲
D2
紅色發(fā)光二極管
2個(gè)
輪子防滑圈
D3
紅色發(fā)光二極管
10個(gè)
螺帽
2個(gè)
直流減速電機(jī)
1個(gè)
銅柱
1個(gè)
5號(hào)四節(jié)電池盒
1個(gè)
黑色底板
3個(gè)
2P單頭塑插線
1個(gè)
主板
1個(gè)
7P雙頭塑插線
1個(gè)
電機(jī)固定板
紅外遙控器
2個(gè)
電機(jī)與輪子緊鎖柱
4個(gè)
輪子
1個(gè)
藍(lán)牙模塊
1個(gè)
鐵棒
1個(gè)
超聲波模塊
1個(gè)
緊鎖插
1個(gè)
4P排母

系統(tǒng)程序
#include <reg52.h> //包含51單片機(jī)相關(guān)的頭文件
#include <intrins.h>
sbit LeftLed=P2^0;                        //定義前方左側(cè)指示燈端口
sbit RightLed=P0^7;                       //定義前方右側(cè)指示燈端口
sbit FontLled=P1^7;

sbit LeftIR=P3^5;                         //定義前方左側(cè)紅外探頭端口
sbit RightIR=P3^6;                        //定義前方右側(cè)紅外探頭端口
sbit FontIR=P3^7;                         //定義前方正前方紅外探頭端口

sbit M1A=P0^0;                            //定義左側(cè)電機(jī)驅(qū)動(dòng)A
sbit M1B=P0^1;                            //定義左側(cè)電機(jī)驅(qū)動(dòng)B

sbit M2A=P0^2;                            //定義右側(cè)電機(jī)驅(qū)動(dòng)A
sbit M2B=P0^3;                            //定義右側(cè)電機(jī)驅(qū)動(dòng)B

sbit B1=P0^4;                             //定義語(yǔ)音識(shí)識(shí)別傳感器端口
sbit SB1=P0^6;                            //定義蜂鳴器端口
sbit IRIN=P3^3;                                       //定義紅外接收端口

unsigned char code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,  //定義數(shù)碼管顯示數(shù)據(jù)
                                   0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9
unsigned char code  RecvData[]={0x19,0x46,0x15,0x43,0x44,0x40,0x0D,0x0E,0x00,0x0F};
unsigned char IRCOM[7];
static unsigned int LedFlash;                         //定義閃動(dòng)頻率計(jì)數(shù)變量
bit EnableLight=0;                                    //定義指示燈使能位
#define ShowPort P2                                   //定義數(shù)碼管顯示端口
unsigned char temp = 1;
void tingzhi()
{
   M1A=0;                                   //M1電機(jī)A端初始化為0
   M1B=0;                                   //M1電機(jī)B端初始化為0
   M2A=0;                                   //M2電機(jī)A端初始化為0
   M2B=0;

}

void qianjin()
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=1;                                   
   M2B=0;
}

void houtui()
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=0;                                   
   M2B=1;
}

void zuozhuan()
{
   M1A=0;                                   
   M1B=1;                                   
   M2A=1;                                   
   M2B=0;
}

void youzhuan()
{
   M1A=1;                                   
   M1B=0;                                   
   M2A=0;                                   
   M2B=1;
}

void Delay1ms(unsigned int i)
{
unsigned char j,k;
do{
  j = 10;
  do{
   k = 50;
   do{
    _nop_();
   }while(--k);     
  }while(--j);
}while(--i);

}

void delay_nus(unsigned int i)  //延時(shí):i>=12 ,i的最小延時(shí)單12 us
{
  i=i/10;
  while(--i);
}   
void delay_nms(unsigned int n)  //延時(shí)n ms
{
  n=n+1;
  while(--n)  
  delay_nus(900);         //延時(shí) 1ms,同時(shí)進(jìn)行補(bǔ)償

}  

void delayms(unsigned char x)                         //0.14mS延時(shí)程序
{
  unsigned char i;                                    //定義臨時(shí)變量
  while(x--)                                          //延時(shí)時(shí)間循環(huán)
  {
    for (i = 0; i<13; i++) {}                         //14mS延時(shí)
  }
}

void Delay()                                          //定義延時(shí)子程序
{
  unsigned int DelayTime=30000;                       //定義延時(shí)時(shí)間變量
  while(DelayTime--);                                 //開(kāi)始進(jìn)行延時(shí)循環(huán)
  return;                                             //子程序返回
}
void ControlCar(unsigned char ConType)    //定義電機(jī)控制子程序
{

  tingzhi();
switch(ConType)                          //判斷用戶設(shè)定電機(jī)形式
{
  case 1:  //前進(jìn)                         //判斷用戶是否選擇形式1
  {
    //tingzhi();                                                      //進(jìn)入前進(jìn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        //Delay1ms(50);
        LeftLed = 0 ;
        qianjin();
    break;
  }
  case 2: //后退                          //判斷用戶是否選擇形式2
  {
   // tingzhi();                                                              //進(jìn)入后退之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
   // Delay1ms(50);
    LeftLed = 1 ;         
        houtui();                                //M2電機(jī)反轉(zhuǎn)
    break;
  }
  case 3: //左轉(zhuǎn)                          //判斷用戶是否選擇形式3
  {
     //tingzhi();                                                                  //進(jìn)入左轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        // Delay1ms(50);
         zuozhuan();                               //M2電機(jī)正轉(zhuǎn)
         break;
  }
  case 4: //右轉(zhuǎn)                          //判斷用戶是否選擇形式4
  {
   // tingzhi();                                                                  //進(jìn)入右轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
//        Delay1ms(50);
        youzhuan();                                //M1電機(jī)正轉(zhuǎn)
                                          //M2電機(jī)反轉(zhuǎn)
        break;
  }
  case 8: //停止                          //判斷用戶是否選擇形式8
  {
    tingzhi();
        break;                                //退出當(dāng)前選擇
  }
}
}

void ControlCar_yaokong(unsigned char ConType)    //定義電機(jī)控制子程序        (紅外遙控單獨(dú)設(shè)置一個(gè) switch  case  語(yǔ)句  )
{

  tingzhi();
switch(ConType)                          //判斷用戶設(shè)定電機(jī)形式
{
  case 1:  //前進(jìn)                         //判斷用戶是否選擇形式1
  {
    tingzhi();                                                      //進(jìn)入前進(jìn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
        Delay1ms(150);
        LeftLed = 0 ;
        qianjin();
    break;
  }
  case 2: //后退                          //判斷用戶是否選擇形式2
  {
    tingzhi();                                                              //進(jìn)入后退之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
    Delay1ms(150);
    LeftLed = 1 ;         
        houtui();                                //M2電機(jī)反轉(zhuǎn)
    break;
  }
  case 3: //左轉(zhuǎn)                          //判斷用戶是否選擇形式3
  {
     tingzhi();                                                                  //進(jìn)入左轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
         Delay1ms(150);
         zuozhuan();                               //M2電機(jī)正轉(zhuǎn)
         break;
  }
  case 4: //右轉(zhuǎn)                          //判斷用戶是否選擇形式4
  {
     tingzhi();                                                                  //進(jìn)入右轉(zhuǎn)之前 先停止一段時(shí)間  防止電機(jī)反向電壓沖擊主板 導(dǎo)致系統(tǒng)復(fù)位
         Delay1ms(150);
     youzhuan();                                //M1電機(jī)正轉(zhuǎn)  //M2電機(jī)反轉(zhuǎn)
          break;
  }
  case 8: //停止                          //判斷用戶是否選擇形式8
  {
    tingzhi();
        break;                                //退出當(dāng)前選擇
  }
}
}
void Robot_Avoidance()                   //機(jī)器人避障子程序
{

   LeftLed=LeftIR;                        //前方左側(cè)指示燈指示出前方左側(cè)紅外探頭狀態(tài)
   RightLed=RightIR;                      //前方右側(cè)指示燈指示出前方右側(cè)紅外探頭狀態(tài)
   FontLled= FontIR;
   SB1=FontIR;

    if(FontIR == 0)                          //如果前面避障傳感器檢測(cè)到障礙物
   {
      ControlCar(8);                       //停止
      delay_nms (300);                                           //停止300MS   防止電機(jī)反相電壓沖擊  導(dǎo)致系統(tǒng)復(fù)位
          ControlCar(2);                                           //后退  
          delay_nms (1000);                                           //后退1500MS  
          ControlCar(3);                                           //
          delay_nms (1800);        
  }
   else
   {
      ControlCar(1);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }
    ControlCar(1);
}
//機(jī)器人循跡子程序
void Robot_Traction()                     //機(jī)器人循跡子程序
{
   LeftLed=LeftIR;                        //前方左側(cè)指示燈指示出前方左側(cè)紅外探頭狀態(tài)
   RightLed=RightIR;                      //前方右側(cè)指示燈指示出前方右側(cè)紅外探頭狀態(tài)
   FontLled= FontIR;
   SB1=LeftIR;
   if(LeftIR == 0 && RightIR == 0)    //三個(gè)紅外檢測(cè)到黑線,就前進(jìn)
   {
      ControlCar(1);                      //左側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向右轉(zhuǎn)一定的角度
      delay_nms (10);
   }

   else if(LeftIR == 0 && RightIR == 1)
   {
      ControlCar(3);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }

   else if(LeftIR == 1 && RightIR == 0)
   {
      ControlCar(4);                      //右側(cè)沒(méi)有信號(hào)時(shí),開(kāi)始向左轉(zhuǎn)一定的角度
      delay_nms (10);
   }
    ControlCar(8);
}

void main()                               //主程序入口
{

  bit RunFlag=0;                          //定義小車(chē)運(yùn)行標(biāo)志位
  LedFlash=3000;                                       //對(duì)閃燈數(shù)據(jù)進(jìn)行初始化
  //EX1=1;                                               //同意開(kāi)啟外部中斷1
  IT1=1;                                               //設(shè)定外部中斷1為低邊緣觸發(fā)類型
  EA=1;                                                //總中斷開(kāi)啟
  ControlCar(8);                          //初始化小車(chē)運(yùn)行狀態(tài)
  while(1)                                //程序主循環(huán)
  {
             if(P3_2 == 0)
          {
           delay_nms(10);
           if(P3_2 == 0)
           {
                     temp++;
                  while(!P3_2);
           }
          }
          if(temp > 3)
          {
          temp = 1;
          }
          switch(temp)
          {
                   case 1:        ShowPort = LedShowData[1];Robot_Traction();EX1 = 0;break;
                case 2: ShowPort = LedShowData[2];Robot_Avoidance();EX1 = 0;break;
                case 3: ShowPort = LedShowData[3];EX1 = 1;break;
          }
  }
}
//----------紅外遙控-------------------------------------------------------------
void IR_IN() interrupt 2 using 0                      //定義INT2外部中斷函數(shù)
{
  unsigned char j,k,N=0;                              //定義臨時(shí)接收變量

  EX1 = 0;                                            //關(guān)閉外部中斷,防止再有信號(hào)到達(dá)   
  delayms(15);                                        //延時(shí)時(shí)間,進(jìn)行紅外消抖
  if (IRIN==1)                                        //判斷紅外信號(hào)是否消失
  {  
     EX1 =1;                                          //外部中斷開(kāi)
         return;                                          //返回
  }

  while (!IRIN)                                       //IR變?yōu)楦唠娖剑^(guò)9ms的前導(dǎo)低電平信號(hào)。
  {
      delayms(1);                                     //延時(shí)等待
  }

  for (j=0;j<4;j++)                                   //采集紅外遙控器數(shù)據(jù)
  {
    for (k=0;k<8;k++)                                 //分次采集8位數(shù)據(jù)
    {
       while (IRIN)                                   //IR 變?yōu)榈碗娖剑^(guò)4.5ms的前導(dǎo)高電平信號(hào)。
       {
         delayms(1);                                  //延時(shí)等待
       }

       while (!IRIN)                                  //IR 變?yōu)楦唠娖?/font>
       {
         delayms(1);                                  //延時(shí)等待
       }

       while (IRIN)                                   //計(jì)算IR高電平時(shí)長(zhǎng)
       {
         delayms(1);                                  //延時(shí)等待
         N++;                                         //計(jì)數(shù)器加加
         if (N>=30)                                   //判斷計(jì)數(shù)器累加值
             {
           EX1=1;                                     //打開(kāi)外部中斷功能
               return;                                    //返回
         }                  
       }

      IRCOM[j]=IRCOM[j] >> 1;                         //進(jìn)行數(shù)據(jù)位移操作并自動(dòng)補(bǔ)零

      if (N>=8)                                       //判斷數(shù)據(jù)長(zhǎng)度
      {
         IRCOM[j] = IRCOM[j] | 0x80;                  //數(shù)據(jù)最高位補(bǔ)1
      }
      N=0;                                            //清零位數(shù)計(jì)錄器
    }
  }

  if (IRCOM[2]!=~IRCOM[3])                            //判斷地址碼是否相同
  {
     EX1=1;                                           //打開(kāi)外部中斷
     return;                                          //返回
  }

  for(j=0;j<10;j++)                                   //循環(huán)進(jìn)行鍵碼解析
   {
      if(IRCOM[2]==RecvData[j])                       //進(jìn)行鍵位對(duì)應(yīng)
      {
       // ControlCar(j);
                ControlCar_yaokong(j);                               //數(shù)碼管顯示相應(yīng)數(shù)碼
      }
   }
   EX1 = 1;                                           //外部中斷開(kāi)
}
//-------------------------------------------------------------------------------------------------------

藍(lán)牙模塊程序:
#include<reg52.h>

        //HL-1小車(chē)驅(qū)動(dòng)接線定義
    #define Left_moto_go      {P0_0=1,P0_1=0;}    //左邊電機(jī)向前走
        #define Left_moto_back    {P0_0=0,P0_1=1;}    //左邊電機(jī)向后轉(zhuǎn)
        #define Left_moto_Stop    {P0_0=0,P0_1=0;}    //左邊電機(jī)停轉(zhuǎn)                     
        #define Right_moto_go     {P0_2=1,P0_3=0;}        //右邊電機(jī)向前走
        #define Right_moto_back   {P0_2=0,P0_3=1;}        //右邊電機(jī)向后走
        #define Right_moto_Stop   {P0_2=0,P0_3=0;}        //右邊電機(jī)停轉(zhuǎn)   

        #define left     'C'
    #define right    'D'
        #define up       'A'
    #define down     'B'
        #define stop     'F'

        #define uint    unsigned int                          //重定義無(wú)符號(hào)整數(shù)類型
    #define uchar   unsigned char                         //重定義無(wú)符號(hào)字符類型

        char code str[] =  "收到指令,向前!\n";
        char code str1[] = "收到指令,向后!\n";
        char code str2[] = "收到指令,向左!\n";
        char code str3[] = "收到指令,向右!\n";
        char code str4[] = "收到指令,停止!\n";

        bit  flag_REC=0;
        bit  flag    =0;  


        unsigned char  i=0;
        unsigned char  dat=0;
    unsigned char  buff[5]=0; //接收緩沖字節(jié)
        uchar code  LedShowData[]={0x03,0x9F,0x25,0x0D,0x99,  //定義數(shù)碼管顯示數(shù)據(jù)
                            0x49,0x41,0x1F,0x01,0x19};//0,1,2,3,4,5,6,7,8,9

        #define ShowPort P2                                   //定義數(shù)碼管顯示端口

/************************************************************************/        
//延時(shí)函數(shù)        
   void delay(unsigned int k)
{   
     unsigned int x,y;
         for(x=0;x<k;x++)
           for(y=0;y<2000;y++);
}

/************************************************************************/
//字符串發(fā)送函數(shù)
          void send_str( )
                   // 傳送字串
    {
            unsigned char i = 0;
            while(str != '\0')
           {
                SBUF = str;
                while(!TI);                                // 等特?cái)?shù)據(jù)傳送
                TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }        
    }
                  void send_str1( )
                   // 傳送字串
    {
            unsigned char i = 0;
            while(str1 != '\0')
           {
                SBUF = str1;
                while(!TI);                                // 等特?cái)?shù)據(jù)傳送
                TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }        
    }        

                          void send_str2( )
                   // 傳送字串
    {
            unsigned char i = 0;
            while(str2 != '\0')
           {
                SBUF = str2;
                while(!TI);                                // 等特?cái)?shù)據(jù)傳送
                TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }        
    }        

                          void send_str3()
                   // 傳送字串
    {
            unsigned char i = 0;
            while(str3 != '\0')
           {
                SBUF = str3;
                while(!TI);                                // 等特?cái)?shù)據(jù)傳送
                TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }        
    }        

              void send_str4()
                   // 傳送字串
    {
            unsigned char i = 0;
            while(str4 != '\0')
           {
                SBUF = str4;
                while(!TI);                                // 等特?cái)?shù)據(jù)傳送
                TI = 0;                                        // 清除數(shù)據(jù)傳送標(biāo)志
                i++;                                        // 下一個(gè)字符
           }        
    }        


/************************************************************************/
//前速前進(jìn)
     void  run(void)
{

         Left_moto_go ;   //左電機(jī)往前走
         Right_moto_go ;  //右電機(jī)往前走
}

//前速后退
     void  backrun(void)
{

         Left_moto_back ;   //左電機(jī)往后走
         Right_moto_back ;  //右電機(jī)往后走
}

//左轉(zhuǎn)
     void  leftrun(void)
{


          Left_moto_go ;   //左電機(jī)往前走
         Right_moto_back ;  //右電機(jī)往后走
}

//右轉(zhuǎn)
     void  rightrun(void)
{


         Left_moto_back ;   //左電機(jī)往前走
         Right_moto_go ;  //右電機(jī)往前走
}
//STOP
     void  stoprun(void)
{

         Left_moto_Stop ;   //左電機(jī)往前走
         Right_moto_Stop ;  //右電機(jī)往前走
}
/************************************************************************/
void sint() interrupt 4          //中斷接收3個(gè)字節(jié)
{

    if(RI)                         //是否接收中斷
    {
       RI=0;
       dat=SBUF;
       if(dat=='O'&&(i==0)) //接收數(shù)據(jù)第一幀
         {
            buff=dat;
            flag=1;        //開(kāi)始接收數(shù)據(jù)
         }
       else
      if(flag==1)
     {
      i++;
      buff=dat;
      if(i>=2)
      {i=0;flag=0;flag_REC=1 ;}  // 停止接收
     }
         }
}
/*********************************************************************/                 
/*--主函數(shù)--*/
        void main(void)
{
        TMOD=0x20;  
    TH1=0xFd;                     //11.0592M晶振,9600波特率
    TL1=0xFd;
    SCON=0x50;  
    PCON=0x00;
    TR1=1;
        ES=1;   
    EA=1;   

        while(1)                                                        /*無(wú)限循環(huán)*/
        {
          if(flag_REC==1)                                    //
           {
                flag_REC=0;
                if(buff[0]=='O'&&buff[1]=='N')        //第一個(gè)字節(jié)為O,第二個(gè)字節(jié)為N,第三個(gè)字節(jié)為控制碼
                switch(buff[2])
             {
                      case up :                                                    // 前進(jìn)
                          send_str( );
                          run();
                          ShowPort=LedShowData[1];
                          break;
                      case down:                                                // 后退
                           send_str1( );
                          backrun();
                          ShowPort=LedShowData[2];
                          break;
                      case left:                                                // 左轉(zhuǎn)
                           send_str3( );
                          leftrun();
                          ShowPort=LedShowData[3];  
                          break;
                      case right:                                                // 右轉(zhuǎn)
                          send_str2( );
                          rightrun();
                          ShowPort=LedShowData[4];
                          break;
                      case stop:                                                // 停止
                           send_str4( );
                          stoprun();
                          ShowPort=LedShowData[0];
                          break;

             }


         }
        }
}        
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区在线视频 | 成人无遮挡毛片免费看 | 国产免费国产 | 精品一区二区三区免费视频 | 国产片侵犯亲女视频播放 | 国产精品久久久久久久久久久免费看 | 欧美亚洲国语精品一区二区 | 色接久久| 91视频一区二区 | 少妇精品亚洲一区二区成人 | 日韩视频在线播放 | 在线视频一区二区三区 | 亚洲精品不卡 | 欧美男人亚洲天堂 | 一区二区三区四区av | 日韩www| 国产精品国产a级 | 亚洲男人天堂2024 | 国产精品久久久久久久久久久免费看 | 亚洲日日 | 亚洲精品久久 | 美人の美乳で授乳プレイ | 亚洲一区二区三区视频 | 国产精品入口 | 亚洲精品日韩一区二区电影 | 国产女人叫床高潮大片免费 | 天天躁日日躁xxxxaaaa | 精品国产乱码久久久久久蜜退臀 | 午夜男人免费视频 | 亚洲国产一区二区三区在线观看 | 免费在线看a | 欧美综合视频 | 国产一区二区久久 | 欧美成人一区二免费视频软件 | 欧美极品在线播放 | 亚洲综合色视频在线观看 | 欧美成人第一页 | 中文字幕av亚洲精品一部二部 | 亚洲精品久久久蜜桃网站 | 精品美女视频在线观看免费软件 | 亚洲精品一区二区三区蜜桃久 |