机器人擂台赛51程序(定稿)由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“51机器人两腿走路”。
/*机器人擂台赛51程序*****************************************/ /*使用芯片:AT89S52 或者 STC89C52 或AT89S51 STC89C51*/ /*晶振:11.0592MHZ****************************************/ /*编译环境:Keil*************************************/ /*作者:wangzhian yuhao******************************/ /*时间:20120526*************************************/ /*机器人底座四个角下面各有一个灰度传感器,正前面对称安装两个红外传感器,后面,左面右面个一个传感器*/ /*电机电压为12V直流减速电机,驱动为L298N模块*/ /*程序应尽量避免电机转向的突然变化,电机为高速蜗杆减速电机,转速高,电压高,突然转向容易闪火花,烧坏电机*/ #include #define uchar unsigned char #define uint unsigned int #define con P0
uchar sj,sec,count;uchar sj1,sec1,count1;uchar sj2,sec2,count2;uchar sj3,sec3,count3;uchar sj4,sec4,count4;uchar sj5,sec5,count5;uint a,b,m;
/*==============机器人电路接线图=====================*/ /*四个灰度传感器,从左到右,序号从0到3,为P2口的低四位,遇到遮挡物返回为低电平*/ sbit f0=P2^7;
sbit f1=P2^6;
sbit f2=P2^5;
sbit f3=P2^4;
/*五个红外传感器,从左到右,序号从0到3,为P2口的高四位,检测到目标后返回是低电平*/
sbit f4=P2^3;
sbit f5=P2^2;
sbit f6=P2^1;
sbit f7=P2^0;sbit f8=P1^3;
int z[]={0xaa,0x55,0x5a,0xa5,0xe5,0xb5,0xad,0xa7,0xda,0x7a,0x5e,0x5b};
//z[0]前进0xaa,二进制为10101010
//z[1]后退0x55,二进制为01010101
//z[2]左转0x5a,二进制为01011010
//z[3]右转0xa5,二进制为10100101
//z[4]沿左后轮顺时针转0xe5,二进制为11100101
//z[5]沿左前轮顺时针转0xb5,二进制为10110101
//z[6]沿右前轮顺时针转0xad,二进制为10101101
//z[7]沿右后轮顺时针转0xa7,二进制为10100111
//z[8]沿左后轮逆时针转0xda,二进制为11011010
//z[9]沿左前轮逆时针转0x7a,二进制为01111010
//z[10]沿右前轮逆时针转0x5e,二进制为01011110
//z[11]沿右前轮逆时针转0x5b,二进制为01011011
int hdjc();//灰度检测 int hwjc();//红外检测 void zttz();//姿态调整 void xzsm();//扫描
void xzsm1();//旋转扫描 void jingong();//进攻 void delay(uint i);
void main()
{
m=0;sec1=2;//一秒
count1=0;//1代表10微秒,sj1=20*sec1+count1;//左转时间
sec2=2;count2=0;sj2=20*sec2+count2;//前进时间
sec3=2;count3=0;sj3=20*sec3+count3;//扫描前进时间
sec4=3;count4=0;sj4=20*sec4+count4;//扫描旋转时间
sec5=1;count5=10;sj5=20*sec5+count5;//扫描旋转时间
TMOD=0x01;IE=0x82;TH0=(65536-50000)/256;TL0=(65536-50000)%256;//左转45度
/*con=z[2];
count=0;
sec=0;//秒置0
TR0=1;//定时器1开始工作
do{
a=hdjc();//灰度检测
b=hwjc();//红外检测
sj=sec*20+count;
}while((a==0)&&((b==0)||(b==4))&&(sj
TR0=0;//定时器1停止工作*/
//前进到擂台中间
con=z[0];
count=0;
sec=0;//秒置0
TR0=1;//定时器1开始工作
do{
a=hdjc();//灰度检测
b=hwjc();//红外检测
sj=sec*20+count;
}while((a==0)&&(b==0)&&(sj
TR0=0;//定时器1停止工作
a=hdjc();
b=hwjc();while(1){
if((a==0)||(a==5)||(a==8))
{
if(b==0)
xzsm();//未遇到边沿,未遇到敌人,旋转扫描
else
if((b==1)||(b==2))
xzsm1();
else
if((b==3)||(b==4))
jingong();//遇到敌人,进攻
}
else
zttz();//遇到边沿,但没发现敌人,调整姿态
} }
void delay(uint i){
uint x,y;
for(x=i;x>0;x--)
for(y=110;y>0;y--);}
//灰度检测 int hdjc(){ int i=0;if((f3==0)&&(f2==0)&&(f1==0)&&(f0==1))i=1;//0001,左后遇到边沿
if((f3==0)&&(f2==0)&&(f1==1)&&(f0==0))i=2;//0010,左前遇到边沿
if((f3==0)&&(f2==0)&&(f1==1)&&(f0==1))i=6;//0011,左边两个都遇到边沿
if((f3==0)&&(f2==1)&&(f1==0)&&(f0==0))i=3;//0100,右前遇到边沿
if((f3==0)&&(f2==1)&&(f1==1)&&(f0==1))i=8;//0110,前面两个都遇到边沿
if((f3==1)&&(f2==0)&&(f1==0)&&(f0==0))i=4;//1000,右后遇到边沿
if((f3==1)&&(f2==0)&&(f1==0)&&(f0==1))i=5;//1001,后面两个都遇到边沿
if((f3==1)&&(f2==1)&&(f1==0)&&(f0==0))i=7;//1100,右边都两个遇到边沿
return(i);}
//红外检测 int hwjc(){ int i=0;if((f5==0)&&(f6==0))i=3;else{
if((f4==0)||(f5==0))i=1,m=1;
if((f6==0)||(f7==0))i=2,m=2;
} if(f8==0)i=4;return(i);}
//旋转扫描函数 void xzsm(){ int j,k;j=0;k=0;do {
//前进扫描
if(j>=1){ if(a==0)con=z[0];if(a==5)con=z[0];else if(a==8)con=z[1];} else j++;/* { con=z[1];j++;} else con=z[0];*/
count=0;sec=0;//秒置0 TR0=1;//定时器1开始工作
do{
a=hdjc();//灰度检测
b=hwjc();//红外检测
sj=sec*20+count;//计时
}while((a==0)&&(b==0)&&(sj
TR0=0;//定时器1停止工作
if((a==0)&&(b==0))
{
con=z[3];
count=0;//100毫秒置0
sec=0;//秒置0
TR0=1;
do
{
a=hdjc();//灰度检测
b=hwjc();//红外检测
sj=sec*20+count;//计时
}while((a==0)&&(b==0)&&(sj
TR0=0;//定时器1停止工作
} }while(((a==0)||(a==5)||(a==8))&&(b==0));//发现边沿,敌人,则跳出 }
void xzsm1(){
if(m==1)
con=z[2];else if(m==2)con=z[3];count=0;//100毫秒置0 sec=0;//秒置0 TR0=1;do {
a=hdjc();//灰度检测
b=hwjc();//红外检测
sj=sec*20+count;//计时
}while((a==0)&&(b!=0)&&(b!=3)&&(b!=4)&&(sj
TR0=0;//定时器1停止工作
if(sj>sj5)do { con=0x00;}while(!((f4==1)&&(f7==1)));}
//姿态调整函数 void zttz(){
do { switch(a)
{
case 1:con=z[0];delay(400);con=z[3];delay(400);con=z[0];break;//前进,右转,后退
case 2:con=z[1];delay(400);con=z[2];delay(400);con=z[1];break;//后退,左转,前进
case 3:con=z[1];delay(400);con=z[3];delay(400);con=z[1];break;//后退,右转,前进
case 4:con=z[0];delay(400);con=z[2];delay(400);con=z[0];break;//前进,左转,后退
case 6:con=z[3];delay(900);con=z[1];break;
case 7:con=z[2];delay(900);con=z[1];break;
}
a=hdjc();
b=hwjc();
}while((a!=0)&&(a!=5)&&(a!=8));}
//进攻函数 void jingong(){ do{ switch(b){ case 3:con=z[0];break;
case 4:con=z[1];break;} a=hdjc();
b=hwjc();
}while((a==0)&&((b==3)||(b==4)));}
void timer0()interrupt 1 using 1 { TH0=(65536-50000)/256;TL0=(65536-50000)%256;count++;if(count==20){
count=0;
sec++;
if(sec==60)
sec=0;} }
//调整姿态,正对边沿跳出
MODULE Module1 CONSTrobtargetpHome:=[[475.395989043,658.308108557,504.791394735],[0.099045666,0.892399288,-0.369643273,0.239117789],[-1,0,-1,0],[9E9,9E9,9E9,9E......
第八届中国青少年机器人竞赛规则第八章 即兴机器人擂台竞赛规则 一、即兴机器人擂台竞赛是一项参赛选手在竞赛期间获得选题并按照事先规定的竞赛主题和即兴任务要求与规则,有......
制作机器人的程序今天,我校的四、五、六年级在老师的带领下,到甘井子区科技馆参观学习。我们四年一班今天主要学习制作机器人的程序。在老师的引导下,每组把各自的电脑打开,然后......
2010年秋季班会材料古诗词擂台赛活动目的:1.通过积累、感悟和运用古诗词,使学生充分感受古诗的意蕴美,养成背诵古诗的良好习惯。2.培养学生的观察、分析、想象、记忆等能力,培养竞......
主持稿男:各位来宾请就坐,本次宣讲会即将开始,请将您的手机调到震动或无声状态,中途无特殊情况请不要随意走动,以免影响他人听讲,谢谢合作。请同学们在比赛结束时将调研问卷交给工......