嵌入式期末考試_第1頁
嵌入式期末考試_第2頁
嵌入式期末考試_第3頁
嵌入式期末考試_第4頁
嵌入式期末考試_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

嵌入式期末考試

嵌入式作品期末設(shè)計

嵌入式作品簡介

作品名稱:多功能智能探測車

制作團隊:

王明睿(硬件電路搭建、整體設(shè)計)

王杰英(面向單片機編程、功能實現(xiàn))

鄭芳芳(資料整理、外圍設(shè)計)

制作時間:20天

指導(dǎo)老師:孫玉軒

創(chuàng)意來源:我們本身身為通信專業(yè)的學(xué)生,并且對電子電路,和對于硬件編程非常感興

趣,所以制作了該課題,主要進行硬件編程,硬件搭建,無線信號的綜合處理。并且有實

際運用價值。

作品意義:搭建硬件并對硬件進行二次開發(fā)編程,達到綜合運用的價值。作品運用環(huán)境

及主要功能:本作品主要應(yīng)用于救援、安防、勘探、偵查、追蹤、等人類不可到達的領(lǐng)

域。本小車可快速組建小區(qū)安防網(wǎng)絡(luò)。對小區(qū)安全進行綜合監(jiān)控。本小車可以對生命物

體、對綜合煙霧氣體探測,并回傳電腦,可以用于救援救災(zāi),本小車可以自動檢測障礙物

體,使小車行進更流暢。本小車可以跟蹤物體進行監(jiān)控,實現(xiàn)了無人自動追蹤。本小車可

以實現(xiàn)超聲波測距并回傳電腦,精度精確到毫米。本小車留有多個I/O口,可以快速擴展

其他模塊,實現(xiàn)更多功能。

下一部需完善:增加小車云臺,使攝像頭上下各45度角旋轉(zhuǎn),增加觀測的范圍。增加數(shù)

據(jù)傳輸?shù)乃俣群蜏?zhǔn)確性,使傳回的信息更豐富、迅速。可以增加3G模塊,使小車在任何

基站覆蓋范圍內(nèi)都能進行遠(yuǎn)程綜合控制利數(shù)據(jù)傳輸。

作品名稱:多功能智能探測車

院系專業(yè):信息工程學(xué)院移動通信專業(yè)

作者:王明睿、王杰英、鄭芳芳

目錄

-、概述---------------------------------P3~P4

二:制作流程-----------------------------P5~P6

三、硬件電路結(jié)構(gòu)--------------------P7~P15

四、硬件編程程序---------------------------P16~P37

五、小車控制方法、視頻存儲方法-------------P38

六、未來發(fā)展----------------------------P39

一、概述:

隨著移動通信業(yè)務(wù)的增加,無線通信已獲得非常廣泛的應(yīng)用。無線網(wǎng)絡(luò)除了提供語音服務(wù)

之外,還提供多媒體、高速數(shù)據(jù)和視頻圖像業(yè)務(wù)。

無線通信環(huán)境(無線信道、移動終端等)以及移動多媒體應(yīng)用業(yè)務(wù)的特點對視頻圖像的視

頻圖像編碼與傳輸技術(shù)—成為當(dāng)今信息科學(xué)與技術(shù)的前沿課題。

該課題圍繞硬件結(jié)構(gòu)搭建,與硬件編程實現(xiàn)為中心,對無線信號進行綜合處理。硬件編程

是重點,同時也是難點。整個作品的軟件使用面向單片機的C語言編寫有以下原因:

1、可以直接對硬件編程,良好的硬件管理,可移植性能良好。

2、用C編寫程序比匯編更符合人們的思考習(xí)慣,開發(fā)者可以擺脫與硬件無必要的接觸,

更專心的考慮功能和算法而不是考慮一些細(xì)節(jié)問題,這樣就減少了開發(fā)和調(diào)試的時間。

3、C語言具有良好的程序結(jié)構(gòu),適用于模塊化程序設(shè)計。

