迷宮電腦鼠的設(shè)計(jì)報(bào)告_第1頁
迷宮電腦鼠的設(shè)計(jì)報(bào)告_第2頁
迷宮電腦鼠的設(shè)計(jì)報(bào)告_第3頁
迷宮電腦鼠的設(shè)計(jì)報(bào)告_第4頁
迷宮電腦鼠的設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、 綜合課程設(shè)計(jì)報(bào)告題目: 迷宮電腦鼠的設(shè)計(jì) 二級學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院 專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) 班 級 學(xué)生姓名 學(xué)號 指導(dǎo)教師 時(shí) 間 2015 01 17 II重慶理工大學(xué)綜合課程設(shè)計(jì)報(bào)告 III目 錄目 錄I摘 要II1、課程設(shè)計(jì)的目的及要求11.1 課程設(shè)計(jì)目的11.2課程設(shè)計(jì)要求12、題目分析12.1 功能分析12.2 性能需求分析12.3 算法分析13、系統(tǒng)設(shè)計(jì)23.1系統(tǒng)整體設(shè)計(jì)23.2硬件設(shè)計(jì)33.2.1 硬件結(jié)構(gòu)設(shè)計(jì)33.2.2 傳感器組設(shè)計(jì)43.2.3 電機(jī)驅(qū)動電路設(shè)計(jì)73.3軟件設(shè)計(jì)83.3.1 電腦鼠正常行走程序設(shè)計(jì)83.3.2 電腦鼠找終點(diǎn)程序設(shè)計(jì)113.3.3

2、 程序設(shè)計(jì)124 總結(jié)274.1 所遇問題及解決辦法274.2 心得體會28摘 要“電腦鼠”是使用單片機(jī)微控制器,傳感器和機(jī)電運(yùn)動部件構(gòu)成的一種智能行走裝置。一只電腦鼠是具有機(jī)電知識整合的基本構(gòu)架,本身就像是一個(gè)智能的機(jī)器人。要在指定的迷宮中比賽,就像是一個(gè)人置身競賽中一樣,必須要靠自己的判斷力,敏捷動作及正確探查周邊壞境。一般來說一只電腦鼠具備有以下兩個(gè)基本能力:擁有穩(wěn)定且快速的行走能力;正確判斷能力。 重慶理工大學(xué)綜合課程設(shè)計(jì)報(bào)告 1、課程設(shè)計(jì)的目的及要求1.1 課程設(shè)計(jì)目的(1)了解并熟悉電子元器件焊接技術(shù)與方法。(2)了解并熟悉電子元器件工作原理和功能特性。(3)掌握單片機(jī)對編碼電機(jī)的

3、控制與紅外發(fā)射與接收的控制。(4)熟練運(yùn)用keil軟件進(jìn)行單片機(jī)的C語言編程。1.2課程設(shè)計(jì)要求走有一定彎度、曲折度、路線單一的迷宮。2、題目分析2.1 功能分析(1)迷宮電腦鼠能夠在迷宮中隨意穿行。由于迷宮中有很多擋板,要使電腦鼠能夠在迷宮中隨意穿行,就要讓電腦鼠遇到擋板的時(shí)候能夠轉(zhuǎn)彎找到一條可通行的路,所以就要用到用來檢測擋板的傳感器。還要電腦鼠能夠左轉(zhuǎn)、右轉(zhuǎn)和前進(jìn),所以必須要寫出這四個(gè)功能函數(shù),不然電腦鼠就不能在迷宮中行走。2.2 性能需求分析1、迷宮電腦鼠外形合理,符合88迷宮場地需求。2、迷宮電腦鼠運(yùn)行穩(wěn)定,能夠正常在迷宮中隨意穿行。2.3 算法分析此次迷宮電腦鼠主要用到了這幾個(gè)算法

