




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄摘要………………………2ABSTRACT…………………2第一章緒論……………31.1智能小車的意義和作用……………31.2智能小車的現(xiàn)狀……………………3第二章方案設(shè)計(jì)與論證………………42.1主控系統(tǒng) …………42.2電機(jī)驅(qū)動(dòng)模塊………………………42.3循跡模塊 …………62.4避障模塊 …………72.5機(jī)械系統(tǒng) …………72.6電源模塊 …………8第三章硬件設(shè)計(jì)………………………83.1總體設(shè)計(jì) …………83.2驅(qū)動(dòng)電路 …………93.3信號(hào)檢測(cè)模塊………………………103.4主控電路 …………11第四章軟件設(shè)計(jì) ……………………124.1主程序模塊…………124.2電機(jī)驅(qū)動(dòng)程序………………………124.3循跡模塊……………134.4避障模塊……………15第五章制作安裝與調(diào)試………………18結(jié)束語……………………18致謝………………………19參考文獻(xiàn)…………………19智能循跡避障小車肖維物理與電子信息學(xué)院電子信息工程專業(yè)2006級(jí)9班指導(dǎo)教師:劉漢奎摘要:利用紅外對(duì)管檢測(cè)黑線與障礙物,并以STC89C52單片機(jī)為控制芯片控制電動(dòng)小汽車的速度及轉(zhuǎn)向,從而實(shí)現(xiàn)自動(dòng)循跡避障的功能。其中小車驅(qū)動(dòng)由L298N驅(qū)動(dòng)電路完成,速度由單片機(jī)輸出的PWM波控制。關(guān)鍵詞:智能小車;STC89C52單片機(jī);L298N;紅外對(duì)管Intelligenttrackingandobstacle-avoidcarXiaoWeiSchoolofPhysicsandElectronicInformation,Grade2006Class9,Instructor:LiuHankuiAbstract:Basedinfrareddetectionofblacklinesandtheroadobstacles,anduseaSTC89C52MCUasthecontrollingcoreforthespeedanddirection,Aelectronicdrived,whichcanautomatictrackandavoidtheobstacle,wasdesignedandfabricated.Inwhich,thecarisdrivedbytheL298Ncircuit,itsspeediscontrolledbytheoutputPWMsignalfromtheSTC89C52.Keywords:SmartCar;STC89C52MCU;L298N;InfraredEmittingDiode第一章緒論1.1智能小車的意義和作用自第一臺(tái)工業(yè)機(jī)器人誕生以來,機(jī)器人的發(fā)展已經(jīng)遍及機(jī)械、電子、冶金、交通、宇航、國(guó)防等領(lǐng)域。近年來機(jī)器人的智能水平不斷提高,并且迅速地改變著人們的生活方式。人們?cè)诓粩嗵接?、改造、認(rèn)識(shí)自然的過程中,制造能替代人勞動(dòng)的機(jī)器一直是人類的夢(mèng)想。隨著科學(xué)技術(shù)的發(fā)展,機(jī)器人的感覺傳感器種類越來越多,其中視覺傳感器成為自動(dòng)行走和駕駛的重要部件。視覺的典型應(yīng)用領(lǐng)域?yàn)樽灾魇街悄軐?dǎo)航系統(tǒng),對(duì)于視覺的各種技術(shù)而言圖像處理技術(shù)已相當(dāng)發(fā)達(dá),而基于圖像的理解技術(shù)還很落后,機(jī)器視覺需要通過大量的運(yùn)算也只能識(shí)別一些結(jié)構(gòu)化環(huán)境簡(jiǎn)單的目標(biāo)。視覺傳感器的核心器件是攝像管或CCD,目前的CCD已能做到自動(dòng)聚焦。但CCD傳感器的價(jià)格、體積和使用方式上并不占優(yōu)勢(shì),因此在不要求清晰圖像只需要粗略感覺的系統(tǒng)中考慮使用接近覺傳感器是一種實(shí)用有效的方法。機(jī)器人要實(shí)現(xiàn)自動(dòng)導(dǎo)引功能和避障功能就必須要感知導(dǎo)引線和障礙物,感知導(dǎo)引線相當(dāng)給機(jī)器人一個(gè)視覺功能。避障控制系統(tǒng)是基于自動(dòng)導(dǎo)引小車(AVG—auto-guidevehicle)系統(tǒng),基于它的智能小車實(shí)現(xiàn)自動(dòng)識(shí)別路線,判斷并自動(dòng)避開障礙,選擇正確的行進(jìn)路線。使用傳感器感知路線和障礙并作出判斷和相應(yīng)的執(zhí)行動(dòng)作。該智能小車可以作為機(jī)器人的典型代表。它可以分為三大組成部分:傳感器檢測(cè)部分、執(zhí)行部分、CPU。機(jī)器人要實(shí)現(xiàn)自動(dòng)避障功能,還可以擴(kuò)展循跡等功能,感知導(dǎo)引線和障礙物。可以實(shí)現(xiàn)小車自動(dòng)識(shí)別路線,選擇正確的行進(jìn)路線,并檢測(cè)到障礙物自動(dòng)躲避。基于上述要求,傳感檢測(cè)部分考慮到小車一般不需要感知清晰的圖像,只要求粗略感知即可,所以可以舍棄昂貴的CCD傳感器而考慮使用價(jià)廉物美的紅外反射式傳感器來充當(dāng)。智能小車的執(zhí)行部分,是由直流電機(jī)來充當(dāng)?shù)模饕刂菩≤嚨男羞M(jìn)方向和速度。單片機(jī)驅(qū)動(dòng)直流電機(jī)一般有兩種方案:第一,勿需占用單片機(jī)資源,直接選擇有PWM功能的單片機(jī),這樣可以實(shí)現(xiàn)精確調(diào)速;第二,可以由軟件模擬PWM輸出調(diào)制,需要占用單片機(jī)資源,難以精確調(diào)速,但單片機(jī)型號(hào)的選擇余地較大??紤]到實(shí)際情況,本文選擇第二種方案。CPU使用STC89C52單片機(jī),配合軟件編程實(shí)現(xiàn)。1.2智能小車的現(xiàn)狀現(xiàn)智能小車發(fā)展很快,從智能玩具到其它各行業(yè)都有實(shí)質(zhì)成果。其基本可實(shí)現(xiàn)循跡、避障、檢測(cè)貼片、尋光入庫(kù)、避崖等基本功能,這幾節(jié)的電子設(shè)計(jì)大賽智能小車又在向聲控系統(tǒng)發(fā)展。比較出名的飛思卡爾智能小車更是走在前列。我此次的設(shè)計(jì)主要實(shí)現(xiàn)循跡避障這兩個(gè)功能。第二章方案設(shè)計(jì)與論證根據(jù)要求,確定如下方案:在現(xiàn)有玩具電動(dòng)車的基礎(chǔ)上,加裝光電檢測(cè)器,實(shí)現(xiàn)對(duì)電動(dòng)車的速度、位置、運(yùn)行狀況的實(shí)時(shí)測(cè)量,并將測(cè)量數(shù)據(jù)傳送至單片機(jī)進(jìn)行處理,然后由單片機(jī)根據(jù)所檢測(cè)的各種數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車的智能控制。這種方案能實(shí)現(xiàn)對(duì)電動(dòng)車的運(yùn)動(dòng)狀態(tài)進(jìn)行實(shí)時(shí)控制,控制靈活、可靠,精度高,可滿足對(duì)系統(tǒng)的各項(xiàng)要求。2.1主控系統(tǒng)根據(jù)設(shè)計(jì)要求,我認(rèn)為此設(shè)計(jì)屬于多輸入量的復(fù)雜程序控制問題。據(jù)此,擬定了以下兩種方案并進(jìn)行了綜合的比較論證,具體如下:方案一:選用一片CPLD(如EPM7128LC84-15)作為系統(tǒng)的核心部件,實(shí)現(xiàn)控制與處理的功能。CPLD具有速度快、編程容易、資源豐富、開發(fā)周期短等優(yōu)點(diǎn),可利用VHDL語言進(jìn)行編寫開發(fā)。但CPLD在控制上較單片機(jī)有較大的劣勢(shì)。同時(shí),CPLD的處理速度非常快,而小車的行進(jìn)速度不可能太高,那么對(duì)系統(tǒng)處理信息的要求也就不會(huì)太高,在這一點(diǎn)上,MCU就已經(jīng)可以勝任了。若采用該方案,必將在控制上遇到許許多多不必要增加的難題。為此,我們不采用該種方案,進(jìn)而提出了第二種設(shè)想。方案二:采用單片機(jī)作為整個(gè)系統(tǒng)的核心,用其控制行進(jìn)中的小車,以實(shí)現(xiàn)其既定的性能指標(biāo)。充分分析我們的系統(tǒng),其關(guān)鍵在于實(shí)現(xiàn)小車的自動(dòng)控制,而在這一點(diǎn)上,單片機(jī)就顯現(xiàn)出來它的優(yōu)勢(shì)——控制簡(jiǎn)單、方便、快捷。這樣一來,單片機(jī)就可以充分發(fā)揮其資源豐富、有較為強(qiáng)大的控制功能及可位尋址操作功能、價(jià)格低廉等優(yōu)點(diǎn)。因此,這種方案是一種較為理想的方案。針對(duì)本設(shè)計(jì)特點(diǎn)——多開關(guān)量輸入的復(fù)雜程序控制系統(tǒng),需要擅長(zhǎng)處理多開關(guān)量的標(biāo)準(zhǔn)單片機(jī),而不能用精簡(jiǎn)I/O口和程序存儲(chǔ)器的小體積單片機(jī),D/A、A/D功能也不必選用。根據(jù)這些分析,我選定了P89C51RA單片機(jī)作為本設(shè)計(jì)的主控裝置,51單片機(jī)具有功能強(qiáng)大的位操作指令,I/O口均可按位尋址,程序空間多達(dá)8K,對(duì)于本設(shè)計(jì)也綽綽有余,更可貴的是51單片機(jī)價(jià)格非常低廉。在綜合考慮了傳感器、兩部電機(jī)的驅(qū)動(dòng)等諸多因素后,我們決定采用一片單片機(jī),充分利用STC89C52單片機(jī)的資源。2.2電機(jī)驅(qū)動(dòng)模塊方案一:采用繼電器對(duì)電動(dòng)機(jī)的開或關(guān)進(jìn)行控制,通過開關(guān)的切換對(duì)小車的速度進(jìn)行調(diào)整.此方案的優(yōu)點(diǎn)是電路較為簡(jiǎn)單,缺點(diǎn)是繼電器的響應(yīng)時(shí)間慢,易損壞,壽命較短,可靠性不高。方案二:采用電阻網(wǎng)絡(luò)或數(shù)字電位器調(diào)節(jié)電動(dòng)機(jī)的分壓,從而達(dá)到分壓的目的。但電阻網(wǎng)絡(luò)只能實(shí)現(xiàn)有級(jí)調(diào)速,而數(shù)字電阻的元器件價(jià)格比較昂貴。更主要的問題在于一般的電動(dòng)機(jī)電阻很小,但電流很大,分壓不僅回降低效率,而且實(shí)現(xiàn)很困難。方案三:采用功率三極管作為功率放大器的輸出控制直流電機(jī)。線性型驅(qū)動(dòng)的電路結(jié)構(gòu)和原理簡(jiǎn)單,加速能力強(qiáng),采用由達(dá)林頓管組成的H型橋式電路(如圖2.1)。用單片機(jī)控制達(dá)林頓管使之工作在占空比可調(diào)的開關(guān)狀態(tài)下,精確調(diào)整電動(dòng)機(jī)轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高,H型橋式電路保證了簡(jiǎn)單的實(shí)現(xiàn)轉(zhuǎn)速和方向的控制,電子管的開關(guān)速度很快,穩(wěn)定性也極強(qiáng),是一種廣泛采用的PWM調(diào)速技術(shù)?,F(xiàn)市面上有很多此種芯片,我選用了L298N(如圖2.2)。這種調(diào)速方式有調(diào)速特性優(yōu)良、調(diào)整平滑、調(diào)速范圍廣、過載能力大,能承受頻繁的負(fù)載沖擊,還可以實(shí)現(xiàn)頻繁的無級(jí)快速啟動(dòng)、制動(dòng)和反轉(zhuǎn)等優(yōu)點(diǎn)。因此決定采用使用功率三極管作為功率放大器的輸出控制直流電機(jī)。圖2.1H橋式電路圖2.2L298N2.3循跡模塊方案一:采用簡(jiǎn)易光電傳感器結(jié)合外圍電路探測(cè),但實(shí)際效果并不理想,對(duì)行駛過程中的穩(wěn)定性要求很高,且誤測(cè)幾率較大、易受光線環(huán)境和路面介質(zhì)影響。在使用過程極易出現(xiàn)問題,而且容易因?yàn)樵摬考斐烧麄€(gè)系統(tǒng)的不穩(wěn)定。故最終未采用該方案。方案二:采用兩只紅外對(duì)管(如圖2.3),分別置于小車車身前軌道的兩側(cè),根據(jù)兩只光電開關(guān)接受到白線與黑線的情況來控制小車轉(zhuǎn)向來調(diào)整車向,測(cè)試表明,只要合理安裝好兩只光電開關(guān)的位置就可以很好的實(shí)現(xiàn)循跡的功能。(參考文獻(xiàn)[3])方案三:采用三只紅外對(duì)管,一只置于軌道中間,兩只置于軌道外側(cè),當(dāng)小車脫離軌道時(shí),即當(dāng)置于中間的一只光電開關(guān)脫離軌道時(shí),等待外面任一只檢測(cè)到黑線后,做出相應(yīng)的轉(zhuǎn)向調(diào)整,直到中間的光電開關(guān)重新檢測(cè)到黑線(即回到軌道)再恢復(fù)正向行駛?,F(xiàn)場(chǎng)實(shí)測(cè)表明,小車在尋跡過程中有一定的左右搖擺不定,雖然可以正確的循跡但其成本與穩(wěn)定性都次與第二種方案。通過比較,我選取第二種方案來實(shí)現(xiàn)循跡。圖2.3紅外對(duì)管2.4避障模塊方案一:采用一只紅外對(duì)管置于小車中央。其安裝簡(jiǎn)易,也可以檢測(cè)到障礙物的存在,但難以確定小車在水平方向上是否會(huì)與障礙物相撞,也不易讓小車做出精確的轉(zhuǎn)向反應(yīng)。方案二:采用二只紅外對(duì)管分別置于小車的前端兩側(cè),方向與小車前進(jìn)方向平行,對(duì)小車與障礙物相對(duì)距離和方位能作出較為準(zhǔn)確的判別和及時(shí)反應(yīng)。但此方案過于依賴硬件、成本較高、缺乏創(chuàng)造性,而且置于小車左方的紅外對(duì)管用到的幾率很小,所以最終未采用。方案三:采用一只紅外對(duì)管置于小車右側(cè)。通過測(cè)試此種方案就能很好的實(shí)現(xiàn)小車避開障礙物,且充分的利用資源而不浪費(fèi)。(參考文獻(xiàn)[3])通過比較我采用方案三。2.5機(jī)械系統(tǒng)本題目要求小車的機(jī)械系統(tǒng)穩(wěn)定、靈活、簡(jiǎn)單,而三輪運(yùn)動(dòng)系統(tǒng)具備以上特點(diǎn)。驅(qū)動(dòng)部分:由于玩具汽車的直流電機(jī)功率較小,而小車上裝有電池、電機(jī)、電子器件等,使得電機(jī)負(fù)擔(dān)較重。為使小車能夠順利啟動(dòng),且運(yùn)動(dòng)平穩(wěn),在直流電機(jī)和輪車軸之間加裝了三級(jí)減速齒輪。電池的安裝:將電池放置在車體的電機(jī)前后位置,降低車體重心,提高穩(wěn)定性,同時(shí)可增加驅(qū)動(dòng)輪的抓地力,減小輪子空轉(zhuǎn)所引起的誤差。簡(jiǎn)單,而三輪運(yùn)動(dòng)系統(tǒng)具備以上特點(diǎn)。2.6電源模塊方案一:采用實(shí)驗(yàn)室有線電源通過穩(wěn)壓芯片供電,其優(yōu)點(diǎn)是可穩(wěn)定的提供5V電壓,但占用資源過大。方案二:采用4支1.5V電池單電源供電,但6V的電壓太小不能同時(shí)給單片機(jī)與與電機(jī)供電。方案三:采用8支1.5V電池雙電源分別給單片機(jī)與電機(jī)供電可解決方案二的問題且能讓小車完成其功能。所以,我選擇了方案三來實(shí)現(xiàn)供電。第三章硬件設(shè)計(jì)3.1總體設(shè)計(jì)智能小車采用前輪驅(qū)動(dòng),前輪左右兩邊各用一個(gè)電機(jī)驅(qū)動(dòng),調(diào)制前面兩個(gè)輪子的轉(zhuǎn)速起停從而達(dá)到控制轉(zhuǎn)向的目的,后輪是萬象輪,起支撐的作用。將循跡光電對(duì)管分別裝在車體下的左右。當(dāng)車身下左邊的傳感器檢測(cè)到黑線時(shí),主控芯片控制左輪電機(jī)停止,車向左修正,當(dāng)車身下右邊傳感器檢測(cè)到黑線時(shí),主控芯片控制右輪電機(jī)停止,車向右修正。避障的原理和循線一樣,在車身右邊裝一個(gè)光電對(duì)管,當(dāng)其檢測(cè)到障礙物時(shí),主控芯片給出信號(hào)報(bào)警并控制車子倒退,轉(zhuǎn)向,從而避開障礙物。Stc89c52Stc89c52時(shí)鐘電路復(fù)位電路報(bào)警電路電機(jī)驅(qū)動(dòng)避障紅外對(duì)管圖3.1主板設(shè)計(jì)框圖表3.1元件清單元件數(shù)量元件數(shù)量元件數(shù)量直流電機(jī)2只電阻若干集成電路芯片若干單片機(jī)1塊二極管若干電容若干紅外對(duì)管3只蜂鳴器1只電位器若干12M晶振1只杜邦線若干玩具小車1個(gè)排針若干3.2驅(qū)動(dòng)電路(參考文獻(xiàn)[4])電機(jī)驅(qū)動(dòng)一般采用H橋式驅(qū)動(dòng)電路,L298N內(nèi)部集成了H橋式驅(qū)動(dòng)電路,從而可以采用L298N電路來驅(qū)動(dòng)電機(jī)。通過單片機(jī)給予L298N電路PWM信號(hào)來控制小車的速度,起停。其引腳圖如3.2,驅(qū)動(dòng)原理圖如圖3.3。圖3.2L298N引腳圖圖3.3電機(jī)驅(qū)動(dòng)電路3.3信號(hào)檢測(cè)模塊小車循跡原理是小車在畫有黑線的白紙“路面”上行駛,由于黑線和白紙對(duì)光線的反射系數(shù)不同,可根據(jù)接收到的反射光的強(qiáng)弱來判斷“道路”—黑線。筆者在該模塊中利用了簡(jiǎn)單、應(yīng)用也比較普遍的檢測(cè)方法——紅外探測(cè)法。
紅外探測(cè)法,即利用紅外線在不同顏色的物理表面具有不同的反射性質(zhì)的特點(diǎn)。在小車行駛過程中不斷地向地面發(fā)射紅外光,當(dāng)紅外光遇到白色地面時(shí)發(fā)生漫發(fā)射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,則小車上的接收管接收不到信號(hào),再通過LM324作比較器來采集高低電平,從而實(shí)現(xiàn)信號(hào)的檢測(cè)。避障亦是此原理。電路圖如圖3.4。市面上有很多紅外傳感器,在這里我選用TCRT5000型光電對(duì)管。圖3.4循跡原理圖3.4主控電路本模塊主要是對(duì)采集信號(hào)進(jìn)行分析,同時(shí)給出PWM波控制電機(jī)速度,起停。以及再檢測(cè)到障礙報(bào)警等作用。其電路圖如圖5。圖3.5主控電路第四章軟件設(shè)計(jì)4.1啟動(dòng)循跡是否檢測(cè)到停止線停止是否檢測(cè)到障礙NY避障YN主程序框圖啟動(dòng)循跡是否檢測(cè)到停止線停止是否檢測(cè)到障礙NY避障YN圖4.1主程序框圖4.2電機(jī)驅(qū)動(dòng)程序voidgoahead(){s1=1;s2=0;s3=1;s4=0;}voidgoback(){s1=0;s2=1;s3=0;s4=1;}voidturnleft(){s3=1;s4=0;}voidturnright(){s1=1;s2=0;}voidstop(){en1=0;en2=0;}4.3循跡模塊開始前進(jìn)掃描I/O口,是否檢測(cè)到黑線Y左邊右邊左轉(zhuǎn)右轉(zhuǎn)N循跡框圖:開始前進(jìn)掃描I/O口,是否檢測(cè)到黑線Y左邊右邊左轉(zhuǎn)右轉(zhuǎn)N圖4.2循跡框圖循跡程序:voidxunji(){if((left_red==1)&(right_red==1)){en1=1;en2=1;goahead();delay(150);en1=0;en2=0;delay(50);}elseif((left_red==0)&(right_red==1)){en1=0;en2=1; P0_0=!P0_0;turnleft();delay(150);en1=1;en2=0;delay(50);}elseif((left_red==1)&(right_red==0)){en1=1;en2=0;P0_1=!P0_1;turnright();delay(150);en1=0;en2=1;delay(50);}else{stop();} }4.4避障模塊避障框圖:開始后退一點(diǎn),報(bào)警開始后退一點(diǎn),報(bào)警后退左轉(zhuǎn)前進(jìn)右轉(zhuǎn)Y左轉(zhuǎn)是否檢測(cè)到障礙前進(jìn)N圖4.3避障框圖避障程序:voidbizhang(){en1=1;en2=1;goback();mid_red=0;baojing();goback();for(i=0;i<8;i++){en1=1;en2=1;delay(150);en1=0;en2=0;delay(50);}stop();delay(10);turnleft();for(i=0;i<11;i++){en1=0;en2=1;delay(130); en2=0;delay(50);}stop();delay(10);goahead();for(i=0;i<22;i++){en1=1;en2=1;delay(130);en1=0;en2=0; delay(50);}stop();delay(10);turnright();for(i=0;i<18;i++){en1=1;en2=0;delay(130);en1=0;delay(50);}xun:if((left_red==1)&(right_red==0)){loop:turnleft();en1=0;en2=1;delay(30);turnright();en1=1;delay(50);en1=0;delay(50);en2=0;delay(50);if((left_red==1)&(right_red==1)){;}else{gotoloop;}}else{en1=1;en2=1;goahead();delay(80);en1=0;en2=0;delay(50);gotoxun;}}第五章制作安裝與調(diào)試5.1PCB的設(shè)計(jì)制作與安裝采用DXP2004繪制原理圖與PCB板,布線的過程中必須注意焊盤的大小與銅線的寬度。我選取的焊盤內(nèi)徑為0.8mm,外徑2mm;銅線寬1mm。從做板的情況來看基本達(dá)到制作得要求。采用螺絲將循跡板安裝在車頭,主板與電機(jī)驅(qū)動(dòng)安裝在車尾。5.2小車調(diào)試通過改變循跡板滑動(dòng)變阻器器的大小來調(diào)試紅外對(duì)管的靈敏度,通過改變延時(shí)程序來改變速度的大小。下表為小車運(yùn)行的情況:表5.1小車調(diào)試情況小車運(yùn)行次數(shù)成功循跡次數(shù)成功避障次數(shù)111221332442554結(jié)束語整個(gè)系統(tǒng)的設(shè)計(jì)以單片機(jī)為核心,利用了多種傳感器,將軟件和硬件相結(jié)合。本系統(tǒng)能實(shí)現(xiàn)如下功能:(1)自動(dòng)沿預(yù)設(shè)軌道行駛小車在行駛過程中,能夠自動(dòng)檢測(cè)預(yù)先設(shè)好的軌道,實(shí)現(xiàn)直道和弧形軌道的前進(jìn)。若有偏離,能夠自動(dòng)糾正,返回到預(yù)設(shè)軌道上來。(2)當(dāng)小車探測(cè)到前進(jìn)前方的障礙物時(shí),可以自動(dòng)報(bào)警調(diào)整,躲避障礙物,從無障礙區(qū)通過。小車通過障礙區(qū)后,能夠自動(dòng)循跡(3)自動(dòng)檢測(cè)停車線并自動(dòng)停車。從運(yùn)行情況來看循跡的效果比較好,避障的效果不是很好,我認(rèn)為是由于電源不能穩(wěn)定而是的小車的速度不好控制,這也是我這次設(shè)計(jì)最大的誤區(qū),沒有選取穩(wěn)定的電源。我相信如果實(shí)驗(yàn)條件和時(shí)間的允許下我肯定能解決這一問題。通過本次設(shè)計(jì)我掌握了很多以前不熟練的東西,認(rèn)識(shí)了很多以前不熟悉得東西,使我在人生上又進(jìn)了一步。也認(rèn)識(shí)到很多的不足。致謝本設(shè)計(jì)能夠順利完成,還承蒙劉老師以及身邊的很多同學(xué)的指導(dǎo)和幫助。在設(shè)計(jì)過程中,劉老師給予了悉心的指導(dǎo),最重要的是給了我解決問題的思路和方法,并且在設(shè)計(jì)環(huán)境和器材方面給予了大力的幫助和支持,在此,我對(duì)劉老師表示最真摯的感謝!同時(shí)感謝所有幫助過我的同學(xué)!感些評(píng)閱老師百忙之中抽出時(shí)間對(duì)本論文進(jìn)行了評(píng)閱!參考文獻(xiàn)[1]郭惠,吳迅.單片機(jī)C語言程序設(shè)計(jì)完全自學(xué)手冊(cè)[M].電子工業(yè)出版社,2008.10:1-200.[2]王東鋒,王會(huì)良,董冠強(qiáng).單片機(jī)C語言應(yīng)用100例[M].電子工業(yè)出版社,2009.3:145-300.[3]韓毅,楊天.基于HCS12單片機(jī)的智能尋跡模型車的設(shè)計(jì)與實(shí)現(xiàn)[J].學(xué)術(shù)期刊,2008,29(18):1535-1955.[4]王曉明.電動(dòng)機(jī)的單片機(jī)控制[J].學(xué)術(shù)期刊,2002,13(15):1322-1755.[5]YamatoI,etal1NewconversionsystemforUPSusinghighfre2quencylink[J]1IEEEPESC,1988:210-320.[6]YamatoI,etal1HighfrequencylinkDC/ACconverterforUPSwithanewvoltageclamper[J]1IEEEPESC,1990:52-105.摘要(關(guān)鍵詞:智能車AT89S52單片機(jī)金屬感應(yīng)器霍爾元件1602LCD)智能作為現(xiàn)代的新發(fā)明,是以后的發(fā)展方向,他可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)的運(yùn)作,不需要人為的管理,可應(yīng)用于科學(xué)勘探等等的用途。智能電動(dòng)車就是其中的一個(gè)體現(xiàn)。本次設(shè)計(jì)的簡(jiǎn)易智能電動(dòng)車,采用AT89S52單片機(jī)作為小車的檢測(cè)和控制核心;采用金屬感應(yīng)器TL-Q5MC來檢測(cè)路上感應(yīng)到的鐵片,從而把反饋到的信號(hào)送單片機(jī),使單片機(jī)按照預(yù)定的工作模式控制小車在各區(qū)域按預(yù)定的速度行駛,并且單片機(jī)選擇的工作模式不同也可控制小車順著S形鐵片行駛;采用霍爾元件A44E檢測(cè)小車行駛速度;采用1602LCD實(shí)時(shí)顯示小車行駛的時(shí)間,小車停止行駛后,輪流顯示小車行駛時(shí)間、行駛距離、平均速度以及各速度區(qū)行駛的時(shí)間。本設(shè)計(jì)結(jié)構(gòu)簡(jiǎn)單,較容易實(shí)現(xiàn),但具有高度的智能化、人性化,一定程度體現(xiàn)了智能。目錄1設(shè)計(jì)任務(wù)………………31.1要求………………32方案比較與選擇………………………42.1路面檢測(cè)模塊………………………42.2LCD顯示模塊………………………52.3測(cè)速模塊……………52.4控速模塊……………62.5模式選擇模塊………………………73程序框圖………………74系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn)………………94.1路面檢測(cè)模塊………………………94.2LCD顯示模塊………………………94.3測(cè)速模塊……………94.4控速模塊……………94.5復(fù)位電路模塊………………………94.6模式選擇模塊………………………95最小系統(tǒng)圖……………106最終PCB板圖…………127系統(tǒng)程序………………138致謝……………………469參考文獻(xiàn)……………4710附錄…………………481.設(shè)計(jì)任務(wù):設(shè)計(jì)并制作了一個(gè)智能電動(dòng)車,其行駛路線滿足所需的要求。1.1要求:1.1.1基本要求:(1)分區(qū)控制:如(圖1)所示:(圖1)車輛從起跑線出發(fā)(出發(fā)前,車體不得超出起跑線)。在第一個(gè)路程B~C區(qū)(3~6米)以低速行駛,通過時(shí)間不低于10s;第二個(gè)路程C~D區(qū)(2米)以高速行駛,通過時(shí)間不得多于4秒;第三個(gè)路程D~E區(qū)(3~6米)以低速行駛,通過時(shí)間不低于10s。(2)小車能自動(dòng)記錄、顯示行駛時(shí)間、行駛距離以及行駛速度,還能記錄每段所走的時(shí)間,從而判斷是否符合課程設(shè)計(jì)要求。(記錄顯示裝置要求安裝在車上)。1.1.2發(fā)揮部分:S型控制:如(圖2)所示:(圖2)車輛沿著S形鐵片行駛,自動(dòng)轉(zhuǎn)彎,自動(dòng)尋找正確方向和鐵片。當(dāng)離開S型鐵片跑道或者感應(yīng)不到鐵片一段時(shí)間的時(shí)候,小車自動(dòng)停止,并記錄行駛時(shí)間,路程,平均速度并通過LCD顯示出來。2.方案比較與選擇:根據(jù)設(shè)計(jì)任務(wù)要求,并且根據(jù)我們自己的需要而附加的功能,該電路的總體框圖可分為幾個(gè)基本的模塊,框圖如(圖3)所示:(圖3)2.1路面檢測(cè)模塊:采用鐵片感應(yīng)器TL-Q5MC來檢測(cè)路面上的鐵片從而給單片機(jī)中斷脈沖。原理圖接線如(圖4)所示:(圖4)2.2LCD顯示模塊:采用1602LCD,由單片機(jī)的總線模式連接。為節(jié)約電源電量并且不影響LCD的功能,LCD的背光用單片機(jī)進(jìn)行控制,使LCD的背光在小車行駛的過程中不亮,因?yàn)槲覀儾槐乜雌滹@示;在其它我們需要看顯示的內(nèi)容的時(shí)候LCD背光亮。2.3測(cè)速模塊:2.3.1方案1:采用采用霍爾開關(guān)元器件A44E檢測(cè)輪子上的小磁鐵從而給單片機(jī)中斷脈沖,達(dá)到測(cè)量速度的作用?;魻栐哂畜w積小,頻率響應(yīng)寬度大,動(dòng)態(tài)特性好,對(duì)外圍電路要求簡(jiǎn)單,使用壽命長(zhǎng),價(jià)格低廉等特點(diǎn),電源要求不高,安裝也較為方便?;魻栭_關(guān)只對(duì)一定強(qiáng)度的磁場(chǎng)起作用,抗干擾能力強(qiáng),因此可以在車輪上安裝小磁鐵,而將霍爾器件安裝在固定軸上,通過對(duì)脈沖的計(jì)數(shù)進(jìn)行車速測(cè)量。2.3.2方案2:采用紅外傳感器進(jìn)行測(cè)速。但無論是反射式紅外傳感器還是對(duì)射式紅外傳感器,他們對(duì)都對(duì)外圍環(huán)境要求較高,易受外部環(huán)境的影響,穩(wěn)定性不高,且價(jià)格較為昂貴。通過對(duì)方案1、方案2的比較其優(yōu)缺點(diǎn),綜合多方面因素決定選用方案1,其原理圖接線如(圖5)所示:(圖5)2.4控速模塊:2.4.1方案1:使用功率三極管作為功率放大器的輸出控制直流電機(jī)。線性型驅(qū)動(dòng)的電路結(jié)構(gòu)和原理簡(jiǎn)單,成本低,加速能力強(qiáng),但功率損耗大,特別是低速大轉(zhuǎn)距運(yùn)行時(shí),通過電阻R的電流大,發(fā)熱厲害,損耗大,對(duì)于小車的長(zhǎng)時(shí)間運(yùn)行不利。2.4.2方案2:采用繼電器對(duì)電動(dòng)機(jī)的開或關(guān)進(jìn)行控制,通過開關(guān)的切換對(duì)小車的速度進(jìn)行調(diào)整.此方案的優(yōu)點(diǎn)是電路較為簡(jiǎn)單,缺點(diǎn)是繼電器的響應(yīng)時(shí)間慢,易損壞,壽命較短,可靠性不高。2.4.3方案3:采用由雙極性管組成的H橋電路。用單片機(jī)控制晶體管使之工作在占空比可調(diào)的開關(guān)狀態(tài),精確調(diào)整電機(jī)轉(zhuǎn)速。這種電路由于工作在管子的飽和截止模式下,效率非常高;H橋電路保證了可以簡(jiǎn)單地實(shí)現(xiàn)轉(zhuǎn)速和方向的控制;電子開關(guān)的速度很快,穩(wěn)定性也很高,是一種廣泛采用的調(diào)速技術(shù)。綜合3種方案的優(yōu)缺點(diǎn),決定選擇方案3,其電路原理圖如(圖6)所示:(圖6)2.5模式選擇模塊:模式選擇模塊通過一個(gè)74LS00與非門和兩個(gè)不帶鎖按鈕來控制單片機(jī)單片機(jī)的兩個(gè)中斷口,從而按動(dòng)按鈕來選擇小車走動(dòng)的路型、來選擇小車的速度是快速、中速、慢速;走完路程小車停止后還可以通過按鈕選擇想要在LCD上想看的信息,比如總時(shí)間、走過各段路程的時(shí)間、平均速度、總路程等。小車走動(dòng)的模式選擇有:(1)直線型:滿足設(shè)計(jì)任務(wù)的基本要求,能穩(wěn)定的走完全程。之后按順序循環(huán)不斷的顯示走完全程所用的時(shí)間、走完高速區(qū)所用的時(shí)間和走完低速區(qū)所用的時(shí)間這三個(gè)時(shí)間;或者可以通過兩個(gè)按鈕以及LCD顯示的菜單選擇所要看的內(nèi)容如平均速度、全程距離以及那三個(gè)時(shí)間。(2)S型:滿足設(shè)計(jì)任務(wù)的發(fā)揮部分的要求,小車能自動(dòng)的感應(yīng)到在前面或在后面鐵片,即第一次轉(zhuǎn)彎后若感應(yīng)到的是錯(cuò)誤的方向,則小車會(huì)后退自動(dòng)調(diào)整方向,沿著S型的鐵片走。當(dāng)走完S型鐵片后的一定時(shí)間里,小車自動(dòng)停止。之后自動(dòng)進(jìn)入菜單由我們自己選擇要看的內(nèi)容時(shí)間、平均速度和所走的距離。(3)自動(dòng)型:小車先以一定的速度走完全程,之后再以一定的速度倒退回起點(diǎn),再調(diào)整速度在一定的時(shí)間內(nèi)走完全程。走完后LCD顯示的內(nèi)容與直線型顯示的內(nèi)容一樣。3.程序框圖:?jiǎn)纹瑱C(jī)主程序框圖、速度感應(yīng)程序框圖和鐵片感應(yīng)程序框圖分別如(圖7)所示。(圖7)4.系統(tǒng)的具體設(shè)計(jì)與實(shí)現(xiàn):4.1路面檢測(cè)模塊:應(yīng)用一個(gè)金屬感應(yīng)器,安裝在車盤下,離地略小于或約四毫米。當(dāng)金屬傳感器檢測(cè)到鐵片時(shí)將對(duì)單片機(jī)發(fā)送中斷信號(hào),單片機(jī)運(yùn)行中斷,改變輸給電機(jī)驅(qū)動(dòng)信號(hào)的電壓占空比來控制小車的速度。4.2LCD顯示模塊:采用1602LCD,由單片機(jī)的總線模式連接。為節(jié)約電源,LCD的背光用單片機(jī)進(jìn)行控制。4.3測(cè)速模塊:通過霍爾元件感應(yīng)磁鐵來產(chǎn)生脈沖(當(dāng)霍爾元件在離磁場(chǎng)較近時(shí)輸出會(huì)是高電平,其它時(shí)候是低電平),一個(gè)車輪均勻放四個(gè)小磁鐵,計(jì)算一秒所得的脈沖數(shù),從而計(jì)算出一秒小車輪子轉(zhuǎn)動(dòng)圈數(shù),再測(cè)量出小車車輪周長(zhǎng)即可計(jì)算出小車當(dāng)前速度,累加可得到當(dāng)前路程。4.4控速模塊:考慮到元器件的缺少以及我們所用的電路的驅(qū)動(dòng)電機(jī)的電路原理圖和和小車自帶的電路的電機(jī)驅(qū)動(dòng)原理圖一樣,所以暫時(shí)使用小車自帶的電機(jī)驅(qū)動(dòng)電路圖。4.5復(fù)位電路模塊:?jiǎn)纹瑱C(jī)的復(fù)位電路通過手動(dòng)來實(shí)現(xiàn),復(fù)位電路圖如(圖8)所示。(圖8)4.6模式選擇模塊:兩個(gè)中斷口使用和感應(yīng)鐵片、感應(yīng)速度所使用的中斷口一樣,通過一個(gè)與非門和按鈕控制。原理圖如(圖9)所示:(圖9)5.最小系統(tǒng)圖:該系統(tǒng)主要用到的是單片機(jī),所以主要的部分是最小系統(tǒng)圖,該最小系統(tǒng)圖如(圖10)所示:(圖12)6.最終PCB板圖:該最小系統(tǒng)的最終PCB板圖(包括LCD接口以及其他的外部擴(kuò)展電路部分,考慮到最小系統(tǒng)的簡(jiǎn)潔以及容易看懂,外部擴(kuò)展電路不在最小系統(tǒng)圖上顯示。)分別如(圖11)、(圖12)所示:(圖11)(圖12)7.系統(tǒng)程序:按照預(yù)定的功能,系統(tǒng)實(shí)現(xiàn)預(yù)定的功能的程序如下所示:#include<intrins.h> #include<AT89X52.h>/********************************************************************************\** 宏定義區(qū) **\********************************************************************************//*-------------------------------LCD模塊------------------------------------*/#defineLCD_RW P2_6 //讀寫控制端#defineLCD_RS P2_7 //數(shù)據(jù)命令選擇端#defineLCD_E P2_5 //執(zhí)行使能端#defineLCD_Data P1 //P1口#defineWrite 0x00 //低電平寫入#defineRead 0x01 //高電平讀出#defineData 0x01 //高電平選擇數(shù)據(jù)#defineCmd 0x00 //低電平選擇命令#defineEnable 0x00 //躍變到低電平時(shí)執(zhí)行命令#defineDisable 0x01#defineTrue 0x01#defineFalse 0x00#defineLCD_Init 0x38 //初始化模式 #defineLCD_DispCtr 0x0C //開顯示及光標(biāo)設(shè)置#defineLCD_CloseCtr 0x08 //關(guān)顯示#defineLCD_CLS 0x01 //清屏幕#defineLCD_EnterSet 0x06 //顯示光標(biāo)#defineBusy P1_7 //忙信號(hào)/*--------------------------測(cè)速/測(cè)距/測(cè)時(shí)模塊-------------------------------*/#defineCircleLength 0.132 //小車轉(zhuǎn)一輪的長(zhǎng)度為.132m/*--------------------------------控速模塊-----------------------------------*/#defineP03 P0_3 //后電機(jī)#defineP04 P0_4 //后電機(jī)#defineP01 P0_1 //前電機(jī)#defineP02 P0_2 //前電機(jī)#defineP31 P0_5 //控制液晶背光#defineP33 P3_3/*------------------------------菜單選擇模塊 ---------------------------------*/#defineLine 0x00 //0代表直線模式#defineCurve 0x01 //1代表S型模式#defineNormal 0x00 //0代表正常速度#defineLow 0x01 //1代表低速#defineHigh 0x02 //2代表高速/*********************************************************************************\** 全局函數(shù)聲明區(qū) **\*********************************************************************************//*-------------------------------LCD模塊-------------------------------------*/voidLCDInit(void); //LCD初始化voidSetWriteCmd(void); //設(shè)置寫命令模式voidSetReadCmd(void); //設(shè)置讀命令模式voidSetWriteData(void); //設(shè)置寫數(shù)據(jù)模式voidWriteCmd(charcmd); //寫命令voidWriteData(charddata); //寫數(shù)據(jù)voidExecuteCmd(void); //執(zhí)行命令voidSetXY(charx,chary); //定位顯示地址voidDisplaySingleChar(charx,chary,charcchar); //顯示單個(gè)字符voidDisplayString(charx,chary,char*str); //顯示一段字符串voidDelay(unsignedinttime); //延時(shí)主程序voidDelayUs(unsignedinttime); //延時(shí)子程序bitIsBusy(void); //判斷忙標(biāo)志函數(shù)voidDisplayTime(void); //顯示時(shí)間voidDisplayAVGSpeed(void); //顯示平均速度voidDisplayDistance(void); //顯示路程/*--------------------------測(cè)速/測(cè)距/測(cè)時(shí)模塊-------------------------------*/ voidINTInit(void); //所有中斷初始化voidSpeedINT(void); //測(cè)速中斷voidComputeTime(void);voidComputeSpeedANDDistance(void); //計(jì)算速度和距離/*--------------------------------控速模塊-----------------------------------*/voidCtrSpeedINT(void); //控速中斷voidTime0INT(void); voidTime1INT(void); //控速單位時(shí)間中斷voidClock0_Init(void); //時(shí)鐘中斷初始化voidClock1_Init(void); //時(shí)鐘中斷初始化voidCtrSpeed(void);/********************************************************************************\** 全局變量區(qū) **\********************************************************************************/floatSpeedCount=0; //測(cè)速計(jì)數(shù)脈沖floatSpeed=0.0; floatDistance=0.0; charTime1INTCount=0; //T1中斷時(shí)間計(jì)時(shí)floatPassTime=0.00; //小車行走的時(shí)間shortIsT0INT=1; bit IsT1INT; //判斷T1是否已經(jīng)響應(yīng)中斷shortIsT0INT2=1;charThx[5]={0xf4,0xf4,0xc5,0xf4,0xff}; //3ms,3ms,15ms,3mscharTlx[5]={0x48,0x48,0x68,0x48,0xff}; charThx0=0xd8;charTlx0=0xf0;charThx1=0xb1; //20mscharTlx1=0xe0;shortRound=0;shortBack=0;shortBack0=0;bitBackid;bitStop=0;charArea0=0;charArea1=0; //區(qū)域變量charLowSpeedArea1StartTime;charLowSpeedArea1EndTime;charHighSpeedAreaEndTime;charLowSpeedArea2EndTime;charLowSpeedArea1PassTime=0; //第一個(gè)低速區(qū)通過時(shí)間charHighSpeedAreaPassTime=0; //高速區(qū)通過時(shí)間charLowSpeedArea2PassTime=0; //第二個(gè)低速區(qū)通過時(shí)間charReadyToGo=4; //倒計(jì)時(shí)charflag;bitRoundid=0;charNocurve=0;charChangeFlag;charMode;bitRunning;bitSelectedAll; //模式和速度是否選擇完畢標(biāo)志bit IsSelectingMode; //模式選擇標(biāo)志bit IsSelectingSpeed; //速度選擇標(biāo)志bitModeSelected; //已經(jīng)被選擇的模式標(biāo)志charSelectedMode=10; //模式選擇是否完畢標(biāo)志bitNext; //Next鍵標(biāo)志bitSpeedSelected; //已經(jīng)被選中的速度方案標(biāo)志charSelectedSpeed; //速度選擇是否完畢標(biāo)志bitChoosingDisplay; //人工選擇菜單開始標(biāo)志bitSelectedShow; //顯示選擇標(biāo)志bit SelectedReturn; //返回選擇標(biāo)志bitSelected; //確定/返回鍵選擇標(biāo)志bitReturnSelection; //返回鍵啟用標(biāo)志bitAVGSpeedShow; //平均速度顯示標(biāo)志bitTotalDistanceShow; //總路程顯示標(biāo)志bitReturnMain; //返回主菜單標(biāo)志bitAutoDisplay; //自動(dòng)顯示標(biāo)志bitGoToChoosingDisplay; //人工選擇標(biāo)志bitAutoMode=0;charPassLineID=0;charPassLine=0;floatPrepareDistance;floatFirstDistance;floatSecondDistance;floatThirdDistance;intFirstHigh;intSecondHigh;intThirdHigh;floatRate=1.25; //5ms時(shí)的速度floatCount=4; //時(shí)間的倍數(shù)/********************************************************************************\** 全局函數(shù)實(shí)現(xiàn)區(qū) **\********************************************************************************//*-------------------------------- 主函數(shù)------------------------------------*/voidmain(){ P01=0; P02=0; P03=0; P04=0; P31=1; //單片機(jī)復(fù)位,背光開 Delay(40); //延時(shí)等待LCD啟動(dòng) LCDInit(); //初始化LCD DisplayString(0x0,0,"Starting..."); DisplayString(0x0,1,"DesignedBy202"); Delay(300); WriteCmd(LCD_CLS); EA=1; //開總中斷 EX0=1; //開INT0中斷 IT0=1; //INTO邊沿觸發(fā) EX1=1; //開INT1中斷 IT1=1; //INT1邊沿觸發(fā) SelectedAll=False; //開始模式和速度選擇 /*------------------------------模式選擇---------------------------------*/ DisplayString(0x0,0,"ChooseTheMode"); DisplayString(0x0,1,"youwant."); Delay(50); WriteCmd(LCD_CLS); IsSelectingMode=True; while(1) { WriteCmd(LCD_CLS); DisplayString(0x0,0,"LineMode"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) //不斷檢測(cè)中斷,直到按確定鍵或是NEXT鍵 { if(Next==True) //如果按Next鍵則直接跳出 break; if(ModeSelected==True) //如果按確定鍵則設(shè)置模式為L(zhǎng)ine并跳出 { SelectedMode=Line; break; } //如果什么鍵都沒有按下,那么一直顯示等待 } if(ModeSelected==True) //按下了確定鍵,退出模式選擇 { IsSelectingMode=False; break; } if(Next==True) //按下了Next鍵,顯示下一個(gè)菜單項(xiàng) { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0,"CurveMode"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) //不斷檢測(cè)中斷,直到按確定鍵或是Next鍵 { if(Next==True) //如果再一次按下Next鍵,則跳出 break; if(ModeSelected==True) //如果按下確定鍵,則設(shè)置模式為Curve,并跳出 { SelectedMode=Curve; break; } } } if(ModeSelected==True) //按下了確定鍵,退出模式選擇 { IsSelectingMode=False; break; } if(Next==True) //再一次按下了Next鍵,則循環(huán)模式選擇 { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0,"AutoMode"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if(Next==True) break; if(ModeSelected==True) { AutoMode=1; break; } } } if(ModeSelected==True) { IsSelectingMode=False; break; } if(Next==True) { Next=False; continue; } } Delay(50); WriteCmd(LCD_CLS); /*------------------------------速度選擇---------------------------------*/ if(SelectedMode==Line&&AutoMode==0) { DisplayString(0x0,0,"NowChoosea"); DisplayString(0x0,1,"kindofSpeed"); Delay(50); WriteCmd(LCD_CLS); IsSelectingSpeed=True; while(1) { WriteCmd(LCD_CLS); DisplayString(0x0,0,"NormalSpeed"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if(Next==True) //如果按Next鍵則直接跳出 break; if(SpeedSelected==True) //如果按確定鍵則設(shè)置速度為Normal并跳出 { Thx[0]=0xec;Tlx[0]=0x78; //5ms Thx[1]=0xf0;Tlx[1]=0x60; //4ms Thx[2]=0x8a;Tlx[2]=0xd0; //30ms Thx[3]=0xf4;Tlx[3]=0x48; //3ms SelectedSpeed=Normal; break; } //如果什么鍵都沒有按下,那么一直顯示等待 } if(SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if(Next==True) { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0,"LowSpeed"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if(Next==True) //如果再一次按下Next鍵,則跳出 break; if(SpeedSelected==True) //如果按下確定鍵,則設(shè)置速度為L(zhǎng)ow,并跳出 { SelectedSpeed=Low; //這里沒有速度設(shè)置,因?yàn)槟J(rèn)速度就是Low break; } } } if(SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if(Next==True) { Next=False; WriteCmd(LCD_CLS); DisplayString(0x0,0,"HighSpeed"); DisplayString(0x0,1,"NextYes"); Delay(300); //延時(shí)消除抖動(dòng) while(1) { if(Next==True) //如果再一次按下Next鍵,則跳出 break; if(SpeedSelected==True) //如果按下確定鍵,則設(shè)置速度為High,并跳出 { Thx[0]=0xe0;Tlx[0]=0xc0;//8ms Thx[1]=0xe0;Tlx[1]=0xc0;//8ms Thx[2]=0x63;Tlx[2]=0xc0;//40ms Thx[3]=0xec;Tlx[3]=0x78;//5ms SelectedSpeed=High; break; } } } if(SpeedSelected==True) //按下了確定鍵,退出速度選擇 { IsSelectingSpeed=False; break; } if(Next==True) //再一次按下了Next鍵,則循環(huán)速度選擇 { Next=False; continue; } } } SelectedAll=True;//標(biāo)志模式選擇和速度選擇完畢 Running=True; Delay(50); WriteCmd(LCD_CLS); /*-------------------------顯示所選擇的模式和速度方案-------------------------*/ if(SelectedMode==Line) { DisplayString(0x0,0,"ChoosenModeis"); DisplayString(0x0,1,"Line"); Delay(50); WriteCmd(LCD_CLS); } if(SelectedMode==Curve) { DisplayString(0x0,0,"ChoosenModeis"); DisplayString(0x0,1,"Curve"); Delay(50); WriteCmd(LCD_CLS); } if(AutoMode==1) { DisplayString(0x0,0,"ChoosenModeis"); DisplayString(0x0,1,"AutoMode"); Delay(50); WriteCmd(LCD_CLS); } if(SelectedMode==Line) { if(SelectedSpeed==Normal) { DisplayString(0x0,0,"ChoosenSpeedis"); DisplayString(0x0,1,"Normal"); Delay(50); WriteCmd(LCD_CLS); } if(SelectedSpeed==Low) { DisplayString(0x0,0,"ChoosenSpeedis"); DisplayString(0x0,1,"Low"); Delay(50); WriteCmd(LCD_CLS); } if(SelectedSpeed==High) { DisplayString(0x0,0,"ChoosenSpeedis"); DisplayString(0x0,1,"High"); Delay(50); WriteCmd(LCD_CLS); } } INTInit(); //初始化所有中斷 DisplayString(0x0,0,"LeftTimesToGo"); while(ReadyToGo--){ DisplaySingleChar(0x7,1,ReadyToGo+0x30); DisplaySingleChar(0x09,1,'s'); Delay(300); } WriteCmd(LCD_CLS); DisplayString(0x05,0,"Go!!!"); Delay(100); WriteCmd(LCD_CLS); DisplayString(0x0,0,"Living..."); DisplayString(0x0,1,"Designedby202"); if(SelectedMode==Line&&AutoMode==0) flag=Area0; else flag=1; while(flag<5) { if(AutoMode==1) //自動(dòng)模式 { switch(PassLineID) { case0:{ if(IsT0INT==1) {P01=P02=P04=0;P03=1;} else {P01=P02=P03=P04=0;} }break; case1:{ P01=P02=P03=0;P04=1; }break; case2:{ P01=P02=P04=0;P03=1; }break; default:break; } } else { if(SelectedMode==Line) //直線模式 { flag=Area0; if(IsT0INT==1) {P03=1;P04=0;P01=P02=0;} else {P03=0;P04=0;P01=P02=0;} } else { //S型模式 if((Nocurve<2)&&Round!=0&&(Back0>0)&&Back!=0) { if(Backid==1) {P01=1;P02=0;P03=0;P04=1;} else {P01=0;P02=1;P03=0;P04=1;} Back=1; } else { if(Round==0) { if(IsT0INT2==1) {P01=0;P02=0;P03=1;P04=0;} else {P01=0;P02=0;P03=0;P04=0;} } else { if(P33==0) { if(IsT0INT2==1) {P01=0;P02=0;P03=1;P04=0;} else {P01=0;P02=0;P03=0;P04=0;} } else { EX1=1; if(Round%2) { if(IsT0INT2==1) {P01=1;P02=0;P03=1;P04=0;Backid=1;} else {P01=1;P02=0;P03=0;P04=0;} } else { if(IsT0INT2==1) {P01=0;P02=1;P03=1;P04=0;Backid=0;} else {P01=0;P02=1;P03=0;P04=0;} } } } } } } if(IsT1INT==1) { IsT1INT=0; ComputeTime(); ComputeSpeedANDDistance(); } } //補(bǔ)中斷路程,加上最后一次中斷缺失的路程 ComputeSpeedANDDistance(); P04=1;P03=0;P01=P02=0;Delay(90); P03=0;P04=0; //行程結(jié)束,小車停止 P31=1; //行程結(jié)束,背光開 ET0=0x0; //關(guān)T0中斷 ET1=0x0; //關(guān)T1中斷 EX1=0x01; //開INT1中斷 Running=False; AutoDisplay=True; //默認(rèn)情況下直線模式會(huì)自動(dòng)顯示各個(gè)區(qū)域經(jīng)過的時(shí)間 WriteCmd(LCD_CLS); if(SelectedMode==Line) //直線模式才顯示 { while(1) { if(GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0,"LowSpeedArea1"); DisplayString(0,1,"Costed"); DisplaySingleChar(0x0C,1,'s'); LowSpeedArea1PassTime=LowSpeedArea1EndTime-LowSpeedArea1StartTime; DisplaySingleChar(0x0A,1,LowSpeedArea1PassTime%10+0x30); if(LowSpeedArea1PassTime>9) //通過第一個(gè)低速區(qū)的時(shí)間超過s DisplaySingleChar(0x0B,1,LowSpeedArea1PassTime/10+0x30); if(GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0,"HighSpeedArea"); DisplayString(0,1,"Costed"); DisplaySingleChar(0x0C,1,'s'); HighSpeedAreaPassTime=HighSpeedAreaEndTime-LowSpeedArea1EndTime; DisplaySingleChar(0x0A,1,HighSpeedAreaPassTime%10+0x30); if(HighSpeedAreaPassTime>9) //通過高速區(qū)的時(shí)間超過s DisplaySingleChar(0x0B,1,HighSpeedAreaPassTime/10+0x30); if(GoToChoosingDisplay==True) break; Delay(200); WriteCmd(LCD_CLS); Delay(200); DisplayString(0,0,"LowSpeedArea2"); DisplayString(0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 滿洲里俄語職業(yè)學(xué)院《中醫(yī)經(jīng)典應(yīng)用》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西省贛州市尋烏縣重點(diǎn)名校2025屆初三第二學(xué)期化學(xué)試題4月月考試卷含解析
- 天門職業(yè)學(xué)院《分子生物學(xué)A》2023-2024學(xué)年第一學(xué)期期末試卷
- 化工廠外來人員安全培訓(xùn)
- 2025蚌埠市房地產(chǎn)中介服務(wù)合同范本
- 2025年上海市勞務(wù)派遣合同范本
- 2025履行合同簽訂流程
- 2025新版購(gòu)房合同
- 2025年餐飲業(yè)商鋪?zhàn)赓U合同
- 2025年公寓租賃合同書
- 人教版數(shù)學(xué)五年級(jí)下冊(cè)分?jǐn)?shù)與除法課件
- 光學(xué)信息處理第六章光學(xué)圖像識(shí)別課件
- 誠(chéng)信期末考試構(gòu)建誠(chéng)信考場(chǎng)宣傳PPT模板
- 全國(guó)電網(wǎng)情況介紹課件
- 人教版 七年級(jí)數(shù)學(xué)下冊(cè)平行線中的“拐點(diǎn)”問題課件
- DBJ50-T-398-2021 城軌快線施工質(zhì)量驗(yàn)收標(biāo)準(zhǔn)
- 工程進(jìn)度檢查評(píng)分表
- 《觀察人口腔上皮細(xì)胞結(jié)構(gòu)》說課課件
- 箱變施工方案
- 2022四川成都市邛崍市天府現(xiàn)代種業(yè)園管理委員會(huì)公開招聘員額制社會(huì)化專業(yè)人才9人(必考題)模擬卷和答案
- 2022云南省氣象事業(yè)單位公開招聘氣象類專業(yè)(第一批)高校畢業(yè)生45人(必考題)模擬卷及答案
評(píng)論
0/150
提交評(píng)論