4、系統(tǒng)程序結(jié)構(gòu)清晰,易于調(diào)試和維護。不同的功能模塊,分別指定相應(yīng)的入口參數(shù)和

出口參數(shù),對于一些要重復(fù)調(diào)用的程序一般把其編成函數(shù),這樣可以減少程序代碼的長

度,又便于整個程序的管理。

本小車一共有3種工作方式:

方式一:對小車進行無線遙控,無線視頻傳輸,小車傳感器感應(yīng),并回傳傳感器信息到上

位機

方式二:利用超聲波模塊對物體進行跟蹤,實現(xiàn)無人操作跟蹤物體進行拍攝。

方式三:智能躲避障礙物,無需人為控制,小車自己躲避障礙物,并回傳視頻。

二、制作流程

1、作品構(gòu)思:

如何使用計算機設(shè)計制作出精彩的作品,這是最核心的問題之一,觀察很多計算機作品,

大多利用已有的計算機平臺進行軟件開發(fā),于是我們決定自己搭建自己的硬件電路結(jié)構(gòu),

對硬件進行編程操作,并建立與上位機的綜合通訊。

2、硬件電路搭建:

我們確立課題,以及準(zhǔn)備實現(xiàn)的功能,我們開始搭建硬件電路,硬件電路的卷個模塊的參

數(shù)資料都要非常了解,熟悉運用每個模塊。了解模塊的硬件結(jié)構(gòu),和實現(xiàn)原理,最后把每

個硬件都搭載在我們的核心平臺上(雙STC89C52)o

3、軟件編程:

我們搭載完硬件結(jié)構(gòu),又對硬件進行綜合的運用,第一步,調(diào)試電機控制。第二步,實現(xiàn)

有線對小車電機遙控。第三步、實現(xiàn)無線對小車的電機遙控。第四步,實現(xiàn)無線的視頻傳

輸。第五步,實現(xiàn)人體紅外模塊的獨立功能。第六步、實現(xiàn)人體紅外模塊與小車無線遙控

綜合功能(對小車遙控,和小車回傳)。第七步、分步實現(xiàn)、綜合煙霧信息回傳、酒精氣

體回傳、左右是否有障礙物回傳。第八步、實現(xiàn)超聲波跟蹤功能。(可對物體進行跟蹤、

追蹤拍攝)。第九步、實現(xiàn)超聲波測距,并回傳。

5、最終調(diào)試與銜接。

把每一個獨立的模塊,結(jié)合成一個獨立的窗口顯示。最后達

到綜合探測的目的。把相對獨立的功能結(jié)合。最后使多功能變成綜合功能。

三、硬件電路結(jié)構(gòu)

1、USB轉(zhuǎn)RS232結(jié)構(gòu)電路

2、測速

傳感器

電路

3、核心單片機通訊接口電路,傳感器接口電路,蜂鳴器電路。

4^藍牙串口電路,LCD顯水電路

5、U1\U2核心單片機接口及電路。

6、復(fù)位電路、時鐘電路。

7、直流電動機驅(qū)動電路及工作原理。

8、擴展接口電路

9、直流電機工作原理。

10、傳感器參數(shù)及其資料

O

四、面向硬件編程程序

1、小車無線控制與傳感器數(shù)據(jù)回傳。

(1)U1程序

^include<at89x51.h>

^defineleftP3_2

ftdefinerightP3_3

#definegoP34

#definebackP35

ttdefineleftdata0x11

#definerightdata0x22

#definegodata0x33

ttdefinebackdata0x44

ttdefinemanPl_0〃/定義串口〃

#defineyanPl_l

#definejiuPl_2//

#defineucharunsignedchar

#defineuintunsignedint

unsignedchara,b,flag,flagl=l;

charcodeMESSAGE口="有人:";〃查表顯示〃

charcodeQITI□二〃煙霧:〃;

charcodeALL□=〃酒精:";

voidsend(void);

voiddelay1ms(unsignedintx)〃延時子程序//

