完整程序最终版本.docx
- 文档编号:30092799
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:19
- 大小:17.69KB
完整程序最终版本.docx
《完整程序最终版本.docx》由会员分享,可在线阅读,更多相关《完整程序最终版本.docx(19页珍藏版)》请在冰豆网上搜索。
完整程序最终版本
简易射门机器人完整程序
#include
sbitP10=P1^0;//IN1控制直流电机,12控制左,34为右
sbitP11=P1^1;//IN2
sbitP12=P1^2;//IN3
sbitP13=P1^3;//IN4
sbitA1=P1^4;//定义步进电机连接端口
sbitB1=P1^5;
sbitC1=P1^6;
sbitD1=P1^7;
sbitP20=P2^0;//光敏电阻1(从左到右)有光照为低电平
sbitP21=P2^1;//光敏电阻2
sbitP22=P2^2;//光敏电阻3
sbitP23=P2^3;//光敏电阻4
sbitP24=P2^4;//光敏电阻5
sbitP25=P2^5;//光电开关左(避障用),测到障碍为0
sbitP26=P2^6;//光电开关中
sbitP27=P2^7;//光电开关右
sbitP00=P0^0;//光电开关左(校准、定坐标用)检测到黑线为高电平
sbitP01=P0^1;//光电开关右
sbitP02=P0^2;//译码管x坐标(从低位开始)
sbitP03=P0^3;
sbitP04=P0^4;
sbitP05=P0^5;//译码管y坐标
sbitP06=P0^6;
sbitP07=P0^7;
#defineCoil_A1{A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
#defineCoil_B1{A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
#defineCoil_C1{A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
#defineCoil_D1{A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
#defineCoil_OFF{A1=0;B1=0;C1=0;D1=0;}//全部断电
#defineuintunsignedint
#defineucharunsignedchar
#definezuo28500,2//左转90度时间(统一修改用)
#defineyou27500,2//右转90度时间
#defineqian38300,4//前进一格时间
#defineban45000,2//前进半格时间
#definezhuan8000//寻球角度
#definejin30000//寻球前进距离
//乒乓球大致位置要事先调好!
!
!
#defineforwardban{forward();delay1x(ban);switch(state){case0:
y++;break;case1:
y--;break;case2:
x--;break;case3:
x++;break;}display(x,y);stop();delay1(50000);break;}
/////////////////////////////////////////////////////////////////
unsignedcharSpeed;
uintx=1,y=1;//坐标
uintstate=0;//0为朝上,1为朝下,2为朝左,3为朝右
/////////////////////////////////////////////////////////////////
voiddisplay(uintx,uinty)//坐标显示
{
switch(x)
{
case1:
P04=0;P03=0;P02=1;break;
case2:
P04=0;P03=1;P02=0;break;
case3:
P04=0;P03=1;P02=1;break;
case4:
P04=1;P03=0;P02=0;break;
case5:
P04=1;P03=0;P02=1;break;
case6:
P04=1;P03=1;P02=0;break;
}
switch(y)
{
case1:
P07=0;P06=0;P05=1;break;
case2:
P07=0;P06=1;P05=0;break;
case3:
P07=0;P06=1;P05=1;break;
case4:
P07=1;P06=0;P05=0;break;
case5:
P07=1;P06=0;P05=1;break;
case6:
P07=1;P06=1;P05=0;break;
}
}
////////////////////////////////////////////////////
voidstop()//初始化/停止
{ET0=0;P10=0;P11=0;P12=0;P13=0;}
voidstopi()//刹停
{ET0=0;P10=1;P11=1;P12=1;P13=1;}
voidforward()//前进
{P10=1;P11=0;P12=0;P13=1;}
voidback()//后退
{P10=0;P11=1;P12=1;P13=0;}
voidright()//双轮右转
{P10=1;P11=0;P12=1;P13=0;}
voidright2()//单轮右转
{P10=1;P11=0;P12=0;P13=0;}
voidleft()//双轮左转
{P10=0;P11=1;P12=0;P13=1;}
voidleft2()//单轮左转
{P10=0;P11=0;P12=0;P13=1;}
/////////////////////////////////////////
voiddelay()//延时
{
inti=10,j=100,k=200;
for(i=10;i>0;i--)
for(j=100;j>0;j--)
for(k=200;k>0;k--);;;
}
voiddelayx(uinti)//多倍延时
{for(;i>0;i--)
delay();
}
voiddelay1(uintx)//延时
{
while(x--);
}
voiddelay1x(uintx,uinti)//多倍延时
{for(;i>0;i--)
delay1(x);
}
voidDelayUs2x(unsignedchart)
{
while(--t);
}
voidDelayMs(unsignedchart)
{
while(t--)
{
//大致延时1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/////////////////////////////////////////////////
leftx()//双轮左转90度
{
voidbizhang();
ET0=0;
left();delay1x(zuo);stopi();delay1(50000);
switch(state)
{
case0:
state=2;break;
case1:
state=4;break;
case2:
state=1;break;
case3:
state=0;break;
}
bizhang();
}
rightx()//双轮右转90度
{
voidbizhang();
ET0=0;
right();delay1x(you);stopi();delay1(50000);
switch(state)
{
case0:
state=3;break;
case1:
state=2;break;
case2:
state=0;break;
case3:
state=1;break;
}
bizhang();
}
forwardx(uinti)//前进一格
{
voidfindball();voidbizhang();
if(y>=6){ET0=0;TR0=0;EX1=1;IT1=0;}
for(;i>0;i--)
{
ET0=1;
if(state==2&&x==1){leftx();leftx();}
elseif(state==3&&x==6){rightx();rightx();}
elseif(state==1&&y==1){rightx();rightx();}
forward();delay1x(qian);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);
bizhang();
forward();
if(y>=4&&state==0){findball();}
}
}
///////////////////////////////////////////////////////////////
voidbizhang()
{
if(P25==0||P26==0||P27==0)//避障
{
switch(state)
{
case0:
rightx();forwardx
(1);leftx();break;
case1:
rightx();rightx();break;
case2:
rightx();break;
case3:
leftx();break;
}
}
}
///////////////////////////////////////////////////////////////////
voidfindball()
{
voidfindball2();
if(y==4)
{
switch(x)
{
case1:
rightx();forwardx(4);leftx();forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case2:
rightx();forwardx(3);leftx();forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case3:
rightx();forwardx
(2);leftx();forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case4:
rightx();forwardx
(1);leftx();forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case5:
forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case6:
leftx();forwardx
(1);rightx();forwardx
(1);
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
}
findball2();
}
elseif(y==5)
{
switch(x)
{
case1:
rightx();forwardx(4);leftx();
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case2:
rightx();forwardx(3);leftx();
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case3:
rightx();forwardx
(2);leftx();
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case4:
rightx();forwardx
(1);leftx();
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case5:
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
case6:
leftx();forwardx
(1);rightx();
forward();delay1x(ban);
switch(state)
{
case0:
y++;break;
case1:
y--;break;
case2:
x--;break;
case3:
x++;break;
}
display(x,y);
stop();delay1(50000);break;
}
findball2();
}
}
/////////////////////////////////////////////////////////////////
voidfindball2()
{
uinti,k;
while(i){i--;right();delay1(zhuan);stop();for(k=10000;k>0;k--)if(P26==0)gotoAA;}
while
(1)
{
i=10;
while(i){i--;right();delay1(zhuan);stop();for(k=10000;k>0;k--)if(P26==0)gotoAA;}
i=20;
while(i){i--;left();delay1(zhuan);stop();for(k=10000;k>0;k--)if(P26==0)gotoAA;}
i=10;
while(i){i--;right();delay1(zhuan);stop();for(k=10000;k>0;k--)if(P26==0)gotoAA;}
forward();delay1x(jin,1);
}
AA:
forward();delay1x(50000,4);stop();while
(1);
}
/////////////////////////////////////////////////////////////////
voidarming()
{
while
(1)
{if(P20==0&&P21==0&&P22==0&&P23==0&&P24==1){left();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==0&&P21==0&&P22==1&&P23==0&&P24==1){left();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==0&&P21==1&&P22==0&&P23==0&&P24==1){left();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==1&&P21==0&&P22==0&&P23==1&&P24==1){left();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==0&&P21==0&&P22==0&&P23==1&&P24==1){left();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==0&&P21==1&&P22==0&&P23==1&&P24==1){left();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==1&&P21==0&&P22==1&&P23==1&&P24==1){left();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==0&&P21==0&&P22==1&&P23==1&&P24==1){left();delay1x(1500,3);stop();delay1(5000);}
elseif(P20==0&&P21==1&&P22==1&&P23==1&&P24==1){left();delay1x(1500,4);stop();delay1(5000);}
elseif(P20==1&&P21==0&&P22==0&&P23==0&&P24==0){right();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==1&&P21==0&&P22==0&&P23==1&&P24==0){right();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==1&&P21==0&&P22==1&&P23==0&&P24==0){right();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==1&&P21==1&&P22==0&&P23==0&&P24==1){right();delay1x(1500,1);stop();delay1(5000);}
elseif(P20==1&&P21==1&&P22==0&&P23==0&&P24==0){right();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==1&&P21==1&&P22==0&&P23==1&&P24==0){right();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==1&&P21==1&&P22==1&&P23==0&&P24==1){right();delay1x(1500,2);stop();delay1(5000);}
elseif(P20==1&&P21==1&&P22==1&&P23==0&&P24==
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 程序 最终 版本