简单的寻迹编程与避障.docx
- 文档编号:9809779
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:19
- 大小:15.64KB
简单的寻迹编程与避障.docx
《简单的寻迹编程与避障.docx》由会员分享,可在线阅读,更多相关《简单的寻迹编程与避障.docx(19页珍藏版)》请在冰点文库上搜索。
简单的寻迹编程与避障
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
#defineulongunsignedlong
sbitdianl=P1^0;//左电机控制输出口
sbitdianr=P1^1;//右电机控制输出口
sbitTrig=P1^3;//外部中断
sbitEcho=P3^2;
sbitD1=P2^0;//红外检测右路接口
sbitD2=P2^1;//红外检测右路接口
sbitD3=P2^2;//红外检测中路接口
sbitD4=P2^3;//红外检测左路接口
sbitD5=P2^4;//红外检测左路接口
uintsucced_flag,n1,n2,n3,n4;
uchari,time,distance,timeL,timeH,num;
ucharucMotorStep,t;
voiddelay(uintx)
{
uinta,b;
for(a=x;a>0;a--)
for(b=124;b>0;b--);
}
voiddelay20us()//延时20US
{
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
}
voidrun()
{
switch(ucMotorStep)
{
case1:
/*左前转*/
dianl=1;
delay
(1);
dianl=0;
delay
(1);
break;
case2:
/*右前转*/
dianr=1;
delay
(2);
dianr=0;
delay
(2);
break;
case3:
/*前进*/
dianl=1;
delay
(1);
dianl=0;
delay
(1);
dianr=1;
delay
(2);
dianr=0;
delay
(2);
break;
case4:
/*后退*/
dianl=1;
delay
(2);
dianl=0;
delay
(2);
dianr=1;
delay
(1);
dianr=0;
delay
(1);
break;
}
}
voidmain()
{
Trig=0;
EA=1;
TMOD=0X10;
while
(1)
{
EA=0;
Trig=1;
delay20us();
Trig=0;
while(Echo==0);
succed_flag=0;
EA=1;
EX0=1;
TH1=0;
TL1=0;
TF1=0;
TR1=1;
delay(10);//等待10ms
TR1=0;
EX0=0;
num=0;
i=80;n1=0;n2=0;n3=0;n4=0;
if(succed_flag==1)
{
time=timeH*256+timeL;//
distance=time*0.0172;//厘米
if(distance>13)
{
delay
(2);
//单个灯
if(D1==1&&D2==0&&D3==0&&D4==0&&D5==0)
{
while(D3==0)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==0&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==1&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==0&&D4==1&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==0&&D4==0&&D5==1)
{
while(D3==0)
{
ucMotorStep=2;
run();
}
}
//D1灯和其他灯组合
elseif(D1==1&&D2==1&&D3==0&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==0&&D3==1&&D4==0&&D5==0)
{
while(D3==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==0&&D3==0&&D4==1&&D5==0)
{
while(D3==0)
{
ucMotorStep=2;
run();
}
}
elseif(D1==1&&D2==0&&D3==0&&D4==0&&D5==1)
{
while(D3==0)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==1&&D3==1&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==1&&D3==1&&D4==1&&D5==0)
{
while(D3==1)
{
ucMotorStep=1;
run();
}
}
//灯D2的组合
elseif(D1==0&&D2==1&&D3==1&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==0&&D4==1&&D5==0)
{
while(D3==0)
{
ucMotorStep=4;
run();
}
}
elseif(D1==0&&D2==1&&D3==1&&D4==1&&D5==0)
{
while(D4==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==1&&D4==1&&D5==1)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
//灯三的组合
elseif(D1==0&&D2==0&&D3==1&&D4==1&&D5==0)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
elseif(D1==0&&D2==0&&D3==1&&D4==0&&D5==1)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
elseif(D1==0&&D2==0&&D3==1&&D4==1&&D5==1)
{
while(D4==1)
{
ucMotorStep=2;
run();
}
}
//灯4的组合
elseif(D1==0&&D2==0&&D3==0&&D4==1&&D5==1)
{
while(D4==1)
{
ucMotorStep=2;
run();
}
}
//后退的
elseif(D1==0&&D2==0&&D3==0&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
delay(30);
}
else
{
ucMotorStep=4;
run();
}
}
elseif(distance<13)
{
while(num<1)
{
while(n1<80)
{
ucMotorStep=1;
run();
n1++;
}
n1=0;
delay(8);
while(n2<170)
{
ucMotorStep=3;
run();
n2++;
}
n2=0;
delay(8);
while(n3<50)
{
ucMotorStep=2;
run();
n3++;
}
n3=0;
delay(8);
while(n4<110)
{
ucMotorStep=3;
run();
n4++;
}
n4=0;
delay(8);
num++;
}
}
}
if(succed_flag==0)
{
delay
(2);
//单个灯
if(D1==1&&D2==0&&D3==0&&D4==0&&D5==0)
{
while(D3==0)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==0&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==1&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==0&&D4==1&&D5==0)
{
ucMotorStep=3;
run();
}
elseif(D1==0&&D2==0&&D3==0&&D4==0&&D5==1)
{
while(D3==0)
{
ucMotorStep=2;
run();
}
}
//D1灯和其他灯组合
elseif(D1==1&&D2==1&&D3==0&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==0&&D3==1&&D4==0&&D5==0)
{
while(D3==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==0&&D3==0&&D4==1&&D5==0)
{
while(D3==0)
{
ucMotorStep=2;
run();
}
}
elseif(D1==1&&D2==0&&D3==0&&D4==0&&D5==1)
{
while(D3==0)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==1&&D3==1&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==1&&D2==1&&D3==1&&D4==1&&D5==0)
{
while(D3==1)
{
ucMotorStep=1;
run();
}
}
//灯D2的组合
elseif(D1==0&&D2==1&&D3==1&&D4==0&&D5==0)
{
while(D2==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==0&&D4==1&&D5==0)
{
while(D3==0)
{
ucMotorStep=4;
run();
}
}
elseif(D1==0&&D2==1&&D3==1&&D4==1&&D5==0)
{
while(D4==1)
{
ucMotorStep=1;
run();
}
}
elseif(D1==0&&D2==1&&D3==1&&D4==1&&D5==1)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
//灯三的组合
elseif(D1==0&&D2==0&&D3==1&&D4==1&&D5==0)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
elseif(D1==0&&D2==0&&D3==1&&D4==0&&D5==1)
{
while(D3==1)
{
ucMotorStep=2;
run();
}
}
elseif(D1==0&&D2==0&&D3==1&&D4==1&&D5==1)
{
while(D4==1)
{
ucMotorStep=2;
run();
}
}
//灯4的组合
elseif(D1==0&&D2==0&&D3==0&&D4==1&&D5==1)
{
while(D4==1)
{
ucMotorStep=2;
run();
}
}
//后退的
elseif(D1==0&&D2==0&&D3==0&&D4==0&&D5==0)
{
ucMotorStep=3;
run();
delay(30);
}
else
{
ucMotorStep=4;
run();
}
}
}
}
voidExter()interrupt0
{
EX0=0;
timeH=TH1;
timeL=TL1;
succed_flag=1;
}
voidT1_time()interrupt3
{
TH1=0;
TL1=0;
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 编程