完整程序最终版本.docx

上传人:b****5 文档编号:30092799 上传时间:2023-08-04 格式:DOCX 页数:19 大小:17.69KB
下载 相关 举报
完整程序最终版本.docx_第1页
第1页 / 共19页
完整程序最终版本.docx_第2页
第2页 / 共19页
完整程序最终版本.docx_第3页
第3页 / 共19页
完整程序最终版本.docx_第4页
第4页 / 共19页
完整程序最终版本.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

完整程序最终版本.docx

《完整程序最终版本.docx》由会员分享,可在线阅读,更多相关《完整程序最终版本.docx(19页珍藏版)》请在冰豆网上搜索。

完整程序最终版本.docx

完整程序最终版本

简易射门机器人完整程序

#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==

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1