智能小車設(shè)計(jì)報(bào)告智能小車設(shè)計(jì)報(bào)告
《智能小車設(shè)計(jì)報(bào)告智能小車設(shè)計(jì)報(bào)告》由會(huì)員分享,可在線閱讀,更多相關(guān)《智能小車設(shè)計(jì)報(bào)告智能小車設(shè)計(jì)報(bào)告(37頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、 電子設(shè)計(jì)大賽設(shè)計(jì)報(bào)告 題目名稱_____智能搬運(yùn)小車 __ 學(xué)生學(xué)院___物理與光電工程學(xué)院 _ 隊(duì)員 莊偉林 林鑒杰 陳奕利 2009年 5月 1日 裝配圖(正面) 智能搬運(yùn)小車設(shè)計(jì)報(bào)告 一、 總體框架 (1)、本搬動(dòng)小車通過單片機(jī)AT89S52,用三個(gè)373分時(shí)輸入外部信號(hào),通過分析處理,再用一個(gè)573芯片輸出步進(jìn)電機(jī)驅(qū)動(dòng)信號(hào),成功地實(shí)現(xiàn)了取放黑鐵,尋找右光源和左光源的功能。 (2)、電路方框圖。 步進(jìn)電機(jī)運(yùn)轉(zhuǎn) 直流電機(jī)驅(qū)動(dòng)取放鐵片 普
2、通光敏電阻控測(cè)光源 光敏對(duì)管PRP控測(cè)黑鐵片 輸出聲光信號(hào) (3)系統(tǒng)總框圖。 四相六線步進(jìn)電機(jī) LM2003 主控芯片AT89S52 系統(tǒng)總框圖 二、硬件實(shí)現(xiàn)及單元電路設(shè)計(jì)。 1、主控芯片AT89S52。 AT89S52 主要性能; 與MCS-51單片機(jī)產(chǎn)品兼容 、8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器、 1000次擦寫周期、 全靜態(tài)操作:0Hz~33Hz 、 三級(jí)加密程序存儲(chǔ)器 、 32個(gè)可編程I/O口線 、三個(gè)16位定時(shí)器/計(jì)數(shù)器 八個(gè)中斷源 、全雙工UART串行通道、 低功耗空閑和掉電模式 、掉電后中斷可喚醒
3、 、看門狗定時(shí)器 、雙數(shù)據(jù)指針 、掉電標(biāo)識(shí)符 。 功能特性描述 At89s52 是一種低功耗、高性能CMOS8位微控制器,具有 8K 在系統(tǒng)可編程Flash 存儲(chǔ)器。使用Atmel 公司高密度非 易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完 全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8 位CPU 和在系統(tǒng) 可編程Flash,使得AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提 供高靈活、超有效的解決方案。 AT89S52具有以下標(biāo)準(zhǔn)功能: 8k字節(jié)Flash,256字節(jié)RAM, 32 位I/O 口線,看門狗定時(shí)器,2 個(gè)數(shù)據(jù)指針,
4、三個(gè)16 位 定時(shí)器/計(jì)數(shù)器,一個(gè)6向量2級(jí)中斷結(jié)構(gòu),全雙工串行口, 片內(nèi)晶振及時(shí)鐘電路。另外,AT89S52 可降至0Hz 靜態(tài)邏輯操作,支持2種軟件可選擇節(jié)電模式??臻e模式下,CPU 停止工作,允許RAM、定時(shí)器/計(jì)數(shù)器、串口、中斷繼續(xù)工 作。掉電保護(hù)方式下,RAM內(nèi)容被保存,振蕩器被凍結(jié), 單片機(jī)一切工作停止,直到下一個(gè)中斷或硬件復(fù)位為止。8 位微控制器 8K 字節(jié)在系統(tǒng)可編程 Flash AT89S52。 2、直流電機(jī)驅(qū)動(dòng)取放鐵片。 考慮到電磁鐵耗電很大,所以我們選擇用直流電機(jī)機(jī)械方式實(shí)現(xiàn)鐵片的取放。 通過L298芯片驅(qū)動(dòng),用直流電機(jī)實(shí)現(xiàn)磁鐵的磁鐵上升(放下鐵塊)
5、或下降(吸上鐵片)。 我們考慮了幾種方案實(shí)現(xiàn)直流電機(jī)的驅(qū)動(dòng); L298電路圖如下。 直流電機(jī)驅(qū)動(dòng)電路圖 L298電路圖 升上磁鐵,放下鐵片 天然磁鐵 平衡臂 步進(jìn)電機(jī) 直流電機(jī) 鐵片 萬向輪 放下鐵片 放鐵片原理圖 直流電機(jī) 天然磁鐵 平衡臂 步進(jìn)電機(jī) 放下磁鐵,吸上鐵片 鐵片 萬向輪 取鐵片原理圖
6、 3、 探測(cè)黑白鐵片與邊界。 以下為我們考慮的方案; 我們使用PRP光電對(duì)管實(shí)現(xiàn)對(duì)黑白鐵以及邊界的探測(cè)。 光電對(duì)管實(shí)物圖 電壓比較器TL084 信號(hào)處理實(shí)物圖 PRP光電一體化對(duì)管原理圖 R2 1M 光電對(duì)管檢測(cè)電路圖 4、 步進(jìn)電機(jī)與驅(qū)動(dòng)。 方案選擇;由于本系統(tǒng)為智能電動(dòng)車,其驅(qū)動(dòng)輪的驅(qū)動(dòng)電機(jī)的選擇就顯得十分重要。由于小車要實(shí)現(xiàn)對(duì)路徑的準(zhǔn)確定位和精確測(cè)量,我們綜合考慮了一下兩種方案: 方案1;采用步進(jìn)電機(jī)作為該系統(tǒng)的驅(qū)動(dòng)電機(jī)。由于其轉(zhuǎn)過的角度可以精確地定位,可以實(shí)現(xiàn)小車前進(jìn)路程和位置的
7、精確確定位。 方案2:采用直流減速電機(jī)。直流減速電機(jī)轉(zhuǎn)動(dòng)力矩大,體積小,重量輕,裝配方便,但是不能做到很好的定位。 權(quán)衡利弊,我們選擇了第一方案。 小車驅(qū)動(dòng)部份我們選擇用二相六線步進(jìn)電機(jī)。因?yàn)椴竭M(jìn)電機(jī)可以很好地實(shí)現(xiàn)同步與精確控制功能,但是缺點(diǎn)是耗電大,震動(dòng)大。但權(quán)衡利弊,與直流電機(jī)相雙,步進(jìn)電機(jī)驅(qū)動(dòng)力強(qiáng)大,所以我們選擇用步進(jìn)電機(jī)。 步進(jìn)電機(jī)作為執(zhí)行元件,是機(jī)電一體化的關(guān)鍵產(chǎn)品之一, 廣泛應(yīng)用在各種自動(dòng)化控制系統(tǒng)中。隨著微電子和計(jì)算機(jī)技術(shù)的發(fā)展,步進(jìn)電機(jī)的需求量與日俱增,在各個(gè)國民經(jīng)濟(jì)領(lǐng)域都有應(yīng)用。 步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)
8、步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度(稱為“步距角”),它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)行的??梢酝ㄟ^控制脈沖個(gè)數(shù)來控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。步進(jìn)電機(jī)可以作為一種控制用的特種電機(jī),利用其沒有積累誤差(精度為100%)的特點(diǎn),廣泛應(yīng)用于各種開環(huán)控制。 現(xiàn)在比較常用的步進(jìn)電機(jī)包括反應(yīng)式步進(jìn)電機(jī)(vr)、永磁式步進(jìn)電機(jī)(pm)、混合式步進(jìn)電機(jī)(hb)和單相式步進(jìn)電機(jī)等。 永磁式步進(jìn)電機(jī)一般為兩相,轉(zhuǎn)矩和體積較小,步進(jìn)角一般為7.5度 或15度; 反應(yīng)式步進(jìn)電機(jī)一般為三相,可實(shí)現(xiàn)大轉(zhuǎn)矩輸出,步進(jìn)角一般為1.5
9、度,但噪聲和振動(dòng)都很大。反應(yīng)式步進(jìn)電機(jī)的轉(zhuǎn)子磁路由軟磁材料制成,定子上有多相勵(lì)磁繞組,利用磁導(dǎo)的變化產(chǎn)生轉(zhuǎn)矩。 混合式步進(jìn)電機(jī)是指混合了永磁式和反應(yīng)式的優(yōu)點(diǎn)。它又分為兩相和五相:兩相步進(jìn)角一般為1.8度而五相步進(jìn)角一般為 0.72度。這種步進(jìn)電機(jī)的應(yīng)用最為廣泛,也是本次細(xì)分驅(qū)動(dòng)方案所選用的步進(jìn)電機(jī)。 我們的步進(jìn)電機(jī)使用的驅(qū)動(dòng)芯片是lm2003。 步進(jìn)電機(jī)驅(qū)動(dòng)芯片LM2003實(shí)物圖 LM2003芯片原理圖 步進(jìn)電機(jī)實(shí)物圖 LM2003 步進(jìn)電機(jī)驅(qū)動(dòng)相圖 二相六線步進(jìn)電機(jī)接線圖
10、 5、 尋找光源。 當(dāng)光敏二極管正對(duì)光源時(shí),電阻變小,經(jīng)過電壓比較器向單片機(jī)輸入信號(hào)。 尋找光源用的光敏對(duì)管,為了防止干擾,用筆筒套上光敏電阻。 6、 電路板。 我們通過Protel dxp繪制電路圖后,采用熱轉(zhuǎn)印方法制成PCB雙面板。 蜂鳴器與發(fā)光二極管,輸出聲光信號(hào) 74hc373作為光電對(duì)管信號(hào)輸入鎖存器,PO分時(shí)讀取外部鎖存器,實(shí)現(xiàn)單片機(jī)的輸出口和輸入口擴(kuò)展 主控電路AT89S52 輸出鎖存器74hc573,作為單片
11、機(jī)分時(shí)存出的輸出口。 主板穩(wěn)壓電路 1602lcd插口 主電路板實(shí)物圖(正面) 主電路板實(shí)物圖(反面) 主電路板pcb圖 主電路板各部分原理圖如下: 6智能小車程序框圖。 初始化 前進(jìn) 定時(shí)器T2定時(shí)中斷,中斷子程序輸入光電對(duì)管信號(hào),判斷是否遇到黑色信號(hào)或白色信號(hào)。 白鐵 黑鐵 判斷遇到黑鐵或白鐵或邊界 尋找左光源
12、,返回A停車區(qū)。
尋找右光源,返回B停車區(qū)。
否
向前對(duì)齊,繼續(xù)掃描
是否取完3塊鐵片
返回停車區(qū),結(jié)束。
7、 智能小車源程序。
#include
13、; unsigned char idata recordminute2=0,recordsecond2=0,recordsum2=0; unsigned char bdata status=0; unsigned char bdata status1=0; unsigned char bdata status2=0; unsigned char bdata prpflagd; unsigned char bdata prpflage; unsigned int idata time0=0; unsigned long int idata time2=0; unsigned l
14、ong int idata time2_1; unsigned int idata time2_2; unsigned char data motor=0; unsigned char bdata d=0; unsigned char bdata e=0; unsigned char bdata d1=0; unsigned char bdata e1=0; unsigned char lightcount=0; unsigned char v0; unsigned char vb; sbit prp5_0=d1^6; sbit prp5_1=d1^7; s
15、bit prp1_0=d1^4; sbit prp1_1=d1^5; sbit prp6_0=d1^2; sbit prp6_1=d1^3; sbit prp2_0=d1^0; sbit prp2_1=d1^1; sbit prp7_0=e1^6; sbit prp7_1=e1^7; sbit prp3_0=e1^4; sbit prp3_1=e1^5; sbit prp8_0=e1^2; sbit prp8_1=e1^3; sbit prp4_0=e1^0; sbit prp4_1=e1^1; sbit prp5_000=prpflagd^6; sbit p
16、rp5_001=prpflagd^7; sbit prp1_000=prpflagd^4; sbit prp1_001=prpflagd^5; sbit prp6_000=prpflagd^2; sbit prp6_001=prpflagd^3; sbit prp2_000=prpflagd^0; sbit prp2_001=prpflagd^1; sbit prp7_000=prpflage^6; sbit prp7_001=prpflage^7; sbit prp3_000=prpflage^4; sbit prp3_001=prpflage^5; sbit prp8
17、_000=prpflage^2; sbit prp8_001=prpflage^3; sbit prp4_000=prpflage^0; sbit prp4_001=prpflage^1; sbit prp5_00=d^6; sbit prp5_01=d^7; sbit prp1_00=d^4; sbit prp1_01=d^5; sbit prp6_00=d^2; sbit prp6_01=d^3; sbit prp2_00=d^0; sbit prp2_01=d^1; sbit prp7_00=e^6; sbit prp7_01=e^7; sbit pr
18、p3_00=e^4; sbit prp3_01=e^5; sbit prp8_00=e^2; sbit prp8_01=e^3; sbit prp4_00=e^0; sbit prp4_01=e^1; sbit forward=status^0; sbit backward=status^1; sbit turnleft=status^3; sbit turnright=status^2; sbit rightforward=status^5; sbit rightbackward=status^4; sbit leftforward=status^6; sbit
19、 leftbackward=status^7; sbit flag=status1^5; sbit whiteiron=status1^6; sbit blackiron=status2^0; sbit searchiron=status1^0; sbit searchrightlight=status1^1; sbit seachleftlight=status1^2; unsigned char interfere; unsigned char uninterfere; sbit rightorleft=status1^4; sbit unflag=status2
20、^3; sbit foundblack=status2^4; sbit foundwhite=status2^5; sbit foundboundary=status2^6; unsigned char whiteironcount=0; unsigned char blackironcount=0; unsigned char ironcount=0; void timer0initializtion(); void timer2initializtion(); void turnright90degree(); void turnleft90degree()
21、; void putdown(); void goforwardaccelerat(); void gobackwardaccelerat(); void putup(); void foundblackiron(); void foundwhiteiron(); void turnright180degree(); void backwardalign(); void forwardalign(); void estimate(); void boundaryturnright90degree(); void boundaryturnright180degree();
22、 void boundaryturnleft180degree(); void searchlightblackiron(); void oneturnleft80degree(); void oneturnright80degree(); void oneturnright180degree(); void oneturnleft80degree(); void searchlightwhiteiron(); void searchlightwhiteiron(); void scan(); void main() { timer0initia
23、liztion(); timer2initializtion(); time2=0; while(time2<=50); rightorleft=0; status=0; goforwardaccelerat(); flag=0; while(flag==0); estimate(); if(foundboundary==1) { boundaryturnright90degree(); scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } els
24、e { putdown(); searchlightblackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightb
25、lackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } goto end0200; } else { if(foundblack==1) { putdown(); searchlightblackiron(); scan(); estimate(); if(foundwhite==1) { put
26、down(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhite
27、iron(); } else { putdown(); searchlightblackiron(); } goto end0200; } else { if(foundwhite==1) { putdown(); searchlightwhiteiron(); scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); }
28、scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } scan(); estimate(); if(foundwhite==1) { putdown(); searchlightwhiteiron(); } else { putdown(); searchlightblackiron(); } } }
29、 } end0200:while(1); } void goforwardaccelerat() { status=0; forward=1; vb=5; time2=0; while(time2<=8); vb=4; time2=0; while(time2<=8); vb=3; time2=0; while(time2<=8); vb=2; time2=0; while(time2<=8); vb=1; } void gobackwardaccelerat() { status=0; backwa
30、rd=1; vb=5; time2=0; while(time2<=8); vb=4; time2=0; while(time2<=8); vb=3; time2=0; while(time2<=8); vb=2; time2=0; while(time2<=8); vb=1; } void scan() { status=0; while((foundblack!=1)&&(foundwhite!=1)) { goforwardaccelerat(); flag=0; while(flag==0); sta
31、tus=0; estimate(); if(foundboundary==1) { foundboundary=0; if(rightorleft==1) { rightorleft=0; boundaryturnleft180degree(); time2=0; while(time2<=8); status=0; } else { rightorleft=1; boundaryturnright180degree(); time2=0; while(time2<=8); status=0; } } } }
32、 void searchlightblackiron() { unsigned long int lightdalign; rightorleft=0; vb=4; turnright=1; while(prp8_01==1); status=0; time2=0; while(time2<=20); turnright=1; time2=0; while(time2<=30); time2=0; while(prp8_01==1); status=0; if(time2<=180) goto b0173;
33、 status=0; turnright=1; time2=0; while(time2<=20); while(prp8_01==1); time2=0; while(time2<=10); status=0; time2=0; while(time2<=20); b0173: time2_1=0; goforwardaccelerat(); time2=0; while(time2<=40); flag=0; while(flag==0); time2=0; while(time2<=40); status=0; putup(); time2=0;
34、 while(time2<=8); turnright180degree(); goforwardaccelerat(); time2=0; while(time2<=90); b0294: status=0; forward=1; flag=0; while(flag==0); estimate(); if(foundboundary==0) goto b0294; status=0; time2=0; while(time2<=8); gobackwardaccelerat(); forwardalign(); status=0; vb=
35、4; turnright=1; time2=0; while(prp8_01==1); status=0; lightdalign=time2; if(lightdalign<=150) { turnleft=1; time2=0; while(time2<=lightdalign); status=0; turnleft90degree(); turnleft=1; time2=0; while(time2<=20); status=0; time2=0; while(time2<=8); b0621: vb=1; forward=1; fla
36、g=0; while(flag==0); status=0; estimate(); if(foundboundary==1) { forwardalign(); boundaryturnright90degree(); } else goto b0621; } else { time2=0; while(time2<=8); turnleft=1; time2=0; while(time2<=lightdalign); status=0; forwardalign(); boundaryturnright90degree(); } }
37、 void searchlightwhiteiron() { unsigned long int lightdalign; rightorleft=0; vb=4; turnleft=1; while(prp8_01==1); status=0; time2=0; while(time2<=20); turnleft=1; time2=0; while(time2<=30); time2=0; while(prp8_01==1); status=0; if(time2<=180) goto b0374; status=
38、0; turnleft=1; time2=0; while(time2<=20); while(prp8_01==1); time2=0; while(time2<=10); status=0; time2=0; while(time2<=20); b0374: time2_1=0; goforwardaccelerat(); time2=0; while(time2<=40); flag=0; while(flag==0); time2=0; while(time2<=40); status=0; putup(); time2=0; while(t
39、ime2<=8); turnright180degree(); goforwardaccelerat(); time2=0; while(time2<=90); b0410:forward=1; flag=0; while(flag==0); estimate(); if(foundboundary==0) goto b0410; status=0; time2=0; while(time2<=8); gobackwardaccelerat(); forwardalign(); status=0; vb=4; turnleft=1; tim
40、e2=0; while(prp8_01==1); status=0; lightdalign=time2; if(lightdalign<=150) { turnright=1; time2=0; while(time2<=lightdalign); status=0; turnright90degree(); turnright=1; time2=0; while(time2<=20); status=0; time2=0; while(time2<=8); b0431: vb=1; forward=1; flag=0; while(flag==
41、0); status=0; estimate(); if(foundboundary==1) { forwardalign(); boundaryturnright90degree(); } else goto b0431; } else { time2=0; while(time2<=8); turnright=1; time2=0; while(time2<=lightdalign); status=0; forwardalign(); boundaryturnright90degree(); } } void boundary
42、turnright90degree() { status=0; vb=3; backward=1; time2=0; while(time2<=30); vb=4; status=0; turnright=1; time2=0; while(time2<=122); status=0; time2=0; while(time2<=10); } void oneturnright80degree() { status=0; vb=5; leftforward=1; time2=0; while(time2<=215); status=
43、0; time2=0; while(time2<=8); } void oneturnleft180degree() { status=0; vb=5; rightforward=1; time2=0; while(time2<=505); status=0; time2=0; while(time2<=8); } void oneturnright180degree() { status=0; vb=5; leftforward=1; time2=0; while(time2<=505); status=0;
44、time2=0; while(time2<=8); } void oneturnleft80degree() { status=0; vb=5; rightforward=1; time2=0; while(time2<=225); status=0; time2=0; while(time2<=8); } void boundaryturnleft180degree() { status=0; forwardalign(); vb=3; status=0; backward=1;
45、 time2=0; while(time2<=68); status=0; oneturnleft180degree(); time2=0; while(time2<=10); backwardalign(); time2=0; while(time2<=8); } void boundaryturnright180degree() { status=0; forwardalign(); vb=3; status=0; backward=1; time2=0; while(time2<=68); status=0; oneturnrigh
46、t180degree(); time2=0; while(time2<=10); backwardalign(); time2=0; while(time2<=8); } void forwardalign() { vb=4; status=0; backward=1; time2=0; while(time2<=15); unflag=0; while(unflag==0) { time2=0; if(time2>=50) break; } status=0; time2=0; while(time2<=10); forward=
47、1; while(prp4_000==0); status=0; time2=0; while(time2<=10); if((prp7_000==1)&&(prp1_000==0)) { status=0; turnright=1; while(prp1_000==0); status=0; time2=0; while(time2<=10); if(prp7_000==1) { rightbackward=1; while(prp7_000==1); } else { rightforward=1; while(prp7_000==0); }
48、 } else if((prp7_000==0)&&(prp1_000==1)) { status=0; turnleft=1; while(prp7_000==0); status=0; time2=0; while(time2<=10); if(prp1_000==1) { leftbackward=1; while(prp1_000==1); } else { leftforward=1; while(prp1_000==0); } } status=0; time2=0; while(time2<=18); }
49、 void backwardalign() { unsigned char backwardaligncount=0; b0353:backwardaligncount++; status=0; vb=4; forward=1; time2=0; while(time2<=15); unflag=0; while(unflag==0) { time2=0; if(time2>=50) break; } status=0; time2=0; while(time2<=10); backward=1; while(prp4_000==0
50、); status=0; time2=0; while(time2<=10); if((prp6_000==1)&&(prp1_000==0)) { turnleft=1; while(prp1_000==0); status=0; time2=0; while(time2<=10); if(prp6_000==1) { rightforward=1; while(prp6_000==1); } else { rightbackward=1; while(prp6_000==0); } } else if((prp6_000==0)&&
51、(prp1_000==1)) { turnright=1; while(prp6_000==0); status=0; time2=0; while(time2<=10); if(prp1_000==1) { leftforward=1; while(prp6_000==1); } else { leftbackward=1; while(prp6_000==0); } } status=0; time2=0; while(time2<=18); if(backwardaligncount<=3) goto b0353; status=
52、0; } void turnleft90degree() { vb=4; status=0; turnleft=1; time2=0; while(time2<=110); status=0; time2=0; while(time2<=10); } void turnright90degree() { vb=4; status=0; turnright=1; time2=0; while(time2<=115); status=0; time2=0; while(time2<=10); }
53、 void turnright180degree() { vb=4; status=0; turnright=1; time2=0; while(time2<=230); turnright=0; time2=0; while(time2<=15); vb=3; } void putup() { status=0; time2=0; while(time2<=80) { status=0; P1=0x05; } P1=0xff; time2=0; while(time2<=30); time2=0; while(t
54、ime2<=80) { status=0; P1=0x05; } P1=0xff; time2=0; while(time2<=30); time2=0; while(time2<=80) { status=0; P1=0x05; } P1=0xff; } void putdown() { status=0; forward=1; time2=0; while(time2<=3); status=0; time2=0; while(time2<=150) { P1=0x03; } P1=0xff; ti
55、me2=0; while(time2<=8); vb=3; status=0; forward=1; time2=0; while(time2<=16); status=0; time2=0; while(time2<=8); vb=3; status=0; backward=1; time2=0; while(time2<=32); status=0; time2=0; while(time2<=8); forward=1; time2=0; while(time2<=16); status=0; time2=0; while(time2<=
56、8); } void estimate() { unsigned char bj1=0; unsigned char bj2=0; unsigned char bj3=0; unsigned char bj4=0; unsigned char bj5=0; foundblack=0; foundboundary=0; foundwhite=0; e1=e; d1=d; vb=2; forward=1; time2=0; while(time2<=50) { if(prp1_000==1) bj1=1; if(prp3_000=
57、=1) bj2=1; if(prp5_000==1) bj5=1; if(prp7_000==1) bj4=1; if((prp1_001==0)||(prp2_001==0)||(prp3_001==0)||(prp4_001==0)||(prp5_001==0)||(prp6_001==0)||(prp7_001==0)) bj3=1; } status=0; backward=1; time2=0; while(time2<=50); status=0; if(((bj5==1)&&(bj1==1))||((bj2==1)&&(bj4==1))) { fo
58、undboundary=1; } else { if(bj3==1) { foundwhite=1; WR=0; time2=0; while(time2<=18); WR=1; } else { foundblack=1; WR=0; time2=0; while(time2<=18); WR=1; time2=0; while(time2<=18); WR=0; time2=0; while(time2<=18); WR=1; time2=0; while(time2<=18); WR=0; time2=0; while(time2
59、<=18); WR=1; time2=0; while(time2<=18); } } } void timer0initializtion() { TMOD=0X01; TH0=0xd8; TL0=0xef; EA=1; ET0=1; PT0=0; TR0=1; } void timer2initializtion() //50MS { ET2=1; TCLK=0; RCLK=0; CP_RL2=0; T2MOD=0x0; C_T2=0; RCAP2H=0x3c; RCAP2L=0xb0; PT2=1; TR2=1
60、; } void T2interrupt() interrupt 5 { unsigned char idata i; time2++; time2_1++; time2_2++; sum=sum+1; sum1=sum1+1; if(sum==20) { sum=0; second=second+1; if(second==60) { second=0; minute=minute+1; if(minute==60) minute=0; } } if(sum1
61、==20) { sum1=0; second1=second1+1; if(second1==60) { second1=0; minute1=minute1+1; } } RD=0; P2=0x8c; P0=0xff; for(i=0;i<=2;i++); d=P0; d=P0; P2=0x84; P0=0xff; for(i=0;i<=2;i++); e=P0; e=P0; RD=1; P2=0xff; if((d!=0xaa)||((e&0xf3)!=0xa2)) { if(interfere<
62、=2) interfere++; if(interfere==3) { flag=1; prpflagd=d; prpflage=e; interfere=0; } } else interfere=0; if((d==0xaa)&&((e&0xf3)==0xa2)) { if(uninterfere<=3) uninterfere++; if(uninterfere==4) { unflag=1; flag=0; prpflagd=d; prpflage=e; uninterfere=0; } } else uninterf
63、ere=0; TF2=0; } void tO() interrupt 1 //V=9cm/s interrupt time=13ms { TH0=0xcd; TL0=0x38; time0++; v0++; P2=0x9c; if(status==0x01) //V=9cm/s { if(v0>=vb) { v0=0; if(motor==0x18) motor=0x42; else { if(motor==0x42) motor=0x24; else
64、 { if(motor==0x24) motor=0x81; else { if(motor==0x81) motor=0x18; else motor=0x18; } } } } } if(status==0x02) // V=9cm/s { if(v0>=vb) { v0=0; if(motor==0x81) motor=0x24; else { if(motor==0x24) motor=0x42;
65、 else { if(motor==0x42) motor=0x18; else { if(motor==0x18) motor=0x81; else motor=0x18; } } } } } if(status==0x04) { if(v0>=vb) { v0=0; time0=0; if(motor==0x11) motor=0x44; else { if(motor==0x4
66、4) motor=0x22; else { if(motor==0x22) motor=0x88; else { if(motor==0x88) motor=0x11; else motor=0x11; } } } } } if(status==0x08) { if(v0>=vb) { v0=0; time0=0; if(motor==0x88) motor=0x22; else { if(motor==0x22) motor=0x44; else { if(motor==0x44) motor=0x11; else { if(motor==0x11) motor=0x88; else motor=0x11; } }
- 溫馨提示:
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. 裝配圖網(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īng)商質(zhì)量能力評(píng)審準(zhǔn)則-過程和產(chǎn)品審核部分 --songke8519
- 如何建立個(gè)人的交易系統(tǒng)PPT課件
- mapinfo數(shù)字化邯鄲地圖教程課件
- 主管的管理技能
- 峨眉山月歌ppt通用課件
- 微笑的力量-學(xué)會(huì)微笑課件
- 怎樣早期預(yù)防糖尿病并發(fā)癥課件
- 《盲人摸象》課件(精品)
- 大數(shù)據(jù)技術(shù)如何應(yīng)用于傳統(tǒng)的信息系統(tǒng)
- 雙學(xué)位課件——市場(chǎng)營銷產(chǎn)品
- 防拐騙安全教育通用課件
- 冬陽童年駱駝隊(duì)
- 把字句和被字句的轉(zhuǎn)換
- 某針織公司組織結(jié)構(gòu)設(shè)計(jì)方案報(bào)告
- 策略培訓(xùn)英文版10