4、:左手法則、右手法則和車頭方向、轉(zhuǎn)彎算法、修正算法。轉(zhuǎn)彎算法:當(dāng)遇到障礙物向左轉(zhuǎn)90度或者右轉(zhuǎn)90度或者向后轉(zhuǎn)。修正算法:當(dāng)在迷宮中走偏后能夠自動修正方向。左手法則:小車在搜過程中有兩個(gè)以上的搜索方向時(shí),優(yōu)先選擇向左轉(zhuǎn),其次是向前行進(jìn),最后才考慮向右轉(zhuǎn)彎。右手法則:小車在搜過程中有兩個(gè)以上的搜索方向時(shí),優(yōu)先選擇向右轉(zhuǎn),其次是向前行進(jìn),最后才考慮向左轉(zhuǎn)彎。車頭方向:迷宮機(jī)器鼠的車頭有絕對方向和相對方向之分。絕對方向:以小車剛開始運(yùn)行的時(shí)候車頭面向的方向作為“上”,其它方向類推。相對方向:顧名思義,相對于當(dāng)前小車所朝向的方向的方向。機(jī)器鼠轉(zhuǎn)彎時(shí)要修整方向?yàn)榻^對方向。用數(shù)字0,1,2,3分別表示上,

5、右,下,左,修正公式為:轉(zhuǎn)彎后的絕對方向=(轉(zhuǎn)彎前的絕對方向+轉(zhuǎn)彎數(shù)值)% 4,如圖所示。絕對方向轉(zhuǎn)彎前的方向轉(zhuǎn)彎方向轉(zhuǎn)彎后的方向0(上方)向左(+3)向左(0+3)%4 = 30(上方)向右(+1)向右(0+1)%4 = 10(上方)向后(+2)向后(0+2)%4 = 21(右方)向左(+3)向上(1+3)%4 = 01(右方)向右(+1)向下(1+1)%4 = 21(右方)向后(+2)向左(1+2)%4 = 32(下方)向左(+3)向右(2+3)%4 = 12(下方)向右(+1)向左(2+1)%4 = 32(下方)向后(+2)向上(2+2)%4 = 03(左方)向左(+3)向下(3+3)

6、%4 = 23(左方)向右(+1)向上(3+1)%4 = 03(左方)向后(+2)向右(3+2) %4 = 13、系統(tǒng)設(shè)計(jì)3.1系統(tǒng)整體設(shè)計(jì)系統(tǒng)的功能函數(shù):延時(shí)函數(shù)功能:延時(shí)電機(jī)驅(qū)動函數(shù)功能:啟動和停止左右電機(jī)電機(jī)初始化函數(shù)功能:初始化電機(jī)中斷函數(shù)功能:T0、T1用來計(jì)數(shù)左右電機(jī)的脈沖數(shù);T2用來產(chǎn)生紅外信號系統(tǒng)初始化函數(shù)功能:初始化整個(gè)系統(tǒng)紅外傳感器函數(shù)功能:當(dāng)遇到障礙物時(shí)點(diǎn)亮LED燈轉(zhuǎn)彎函數(shù)1功能:左轉(zhuǎn)和右轉(zhuǎn)任意角度轉(zhuǎn)彎函數(shù)2功能:左轉(zhuǎn)90度,右轉(zhuǎn)90度,向后轉(zhuǎn)前進(jìn)一步函數(shù)功能:電腦鼠在迷宮前進(jìn)一個(gè)方格距離主程序流程圖:3.2硬件設(shè)計(jì)3.2.1 硬件結(jié)構(gòu)設(shè)計(jì)硬件電路部分主要由單片機(jī)最小系統(tǒng)

7、電路、傳感器電路、電機(jī)驅(qū)動電路構(gòu)成。如圖所示,是硬件電路部分結(jié)構(gòu)框圖。單片機(jī)傳感器組5傳感器組4傳感器組3傳感器組2傳感器組138KHz載波發(fā)生器3-8譯碼選擇器顯示器蜂鳴器電機(jī)1電機(jī)2驅(qū)動電路1驅(qū)動電路2操作按鍵1、微控制器微控制器是電腦鼠的核心,可以選擇單片機(jī),若RAM需求量大或者算法復(fù)雜或者性能要求高時(shí),需要使用ARM等高性能的微處理器。2、傳感器傳感器的作用是用來感知環(huán)境,探測電腦鼠的左、前、右是否有路可走。本設(shè)計(jì)中采用的是紅外線方式,發(fā)射和接收分別受微控制器控制。由硬件電路部分結(jié)構(gòu)框圖可知,在電腦鼠的前、左、右、左前、右前方共有5組,其中左、右、前三組傳感器是用于探測電腦鼠在當(dāng)前迷宮