(

unsignedinti,j;

for(j=x;j>0;j—)

for(i=75;i>0;i—);

//

}

//初始化工作方式〃

voidInitCom(void)

I

SCON=0x50;〃REN=1允許串行接受狀態(tài),串口工作模式2TM0D|=0x21;〃定時器工作

方式2PC0N|=0x00;〃波特率提高一倍

THl=Oxfd;

TLl=0xfd;//9600波特率

TRI=1;〃開定時器計數(shù)SMO=O;

SM1=1;〃串行工作方式1REN=1;〃允許接收數(shù)據(jù)EA=1;〃開中斷總開關(guān)ES=1;〃允許串

TRO=1;

TFO=O;

ETO=1;

)

voidintTOOinterrupt1{

TH0=-2720/256;TL0=-2720%256;sendO;

}

voidsend(void){unsignedcharw,m,r;if(man==1)

{SBUF=MESSAGE[w];while(TI==0);TI=0;

w++;

b=a=0;

yan=l;

jiu=0;

I

if(yan==0)

{SBUF=QITIH;while(TI==0);TI=0;

m++;

b=a=0;

)

if(jiu-l)

{SBUF=ALL[rhwhile(TI==O);TI=O;

r++;

b=a=O;

}中斷〃發(fā)送傳感器數(shù)據(jù)子程序〃〃〃

)

main()

I

TH0=-2720/256;

TL0=-2720%256;

ETO=1;

InitComO;

while(1)

!

if(flag==l)

(

flag=O;

flagl=l;

if(b!=a)

(

left=l;

right=1;

go=l;

back=l;

)

switch(b)

(

caseleftdata:left=O;break;caserightdata:right=O;break;case

godata:go=0;break;

casebackdata:back=0;break;}

a=b;

flagl=0;

delay1ms(300);

}

else

(

left=l;

right=l;

go=l;

back=l;

I

//if(flagl==0)

//(sendO;

//)

}

}

voidserial()interrupt4〃中斷法{

ETO=0;

flag=l;

flagl=l;

b=SBUF;

RI=0;〃中斷標(biāo)志

ETO=1;

i

(2)U2程序。

〃下載到U2,然后用遙控器控制其方向

^include<at89x51.h>

#defineucharunsignedchar#defineuintunsignedint

voidmotorrz(void);〃右邊電動機正轉(zhuǎn)voidmotor1z(void);〃左邊電動機正轉(zhuǎn)

voidmotor_r_f(void);〃右邊電動機反轉(zhuǎn)void(void);〃左邊電動機反轉(zhuǎn)

voidback(uchar,uchar);〃小車后退voidgo(uchar,uchar);〃小車前進void

stop(void);〃小車停止

voidleft(void);〃小車左轉(zhuǎn)

voidright(void);〃小車右轉(zhuǎn)

sbitPWM1=P2c5;

sbitPWM2=P2-4;

sbitPWM3=P2^1;

sbitPWM4=P2*2;

sbitENI=P2P;

sbitEN2=P23;

sbitleft_k=PO2;

sbitback_k=P05;

sbitgok=PO4;

sbitright_k=P03;

sbitsound=P27;

uchardatat_0;

uchardatamotor_r;

uchardatamotor_l;

uchardataValue;

uchardatamid;

〃**延時子程序**〃/

voidini(void)

////TO初始化〃/

TM0D=0x01;〃T0工作在方式1

THO-Oxff;〃裝入TO初值

TL0=0xf6;

TRO=1;〃開TO中斷

ETO=1;//TO允許中斷

EA=1;

//////////////////////

t_0=0;

/////////////////////

P2=0;

sound=l;

}

voidgo(ucharleft_motor,ucharright_motor)〃直行{

Vaiue=right_motor;

motorrz();

Value=left_motor;

motor_l_z();

}

voidback(ucharleft_motor,ucharrightjnotor)〃后退(

Value=right_motor;

motor_r_f();

Value=leftmotor;

motor_l_f();

I

voidleft(void)〃左轉(zhuǎn)

!

Value=0x45;

motorsz();

Value=0x45;

motor_l_f();

voidright(void)〃右轉(zhuǎn)

Value=0x45;

motorrf();

Value=0x45;

motor_l_z();

I

voidmotor_r_z(void)〃右邊電動機正轉(zhuǎn){

ACC=0x64+Value;

motor_r=ACC;

EN1=1;

voidmotor」_z(void)〃左邊電動機正轉(zhuǎn){

ACC=0x64-Value;

motor_l=ACC;

EN2=1;

i

voidmotor_r_f(void)〃右邊電動機反轉(zhuǎn){

ACC=0x64-Value;

motorr=ACC;

EN1=1;

void(void)〃左邊電動機反轉(zhuǎn){

ACC=0x64+Value;

motor」二ACC;

EN2=1;

I

voidstop(void)

{

EN2=0;

EN1=O;

i

voidtimeO(void)interrupt1using2

!

TRO=O;

TH0=0xff;

TL0=0xf6;

++t_0;

ACC=t0;

CY=O;

ACC-=motor_r;

if(CY=l)

(

PWM1=1;

PWM2=0;

gotoPWM_2;

PWM1=O;

PWM2=1;

PWM2:

ACC=t_O;

CY=O;

ACC-=motor1;

if(CY==l)

I

PWM3=1;

PWM4=0;

gotoHIGHT;

!

PWM3=0;

PWM4=1;

HIGHT:

ACC=t_0;

if(ACC!=0xc9)

gotoEXIT;

ACC=0;

t0=ACC

EXIT:

TRO=1;

voidmain(void){

ini();

〃〃判斷左傳感器狀態(tài)〃〃while(1)

(

aa:

while(left_k)〃當(dāng)左按鍵按下時,left_k等于1.

gotobb;

Pl二Oxff;

P1=PO;

left。;〃向左轉(zhuǎn)

while(!left_k);〃如果left_k一直為一,小車便一直左轉(zhuǎn)stopO;

〃〃判斷右鍵是否按下,注釋請參考上一段〃〃

bb:

while(right_k)

gotodd;

Pl=0xff;

P1=PO;

rightO;

while(!right_k);

stopO;

〃〃判斷向前鍵是否按下〃〃

dd:

while(gok)

gotoee;

Pl二Oxff;

P1=PO;

go(0x64,0x64);

while(!go_k);

stop();

〃〃判斷后退鍵是否按下〃〃

ee:

while(back_k)

gotoaa;

Pl=Oxff;

P1-P0;

back(0x64,0x64);

while(!back_k);

stop();

i

}

2、超聲波跟蹤

(1)UI程序

〃請將此程序下載到U1,并且把兩機通訊開關(guān)的第1位拔至I」ON的狀態(tài)〃另外一條程序下

載到U2

#include<AT89x51.H>〃器件配置文件

ttinclude<intrins.h>

#defineRXP2_0

ttdefineTXP2_l

#defineLCMRWP26〃定義LCD引腳

#defineLCM_RSP2_5

#defineLCM_EP2_7

#defineLCM_DataPO

#defineKey_DataP3_l//定義Keyboard引腳

#defineKey_CLKP3_2

#defineBusy0x80〃用于檢測LCM狀態(tài)字中的Busy標(biāo)識

voidLCMInit(void);〃LCD初始化函數(shù)

voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedchar

DData);//LCD顯示一個字符函數(shù)

voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode

*DData);//LCD顯示一個字符串函數(shù)

voidDelay5Ms(void);〃延時5毫秒函數(shù)

voidDelay400Ms(void);〃延時400毫秒函數(shù)

voidDecode(unsignedcharScanCode);

voidWriteDataLCM(unsignedcharWDLCM);〃LCD1602寫數(shù)據(jù)函數(shù)

voidWriteCommandLCM(unsignedcharWCLCM,BuysC);〃LCD寫命令函數(shù)

//unsignedcharReadDataLCM(void);

unsignedcharReadStatusLCM(void);

unsignedcharcodeRange[]二〃二二RangeFinder=〃;〃LCD1602顯示格式

unsignedcharcodeASCII[13]="0123456789.71〃;

unsignedcharcodetable口二〃Distance:000.0cm〃;

unsignedcharcodetablel口二〃?。?!Outofrange”;

//staticunsignedcharDisNum=0;〃顯示用指針

unsignedinttime=0;

unsignedlongS=0;

bitflag=0;

unsignedchardisbuff[4]={0,0,0,0,};

〃寫數(shù)據(jù)

voidWriteDataLCM(unsignedcharWDLCM)

I

ReadStatusLCMO;〃檢測忙

LCM_Data=WDLCM;

LCM_RS=1;

LCM_RW=0;

LCM_E=0;〃若晶振速度太高可以在這后加小的延時

LCM_E=0;〃延時

LCM_E=1;

}

〃寫指令

voidWriteCommandLCM(unsignedcharWCLCM,BuysC)〃BuysC為0時忽略忙檢測{

if(BuysC)ReadStatusLCMO;〃根據(jù)需要檢測忙

LCM_Data=WCLCM;

LCM_RS二0;

LCMRW=0;

LCM_E=0;

LCM_E=0;

LCM_E=1;

}

〃讀狀態(tài)

unsignedcharReadStatusLCM(void)

!

LCM_Data=OxFF;

LCM_RS=0;

LCM_RW=1;

LCM_E=0;

LCM_E=0;

LCM_E=1;

while(LCMData&Busy);〃檢測忙信號

return(LCMData);

i

voidLCMInit(void)〃LCM初始化

!

LCMData=0;

WriteCommandLCM(0x38,0);〃三次顯示模式設(shè)置,不檢測忙信號

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,0);

Delay5Ms();

WriteCommandLCM(0x38,1);〃顯示模式設(shè)置,開始要求每次檢測忙信號

WriteCommandLCM(0x08,1);〃關(guān)閉顯示

WriteCommandLCM(0x01,1);〃顯示清屏

WriteCommandLCM(0x06,1);//顯示光標(biāo)移動設(shè)置

WriteCommandLCM(0x0c,1);//顯示開及光標(biāo)設(shè)置

)

〃按指定位置顯示一個字符

voidDisplayOneChar(unsignedcharX,unsignedcharY,unsignedcharDData)

Y&=0x1;

X&=OxF;〃限制X不能大于15,Y不能大于1

if(Y)X|=0x40;〃當(dāng)要顯示第二行時地址碼+0x40;

X|=0x80;〃算出指令碼

WriteCommandLCM(X,1);〃發(fā)命令字

WriteDataLCM(DData);〃發(fā)數(shù)據(jù)

!

〃按指定位置顯示一串字符

voidDisplayListChar(unsignedcharX,unsignedcharY,unsignedcharcode

*DData)

I

unsignedcharListLength;

ListLength=0;

Y&=0x1;

X&二OxF;〃限制X不能大于15,Y不能大于1

while(DData[ListLength]>0x19)〃若到達字串尾則退出

(

if(X<=OxF)〃X坐標(biāo)應(yīng)小于OxF

{

Disp1ayOneChar(X,Y,DData[ListLength]);〃顯示單個字符ListLength++;

X++;

i

}

}

//5ms延時

voidDelay5Ms(void)

(

unsignedintTempCyc=5552;

while(TempCyc—);

i

//400ms延時

voidDelay400Ms(void)

(

unsignedcharTempCycA=5;

unsignedintTempCycB;

while(TempCycA—)

TempCycB=7269;

while(TempCycB—);

};

}

voidConut(void)

!

time=TH0*256+TL0;

TH0=0;

TL0=0;

S=(time*l.7)/10;//算出來是MM

if(S<=300)

P3_2=0;

else

P3_2=l;

if((S>=7000)|flag=l)〃超出測量范圍

!

P3_2=l;

flag=0;

DisplayListChar(0,1,tablel);

else

disbuff[0]=S%10;

disbuff[l]=S/10%10;

disbuff[2]=S/100%10;

disbuff[3]=S/1000;

DisplayListChar(0,1,table);

DisplayOneChar(9,1,ASCII[disbuff[3]]);

DisplayOneChar(10,1,ASCII[disbuff[2]]);

DisplayOneChar(11,1,ASCII[disbuff[1]]);

DisplayOneChar(12,1,ASCIlElO]);

DisplayOneChar(13,1,ASCII[disbuff[O]]);

}

)

voidzdO()interrupt1〃T0中斷用來計數(shù)器溢出,超過測距范圍(

flag=l;〃中斷溢出標(biāo)志

RX=O;

}

/********************************************************/voidStartModule0

〃啟動模塊{

TX=1;〃啟動一次模塊_nop_();

nop_();

nop_();

nop_();

_nop_();

_nop_();

nop_();

_nop_();

_nop_();

nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

nop_();

_nop_();

nop_();

_nop_();

_nop_();

TX=O;

)

TimerCount(void)

TRO=1;〃開啟計數(shù)

while(RX);〃當(dāng)RX為1計數(shù)并等待

TRO=O;〃關(guān)閉計數(shù)

Conut();〃計算

)

