智能小車(chē)程序_第1頁(yè)
智能小車(chē)程序_第2頁(yè)
智能小車(chē)程序_第3頁(yè)
智能小車(chē)程序_第4頁(yè)
智能小車(chē)程序_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、智能小車(chē)程序默認(rèn)分類   2009-08-24 09:32   閱讀367   評(píng)論5   字號(hào): 大大  中中  小小  #include "reg52.h"#define det_Dist 2.55     /單個(gè)脈沖對(duì)應(yīng)的小車(chē)行走距離,其值為車(chē)輪周長(zhǎng)/4#define RD 9 /小車(chē)對(duì)角軸長(zhǎng)度#define PI 3.1415926#define ANG_90 90#define ANG_90_T 102#define

2、 ANG_180 189/*=全局變量定義區(qū)=*/sbit P10=P10; /控制繼電器的開(kāi)閉sbit P11=P11; /控制金屬接近開(kāi)關(guān)sbit P12=P12; /控制顏色傳感器的開(kāi)閉sbit P07=P07; /控制聲光信號(hào)的開(kāi)啟sbit P26=P26; /接收顏色傳感器的信號(hào),白為0,黑為1sbit P24=P24; /左 sbit P25=P25; /右 接收左右光傳感器的信號(hào),有光為0unsigned char mType=0; /設(shè)置運(yùn)動(dòng)的方式,0 向前 1 向左 2 向后 3 向右unsigned char Direction=0; /小車(chē)的即時(shí)朝向 0 朝上 1 朝左

3、2 朝下 3 朝右unsigned sX=50; unsigned char sY=0; /小車(chē)的相對(duì)右下角的坐標(biāo) CM(sX,sY)unsigned char StartTask=0; /獲得鐵片后開(kāi)始執(zhí)行返回卸貨任務(wù),StartTask置一unsigned char Inter_EX0=0; / 完成一個(gè)完整的任務(wù)期間只能有一次外部中斷            / Inter_EX0記錄外部中斷0的中斷狀態(tài)      

4、60;     / 0 動(dòng)作最近的前一次未中斷過(guò),             / 1 動(dòng)作最近的前一次中斷過(guò)unsigned char cntIorn=0; /鐵片數(shù)unsigned char bkAim=2; /回程目的地,0為A倉(cāng)庫(kù),1為B倉(cāng)庫(kù),2為停車(chē)場(chǎng),           /(在MAIN中接受鐵片顏色判斷傳感器的信號(hào)來(lái)賦值)unsigned

5、 char Light_Flag=0;/進(jìn)入光引導(dǎo)區(qū)的標(biāo)志(1)unsigned int cntTime_5Min=0;/時(shí)間周期數(shù),用于 T0 精確定時(shí)unsigned int cntTime_Plues=0; /霍爾開(kāi)關(guān)產(chǎn)生的脈沖數(shù)/*=全局變量定義區(qū)=*/*-*/*-通用延遲程序-*/*-*/void delay(unsigned int time)     / time*0.5ms延時(shí)unsigned int i,j;for(j=0;j<time;j+)        &

6、#160;   for(i=0;i<60;i+);/*-*/*-顯示控制模塊-*/*-*/*數(shù)碼管顯示,顯示鐵片的數(shù)目(設(shè)接在P0,共陰)*/void Display(unsigned char n) char Numb12=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x37,0x77;P0=Numbn;/*-*/*-傳感器模塊-*/*-*/*光源檢測(cè)程序:         */*用于糾正小車(chē)運(yùn)行路線的正確性*/unsigned c

7、har LightSeek() void Display(unsigned char);bit l,r;l=P24;r=P25;if(l=0&&r=1)          /Display(1);      return (3);     /偏左,向右開(kāi)     if(r=0&&l=1)      

8、0;   /Display(3);      return(1); /偏右,向左開(kāi)     if(l=1&&r=1)|(l=0&&r=0)       /Display(9);     return(0); /沒(méi)有偏離,前進(jìn)      /*鐵片檢測(cè)程序:    

9、60;          */*判斷鐵片的顏色,設(shè)定bkAim,0為A倉(cāng)庫(kù),1為B倉(cāng)庫(kù),2為停車(chē)場(chǎng)*/void IornColor()      delay(4000);     bkAim=(int)(P26);     Display(int)(P26)+2);/*-*/*-運(yùn)動(dòng)控制模塊-*/*-*/*=基本動(dòng)作層:完成基本運(yùn)動(dòng)動(dòng)作的程序集=*/*運(yùn)動(dòng)調(diào)整程序:  

10、;     */*對(duì)小車(chē)的運(yùn)動(dòng)進(jìn)行微調(diào)*/void ctrMotor_Adjust(unsigned char t)if(t=0)          P2=P2&240|11; /用來(lái)解決兩電機(jī)不對(duì)稱的問(wèn)題     delay(6);     if(t=3)           P2=P2&2