8、格左、右、前三個(gè)方向上是否有支路的,左前、右前兩組傳感器呈45度安裝,用于電腦鼠行進(jìn)過程中進(jìn)行姿態(tài)矯正,防止電腦鼠走偏而撞到迷宮墻。3、顯示器顯示器是用來顯示當(dāng)前位置等相關(guān)信息的,是電腦鼠的可選部分。4、電源電源用來為單片機(jī)供電,選擇哪種電池,這也將影響電路的設(shè)計(jì)。5、蜂鳴器當(dāng)電腦鼠到底終點(diǎn)、或是返回到起點(diǎn),可以用蜂鳴器來提示,是電腦鼠的可選部分。3.2.2 傳感器組設(shè)計(jì)(1)傳感器的選擇電腦鼠有5組傳感器。這5組傳感器分別安裝于電腦鼠的左、左前、前、右前、右5個(gè)不同的方向,其中左、右、前三組傳感器是用于探測電腦鼠在當(dāng)前迷宮格左右前三個(gè)方向上是否有支路的,左前、右前兩組傳感器呈45度安裝,用于

9、電腦鼠行進(jìn)過程中進(jìn)行姿態(tài)矯正,防止走偏而撞到迷宮墻。如圖所示,是用于電腦鼠環(huán)境感知的傳感器組電路。傳感器組電路由紅外發(fā)射LED和紅外一體化接收頭HS0038構(gòu)成,紅外LED由前面載波發(fā)生器產(chǎn)生的CLOCK信號驅(qū)動產(chǎn)生38KHz紅外調(diào)制光。RP1為可調(diào)電阻,通過調(diào)節(jié)RP1來調(diào)節(jié)紅外LED發(fā)光強(qiáng)度,從而調(diào)整傳感器組檢測迷宮墻障礙物的距離,RP1電阻越大,檢測距離越近,電阻越小,檢測距離越遠(yuǎn)。irT1用于控制該組傳感器是否工作,連接到3-8譯碼選擇電路。紅外調(diào)制光經(jīng)障礙物反射由HS0038紅外一體化接收頭接收,進(jìn)行放大濾波、解調(diào)等處理后由irR1輸出,單片機(jī)通過識別irR1位的高低電平來判斷傳感器前

10、面是否有障礙物。這里只給出了一組傳感器,另外四組傳感器也與該組傳感器相同的。電腦鼠通過對這五組傳感器信息的融合,實(shí)現(xiàn)環(huán)境感知功能。(2)74HC138譯碼器74HC138譯碼器可接受3位二進(jìn)制加權(quán)地址輸入(A0, A1和A2),并當(dāng)使能時(shí),提供8個(gè)互斥的低有效輸出(Y0至Y7)。74HC138特有3個(gè)使能輸入端:兩個(gè)低有效(E1和E2)和一個(gè)高有效(E3)。除非E1和E2置低且E3置高,否則74HC138將保持所有輸出為高。1、74HC138的引腳如圖所示:2、74HC138的譯碼/真值表如下表所示:譯碼/真值表應(yīng)用:例如A0A1A2地址為000時(shí),74HC138輸出Y0有效,從而使第一組傳感

