版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 電子產(chǎn)品精密運(yùn)輸管理合同
- 旅游度假村土石運(yùn)輸協(xié)議
- 教育器材安全運(yùn)輸范本
- 電力設(shè)備配送合同模板范本
- 森林公園步道地板更換樣本
- 車(chē)間自動(dòng)化設(shè)備配電合同
- 畫(huà)廊經(jīng)典裝修合同文本
- 高鐵站候車(chē)室裝修合同
- 物流運(yùn)輸居間服務(wù)合同范本
- 酒店綠化景觀
- 道岔鋁熱焊接施工方案
- 輸電線路工程監(jiān)理細(xì)則
- 青島啤酒博物館調(diào)查報(bào)告
- 煤礦機(jī)電設(shè)備各種設(shè)備技術(shù)參數(shù)一機(jī)一檔
- 《材料性能學(xué)》教案
- 潛水作業(yè)及水下措施
- 室外工程招標(biāo)文件
- 2023年廣西百色市八年級(jí)上學(xué)期物理期中教學(xué)質(zhì)量檢測(cè)試卷附答案
- 動(dòng)物檢疫檢驗(yàn)考試題庫(kù)(含答案)
- 光模塊行業(yè)研究報(bào)告:AIGC大時(shí)代光模塊產(chǎn)業(yè)迎風(fēng)啟航-20230414-浙商證券-41正式版
- 年產(chǎn)60萬(wàn)噸合成氨104萬(wàn)噸尿素項(xiàng)目可行性計(jì)劃書(shū)
評(píng)論
0/150
提交評(píng)論