11、50; /向左走      delay(1);     if(t=1)           P2=(P2&245);      delay(1);     /向右走     P2=(P2&240)|15);delay(10);/*直走程序:   

12、;             */*控制小車(chē)運(yùn)動(dòng)距離,dist為運(yùn)動(dòng)距離(cm),type為運(yùn)動(dòng)方式(0 2)*/*只改變小車(chē)sX 和 sY的值而不改變Direction的值.       */void ctrMotor_Dist(float dist,unsigned char type) unsigned char t=0;mType=type;P2=(P2&240)|15);cntTime_Plues=(

13、int)(dist/det_Dist);while(cntTime_Plues)           if(Inter_EX0=1&&StartTask=0)                    cntTime_Plues=0;       

14、 break;              if(Light_Flag=1)     t=LightSeek();            if(type=0) /向前走           P2=P2&249;   

15、;   delay(40);      ctrMotor_Adjust(t);            if(type=2) /向后退               P2=P2&246;      delay(50);  &#

16、160;   ctrMotor_Adjust(t);           P2=(P2&240)|15);      if(mType=2) delay(60);/剎車(chē)制動(dòng) 0.5ms       else delay(75);     /*拐彎程序:      

17、0;      */*控制小車(chē)運(yùn)動(dòng)角度,type為運(yùn)動(dòng)方式(1 3)     */*只改變小車(chē)Direction的值而不改變sX 和 sY的值*/void ctrMotor_Ang(unsigned char ang,unsigned char type,unsigned char dir) unsigned char i=0;mType=type;P2=(P2&240)|15);cntTime_Plues=(int)(PI*RD*90/(180*det_Dist)*1.2)*ang/90);wh

18、ile(cntTime_Plues)                     if(Inter_EX0=1&&StartTask=0)                    cntTime_Plues=0; 

19、60;      break;               if(type=1) /向左走           P2=P2&250;      delay(100);      ctrMotor_Adjust(0);

20、60;           if(type=3) /向右走               P2=P2&245;      delay(100);      ctrMotor_Adjust(0);     P2=(P2&240)

21、|15);       delay(50);/剎車(chē)制動(dòng) 0.5ms        if(!(Inter_EX0=1&&StartTask=0)                    Direction=dir;      &

22、#160; /*=基本路線層:描述小車(chē)基本運(yùn)動(dòng)路線的程序集=*/*當(dāng)小車(chē)到達(dá)倉(cāng)庫(kù)或停車(chē)場(chǎng)時(shí),放下鐵片或停車(chē)(0,1為倉(cāng)庫(kù),2為停車(chē)場(chǎng))*/void rchPlace() unsigned int time,b,s,g;time=(int)(cntTime_5Min*0.065535);/只有一個(gè)數(shù)碼管時(shí),輪流顯示全過(guò)程秒數(shù) 個(gè) 十 百b=time%100;s=(time-b*100)%100;g=(time-b*100-s*10)%10;if(bkAim=2)           /到達(dá)停車(chē)場(chǎng)了,停車(chē) &

23、#160;    EA=0;      P2=(P2&240)|15);      while(1)                 Display(10); /N         delay(2000);  &

24、#160;      Display(cntIorn);         delay(2000);         Display(11);/A         delay(2000);      Display(b);   &#

25、160;  delay(2000);      Display(s);      delay(2000);      Display(g);      delay(2000);                 else   

26、60;            if(Inter_EX0=1&&StartTask=1)P10=0; /到達(dá)倉(cāng)庫(kù),卸下鐵片       /*無(wú)任務(wù)模式:              */*設(shè)置小車(chē)的固定運(yùn)動(dòng)路線,未發(fā)現(xiàn)鐵片時(shí)的運(yùn)動(dòng)路線*/void BasicRoute()   

27、    /Light_Flag=1;       ctrMotor_Dist(153,0);       /Light_Flag=0;       ctrMotor_Ang(ANG_90,1,1);       ctrMotor_Dist(100-sX,0);ctrMotor_Dist(125,2);  &#

28、160;    ctrMotor_Dist(73,0);       ctrMotor_Ang(ANG_90,1,2);       /Light_Flag=1;       ctrMotor_Dist(153,0);       /Light_Flag=0;      

29、; ctrMotor_Ang(ANG_180,1,0);       rchPlace();    /*任務(wù)模式:         */*設(shè)置小車(chē)的發(fā)現(xiàn)鐵片后的運(yùn)動(dòng)路線*/void TaskRoute()/基本運(yùn)行路線表,記載拐彎 0 向前 1 左拐 2 向后 3 右拐,正讀去A區(qū);反讀去B區(qū)StartTask=1;ctrMotor_Ang(ANG_90_T,1,2);if(bkAim=1)   

30、     /倉(cāng)庫(kù)A               ctrMotor_Dist(10,0);     P2=(P2&240)|15);      delay(60);        ctrMotor_Ang(ANG_90_T,1,3);  