11、器工作,而其他組傳感器處于沒有工作的狀態(tài)。這樣就可以實(shí)現(xiàn)單片機(jī)的3個(gè)引腳控制5個(gè)或者更多的傳感器組。如圖所示,是硬件電路部分3-8譯碼選擇器電路。(3)載波發(fā)生器傳感器組是由38KHz的紅外一體化接收頭和紅外發(fā)射管構(gòu)成的障礙感測器。為了能夠讓傳感器組正常工作,紅外發(fā)射管需要一個(gè)38KHz的方波來驅(qū)動,使紅外發(fā)射管發(fā)射出調(diào)制頻率與接收頭接收頻率匹配的紅外光。如圖所示,是產(chǎn)生38KHz方波的載波發(fā)生器電路。(4)傳感器的調(diào)試(主要寫每組傳感器如何進(jìn)行調(diào)試。)1、左右兩邊的傳感器檢測是否有墻壁。2、左前和右前45角的兩組傳感器用于電腦鼠在行走過程中的微調(diào)。3、傳感器上標(biāo)的1、2、3、4、5對應(yīng)led

12、的1、2、3、4、5(里面往前數(shù))。4、傳感器的測距是通過條對應(yīng)的可調(diào)電阻來實(shí)現(xiàn)的,可調(diào)電阻順時(shí)針轉(zhuǎn)動調(diào)近,逆時(shí)針調(diào)遠(yuǎn)傳感器的測試距離。3.2.3 電機(jī)驅(qū)動電路設(shè)計(jì)如圖所示,是用來驅(qū)動電腦鼠伺服電機(jī)的驅(qū)動電路。由于單片機(jī)I/O口電流輸出能力有限,不能直接驅(qū)動電機(jī)轉(zhuǎn)動。為了能讓單片機(jī)控制電機(jī)運(yùn)轉(zhuǎn),需要使用電機(jī)驅(qū)動電路,將單片機(jī)I/O口弱電流放大到足以驅(qū)動電機(jī)的電流。1、L9110器件的管腳圖如圖所示。2、 管腳定義如下:3、通過L9110驅(qū)動芯片IA、IB輸入的邏輯值的組合,不同高低電平的輸入輸出,控制電機(jī)正轉(zhuǎn)、反轉(zhuǎn)、停轉(zhuǎn)。L9110的邏輯關(guān)系表如下表所示:L9110邏輯關(guān)系IAIBOAOBHL

13、HL正轉(zhuǎn)LHLH反轉(zhuǎn)LLLL停止HHLL停止3.3軟件設(shè)計(jì)3.3.1 電腦鼠正常行走程序設(shè)計(jì)電腦鼠正常行走包括直走、左轉(zhuǎn)彎、右轉(zhuǎn)彎和向后轉(zhuǎn)彎四個(gè)功能函數(shù)。這四個(gè)功能函數(shù)中要用到T0、T1定時(shí)/計(jì)數(shù)器;所以函數(shù)中首先初始化T0、T1。T0初始化:打開總開關(guān)EA=1;開T0中斷ET0=1;設(shè)定T0模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TMOD&=0xf6; TMOD|=0x06; 設(shè)定T0計(jì)數(shù)初值,定義中斷脈沖數(shù)TH0=256-ICP;TL0=256-ICP; /啟動T0計(jì)數(shù)TR0=1;T1初始化也是一樣的。為了使左右電機(jī)的轉(zhuǎn)速盡可能相同,我們可以設(shè)定一個(gè)值,在這個(gè)值內(nèi),如果T0的脈沖數(shù)Count0大于

14、T1的脈沖數(shù)Count1,就停止左電機(jī),轉(zhuǎn)動右電機(jī);當(dāng)Count0Count1時(shí),停止右電機(jī),反轉(zhuǎn)左電機(jī);當(dāng)Count0Count1時(shí),停止右電機(jī),正轉(zhuǎn)左電機(jī);當(dāng)Count0Count1時(shí),停止右電機(jī),正轉(zhuǎn)左電機(jī);當(dāng)Count0前左后。規(guī)定電腦鼠起點(diǎn)車頭方向?yàn)楸?,順時(shí)針依次為北、東、南、西,分別用0、1、2、3代表;在左轉(zhuǎn)右轉(zhuǎn)和后轉(zhuǎn)中,每轉(zhuǎn)一次向就更新一次當(dāng)前的絕對方向,然后向前行進(jìn)一步并更新當(dāng)前坐標(biāo),然后將當(dāng)前坐標(biāo)與終點(diǎn)坐標(biāo)比較,若當(dāng)前坐標(biāo)為終點(diǎn)坐標(biāo),則蜂鳴器響一聲表示已到達(dá)終點(diǎn)坐標(biāo);否則繼續(xù)用右手法則探路直到到達(dá)終點(diǎn)坐標(biāo)為止。右手法則:3.3.3 程序設(shè)計(jì)1.頭文件#include #de