/*********************************************************/voidmain(void)

(

unsignedintvalA;

Delay400Ms();〃啟動等待,等LCM講入工作狀態(tài)

LCMInitO;〃LCM初始化

Delay5Ms();〃延時片刻

DisplayListChar(0,0,Range);DisplayListChar(0,1,table);//ReadDataLCMO;//

測試用句無意義TMODRxOl;〃設(shè)TO為方式1,GATE=1;EA=1;

THO-O;

TLO=O;

ETO=1;//允許TO中斷〃開啟總中斷while⑴

i

RX=1;

StartModuleO;

for(valA=7510;valA>0;valA--){

if(RX==l)

!

Timer_Count();

}

I

i

I

2、U2程序

#include<at89x51.h>

#defineucharunsignedchar

#defineuintunsignedint

voidmotor_r_z(void);〃右邊電動機正轉(zhuǎn)voidmotor」_z(void);〃左邊電動機正轉(zhuǎn)

voidmotor_r_f(void);〃右邊電動機反轉(zhuǎn)voidmotor」_f(void);〃左邊電動機反轉(zhuǎn)

voidback(uchar,uchar);〃小車后退voidgo(uchar,uchar);〃小車前進void

stop(void);〃小車停止

voidleft(void);〃小車左轉(zhuǎn)

voidright(void);〃小車右轉(zhuǎn)

sbitPWM1=P2-5;

sbitPWM2=P2N;

sbitPWM3=P2」;

sbitPWM4=P2-2;

sbitENI=P2P;

sbitEN2=P2c3;

sbitSignal=P02;sbitstartk=P32;sbitstopk=P33;

sbitsound=P27;

uchardatat_0;

uchardatamotorr;uchardatamotor1;uchardataValue;uchardatamid;

〃**延時子程序**〃/voiddelay1ms(uintn){

uinti,j;

for(j=n;j>0;j")for(i=20;i>0;i—);}

voidini(void)

(

////TO初始化〃/

TM0D=0x01;〃T0工作在方式1TH0=0xff;〃裝入TO初值TL0=0xf6;

TRO=1;〃開TO中斷ET0=l;//T0允許中斷EA=1;

//////////////////////t_0=0;

/////////////////////P2=0;

sound=0;

}

voidSound(void)

(

〃/蜂鳴器響〃/

sound=0;

delay_lms(30);

sound=0;

}

voidstart(void)

(

uchara;

aa:

while(startk);

for(a=0;a<50;a++)

delaylms(l);

while(start_k)

gotoaa;

I

Sound();

go(0x30,0x30);

}

voidgo(ucharleft_motor,ucharright_motor)〃直行{

Value=right_motor;

motor_r_z();

Value=leftmotor;

motor_l_z();

I

voidback(ucharleft_motor,ucharrightjnotor)〃后退{

Value=right_motor;

motor_r_f();

Value=leftmotor;

motorIf();

voidmotor_r_z(void)〃右邊電動機正轉(zhuǎn)

motor_r=0x64+Value;

EN1=1;

I

voidmotor_l_z(void)〃左邊電動機正轉(zhuǎn)

{

motor_l=0x64-Value;

EN2=1;

i

voidmotor_r_f(void)〃右邊電動機反轉(zhuǎn)

!

motor_r=0x64-Value;

EN1=1;

I

voidmotor_l_f(void)〃左邊電動機反轉(zhuǎn){

motorl=0x64+Value;

EN2=1;

}

voidstop(void)

(

EN2=0;

EN1=O;

voidtimeO(void)interrupt1using2{

TRO=O;

THORxff;

TL0=0xf6;

++t_0;

ACC=t_0;

CY=0;

ACC-=motor_r;

if(CY=l)

I

PWM1=1;

PWM2=0;

gotoPWM_2;

I

PWM1=O;

PWM2=1;

PWM_2:

ACC=t_0;

CY=0;

ACC-=motor1;

if(CY==l)

I

PWM3=1;

PWM4=0;

gotoHIGHT;

i

PWM3=0;

PWM4=1;

HIGHT:

ACC=t0;

if(ACC!=0xc9)

gotoEXIT;

ACC=0;

t_0=ACC;

EXIT:

TR0=l;

)

voidmain(void)

(

uchara;

ini();

start();

〃〃判斷U1P3.2是否輸出低電平〃〃〃如果是低電平,小車后退〃〃〃〃〃如果是高

電平,小車前進〃〃while(1)

!

aa:

while(Signal)

gotocc;

Pl_0=0;

P2_7=0;

while(!Signal)

back(0x35,0x35);go(0x35,0x35);

Plpl;

P2_7=l;

〃/判斷是否按下停止按鈕〃〃〃cc:while(stop_k)

gotoaa;

for(a=0;a<20;a++){

delay_lms(l);

while(stop_k)

gotocc;

}

StopO;

start();

}

}

3、紅外躲避障礙自動行走U2程序

#include<at89x51.h>

#defineucharunsignedchar#defineuintunsignedint

voidmotor_r_z(void);〃右邊電動機正轉(zhuǎn)voidmotor_l_z(void);〃左邊電動機正轉(zhuǎn)

voidmotor_r_f(void);〃右邊電動機反轉(zhuǎn)void(void);〃左邊電動機反轉(zhuǎn)

voidback(void);〃小車后退voidgo(uchar,uchar);〃小車前進voidstop(void);//

小車停止

voidleft(void);〃小車左轉(zhuǎn)

voidright(void);〃小車右轉(zhuǎn)

sbitPBI1=P2^5;

sbitPWM2二P2-4;

sbitPWM3=P2T;

sbitPWM4=P2-2;

sbitEN1=P2^O;

sbitEN2=P2^3;

sbitleft_k=P0*2;

sbitright_k=P05;

sbitstart_k=P33;

sbitstop_k=P32;

sbitsound=P27;

uchardatat_0;

uchardatamotor_r;

uchardatamotor_l;

uchardataValue;

uchardatamid;

//**延時子程序**〃/

voiddelay_lms(uintn)

uinti,j;

for(j=n;j>0;j-)

for(i=20;i>0;i-);

)

voidini(void)

(

////TO初始化〃/

TM0D=0x01;//TO工作在方式1

TH0=0xff;〃裝入TO初值

TL0=0xf6;

TRO=1;〃開TO中斷

ETO=1;//TO允許中斷

EA=1;

t_0=0;

P2=0;

sound=l;

}

voidSound(void)

(

〃/蜂鳴器響〃/

sound=0;

delay

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論