31、60;     ctrMotor_Dist(100-sX,2);        ctrMotor_Ang(ANG_90_T,1,2);        Light_Flag=1;        ctrMotor_Dist(153,2);     Light_Flag=0;   &#

32、160;   / ctrMotor_Ang(208,1,0);              else if(bkAim=0)      /倉(cāng)庫(kù)B                     ctrMotor_Dist(10,0

33、);      P2=(P2&240)|15);      delay(60);            ctrMotor_Ang(ANG_90_T,1,3);            ctrMotor_Dist(100-sX,0);   

34、60;        ctrMotor_Ang(ANG_90_T,1,0);            Light_Flag=1;            ctrMotor_Dist(153,2);          

35、;  Light_Flag=0;            /ctrMotor_Ang(208,1,0);                delay(5000);              rchPlace();/*-*/*

36、-主程序段-*/*-*/void main()delay(4000);P2=0xff; /初始化端口P07=0; P1=0;TMOD=0x01; /初始化定時(shí)器0/1 及其中斷TL0=0; TH0=0;TR0=1;ET0=1;ET1=1;IT0=1;     /初始化外部中斷EX0=1;IT1=1;EX1=1;EA=1;P11=1;while(1)            Display(cntIorn);     &

37、#160;  bkAim=2;    BasicRoute();       if(Inter_EX0=1)            TaskRoute();/按獲得鐵片后的路線運(yùn)動(dòng)      IE0=0;      EX0=1;       

38、0;    Inter_EX0=0;             /*-*/*-中斷程序段-*/*-*/*定時(shí)器0中斷程序:          */*當(dāng)時(shí)間過(guò)了5分鐘,則就地停車(chē)并進(jìn)入休眠狀態(tài)*/void tmOver(void) interrupt 1cntTime_5Min+;TL0=0;TH0=0;if(cntTime_5Min>=4520)   &

39、#160;          Display(5);       P2=(P2&240)|15);       EA=0; /停車(chē)程序       P07=1;delay(4000);PCON=0X00;while(1); /*外部中斷0中斷程序:       

40、        */*發(fā)現(xiàn)鐵片,發(fā)出聲光信號(hào)并將鐵片吸起,發(fā)光二極管和蜂鳴器*/*并聯(lián)在一起(設(shè)接在P07). 0為A倉(cāng)庫(kù),1為B倉(cāng)庫(kù),2為停車(chē)場(chǎng)*/void fndIorn(void) interrupt 0 unsigned char i;P10=1; P2=(P2&240)|15);     /停車(chē)P07=1;delay(1000);/剎車(chē)制動(dòng) 0.5msP07=0;Inter_EX0=1;cntIorn+;Display(cntIorn);for(i=0;i<40

41、;i+)      P2=P2&249;      delay(2);      P2=(P2&240)|15);      delay(2);      P2=P2&249;delay(100);P2=(P2&240)|15);     /停車(chē)IornColor(); 

42、60;   /判斷鐵片黑白,設(shè)置bkAimfor(i=0;i<95;i+)      P2=P2&249;      delay(3);      P2=(P2&240)|15);      delay(2);      P2=(P2&240)|15);     /停車(chē)

43、delay(4000); /把鐵片吸起來(lái) EX0=0;/*外部中斷1中斷程序:                */*對(duì)霍爾開(kāi)關(guān)的脈沖記數(shù),對(duì)小車(chē)的位置進(jìn)行記錄,以便對(duì)小車(chē)進(jìn)行定位*/void stpMove(void) interrupt 2 cntTime_Plues-;if(Direction=0)     /向上        &#

44、160;     if(mType=0) sY+=det_Dist;           else     if(mType=2)        sY-=det_Dist;            else if(Direction=1) &

45、#160;   /向左                           if(mType=0) sX+=det_Dist;               else     if(mType=2)        sX-=det_Dist;                     &#

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論