15、fine ICP 35/位定義左右電機(jī)sbit ML1=P20;sbit ML2=P21;sbit MR1=P22;sbit MR2=P23;/指示燈接口定義sbit LED1=P00;sbit LED2=P01;sbit LED3=P02;sbit LED4=P03;sbit LED5=P04;sbit LED6=P05;sbit LED7=P06;sbit LED8=P07;/紅外地址接口定義(74HC138譯碼器sbit A0=P12;sbit A1=P13;sbit A2=P14;/紅外傳感器接口定義sbit irR1=P25;/左外sbit irR2=P26;/中sbit irR3=

16、P27;/右外sbit irR4=P36;/左sbit irR5=P37;/右/按鍵接口定義sbit key=P10;/蜂鳴器接口定義sbit SPEAK=P24;2.符號定義#includehys.hbit irL,irR,irZ,irZL,irZR; /依次為左、右、前、左前、右前unsigned char endX,endY,X,Y,exchangeX,exchangeY,Count0,Count1; unsigned char now_direct; /絕對方向unsigned char arrived; /定義到達(dá)終點(diǎn)坐標(biāo)時(shí)要用到的的一個(gè)符號3.延時(shí)函數(shù)代碼/在24M晶振下,延時(shí)1m

17、s,12M倍頻void delay(unsigned char ms)unsigned char X;while(ms-)X=250;while(-X);/延時(shí)250us X=250;while(-X);/延時(shí)250usX=250;while(-X);/延時(shí)250us X=250;while(-X);/延時(shí)250us4.驅(qū)動配置代碼/*電機(jī)驅(qū)動函數(shù)*/左電機(jī)停止void STOPML()ML1=0;ML2=0;/右電機(jī)停止void STOPMR()MR1=0;MR2=0;/啟動左電機(jī)void RUNML(bit i)if(i)ML1=1;ML2=0;elseML1=0;ML2=1;/啟動右電機(jī)

18、void RUNMR(bit i)if(i)MR1=1;MR2=0;elseMR1=0;MR2=1;/*電機(jī)初始化函數(shù)*/void init_motor()ML1=0;ML2=0;MR1=0;MR2=0;5.中斷函數(shù)代碼/T2中斷周期設(shè)定函數(shù),最大30msvoid set_Timer2(unsigned int m)TH2=RCAP2H=(65535-m)/256;TL2=RCAP2L=(65535-m)%256;/設(shè)定T2自動重裝載寄存器和計(jì)數(shù)器初值void init_Timer2(unsigned int m)/中斷定時(shí)獲取 傳感器返回的值EA=1;ET2=1;TH2=RCAP2H=(65

19、535-m)/256;TL2=RCAP2L=(65535-m)%256;/設(shè)定T2自動重裝載寄存器和計(jì)數(shù)器初值/捕捉/自動重載寄存器TR2=1;/*中斷函數(shù)*/T0中斷函數(shù)/右電機(jī)void timer0() interrupt 1/外部中斷1/工作模式2.自動重裝初值Count0+;/T1中斷函數(shù)/左電機(jī)void timer1() interrupt 3 /外部中斷2/工作模式2.自動重裝初值Count1+;/T2中斷函數(shù)void Timer2() interrupt 5static unsigned char intC=1,irNo=1;TF2=0;/軟件清除溢出中斷標(biāo)志位/中斷服務(wù)代碼if

20、(intC=1)switch(irNo)case 1:A0=0;A1=0;A2=0;intC=1;set_Timer2(2000);/發(fā)射2usbreak;case 2:if(irR1) /如果irR1為高電平irZL=0; /沒有障礙物 置低電平0LED1=1; /熄滅LED燈else /如果irR1低電平irZL=1; /有障礙物 置高電平1LED1=0; /點(diǎn)亮LED燈A0=1;A1=0;A2=0;intC=1;set_Timer2(2000);break;case 3:if(irR2)irZ=0;LED2=1;else irZ=1;LED2=0;A0=0;A1=1;A2=0;intC=

21、1;set_Timer2(2000);break;case 4:if(irR3)irZR=0;LED3=1;else irZR=1;LED3=0;A0=1;A1=1;A2=0;intC=1;set_Timer2(2000);break;case 5:if(irR4)irL=0;LED4=1;else irL=1;LED4=0;A0=0;A1=0;A2=1;intC=1;set_Timer2(2000);break;case 6:if(irR5)irR=0;LED5=1;else irR=1;LED5=0;A0=1;A1=1;A2=1;intC=2;set_Timer2(20000);break

22、;if(irNo6)irNo+;else irNo=1;elseintC-;6.系統(tǒng)初始化函數(shù)代碼/*/系統(tǒng)初始化函數(shù)void init_system()/起點(diǎn)坐標(biāo)初始化X=0;Y=0;/設(shè)置終點(diǎn)坐標(biāo)endX=7;endY=7;/小車的當(dāng)前方向初始化now_direct=0;/變量初始化Count0=0;Count1=0;init_motor();/初始化T2,自動傳感器采樣init_Timer2(2000);arrived=0;key=0;7.紅外傳感器void ir_Test()if(irZL)LED1=0;elseLED1=1;if(irL)LED4=0;elseLED4=1;if(ir

23、Z)LED2=0;elseLED2=1;if(irZR)LED3=0;elseLED3=1;if(irR)LED5=0;elseLED5=1;/delay(100);8.轉(zhuǎn)彎函數(shù)/*向左轉(zhuǎn)函數(shù)(轉(zhuǎn)的角度通過參數(shù)控制)*/void left(unsigned char m)/T0初始化EA=1;/打開總開關(guān)ET0=1;/開T0中斷TMOD&=0xf6;TMOD|=0x06;/設(shè)定T0模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH0=256-ICP;TL0=256-ICP;/設(shè)定T0計(jì)數(shù)初值,定義中斷脈沖數(shù)TR0=1;/啟動T0計(jì)數(shù)/T1初始化EA=1;/打開總開關(guān)ET1=1;/開T1中斷TMOD&=0x6

24、f;TMOD|=0x60;/設(shè)定T1模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH1=256-ICP;TL1=256-ICP;/設(shè)定T1計(jì)數(shù)初值,定義中斷脈沖數(shù)TR1=1;/啟動T1計(jì)數(shù)Count0=0;Count1=0;while(Count0m)|(Count1m)if(Count0Count1)STOPML();/左輪停止RUNMR(1);/右輪正轉(zhuǎn)else STOPMR();/右輪停止RUNML(0);/左輪反轉(zhuǎn)STOPML();STOPMR();/*向右轉(zhuǎn)函數(shù)(轉(zhuǎn)的角度通過參數(shù)控制)*/void right(unsigned char m)/T0初始化EA=1;/打開總開關(guān)ET0=1;/開T0

25、中斷TMOD&=0xf6;TMOD|=0x06;/設(shè)定T0模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH0=256-ICP;TL0=256-ICP;/設(shè)定T0計(jì)數(shù)初值,定義中斷脈沖數(shù)TR0=1;/啟動T0計(jì)數(shù)/T1初始化EA=1;/打開總開關(guān)ET1=1;/開T1中斷TMOD&=0x6f;TMOD|=0x60;/設(shè)定T1模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH1=256-ICP;TL1=256-ICP;/設(shè)定T1計(jì)數(shù)初值,定義中斷脈沖數(shù)TR1=1;/啟動T1計(jì)數(shù)Count0=0;Count1=0;while(Count0m)|(Count1m)if(Count0Count1) STOPML();/左輪停止RU

26、NMR(0);/右輪反轉(zhuǎn)else STOPMR();/右輪停止RUNML(1);/左輪正轉(zhuǎn)STOPML();STOPMR();/*向左轉(zhuǎn)、右轉(zhuǎn)、轉(zhuǎn)身*/void turnleft()/左轉(zhuǎn)90度并更新當(dāng)前絕對方向left(35);now_direct=(now_direct+3)%4;/修正當(dāng)前方向?yàn)榻^對方向void turnright()/右轉(zhuǎn)90度并更新當(dāng)前絕對方向 right(35);now_direct=(now_direct+1)%4;/修正當(dāng)前方向?yàn)榻^對方向void turnback()/向后轉(zhuǎn)更并新當(dāng)前絕對方向left(72);now_direct=(now_direct+2)%

27、4; /修正當(dāng)前方向?yàn)榻^對方向9.前進(jìn)一步函數(shù)/*走一步函數(shù)(每走一步就判斷是否到達(dá)終點(diǎn))*/void Go_one_step()unsigned char tmp0,tmp1;/T0初始化EA=1;/打開總開關(guān)ET0=1;/開T0中斷TMOD&=0xf6;TMOD|=0x06;/設(shè)定T0模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH0=256-ICP;TL0=256-ICP;/設(shè)定T0計(jì)數(shù)初值,定義中斷脈沖數(shù)TR0=1;/啟動T0計(jì)數(shù)/T1初始化EA=1;/打開總開關(guān)ET1=1;/開T1中斷TMOD&=0x6f;TMOD|=0x60;/設(shè)定T1模式2,8位自動重裝值定時(shí)計(jì)數(shù)器TH1=256-ICP;T

28、L1=256-ICP;/設(shè)定T1計(jì)數(shù)初值,定義中斷脈沖數(shù)TR1=1;/啟動T1計(jì)數(shù)Count0=0;Count1=0;while(Count086)|(Count1Count1)STOPMR();/右輪停止RUNML(1);/正轉(zhuǎn)左輪elseSTOPML();/左輪停止RUNMR(1);/正轉(zhuǎn)右輪xy_repair(); /更新當(dāng)前坐標(biāo)arrive(); /判斷是否到達(dá)指定坐標(biāo) init_motor();/初始化電機(jī)10.右手法則/*右手法則*/void righthand()switch(now_direct)case 0: / 當(dāng)前方向向北if(!irR) /如果右邊沒有障礙turnrig

29、ht(); /先向右轉(zhuǎn)并更新絕對方向Go_one_step();/再前進(jìn)一步并且更新坐標(biāo)并判斷是否到達(dá)指定坐標(biāo)break;if(!irZ) /如果前方?jīng)]有障礙Go_one_step();/向前走一步并且更新坐標(biāo)并判斷是否到達(dá)指定坐標(biāo)break;if(!irL) /如果左方?jīng)]有障礙物turnleft(); /先左轉(zhuǎn)并更新絕對方向Go_one_step(); /再前進(jìn)一步并且更新坐標(biāo)并判斷是否到達(dá)指定坐標(biāo)break;else /如果左、右、前方都有障礙物turnback();/先向后轉(zhuǎn)并更新絕對方向Go_one_step();/再前進(jìn)一步并且更新坐標(biāo)并判斷是否到達(dá)指定坐標(biāo)break;case 1:

30、/當(dāng)前方向向東if(!irR)turnright();Go_one_step();break;if(!irZ)Go_one_step();break;if(!irL)turnleft();Go_one_step();break;elseturnback();Go_one_step();break;case 2:/當(dāng)前方向向南if(!irR)turnright();Go_one_step();break;if(!irZ)Go_one_step();break;if(!irL)turnleft();Go_one_step();break;elseturnback();Go_one_step();break;case 3: /當(dāng)前方向向西if(!irR)turnright();Go_one_step();break;if(!irZ)Go_one_step();break;if(!irL)turnleft();Go_one_step();break;elseturnback();Go_o

溫馨提示

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

評論

0/150

提交評論