注册 登录
电子技术论坛 返回首页

912293097的个人空间https://bbs.elecfans.com/?261059[收藏][复制][分享][RSS]

博客

51单片机小车制作雏形完成

热度54已有 1471 次阅读2012-6-24 07:51|

这几天做了一个小车 挺有意思的 发过来大家看一下
加群交流 QQ群197370702

void direc tion() //蔽障模式
{
if(L1&&L2) //designed by 王奇 2012、6 大一下学期
{
go();
}
if(!L1&&!L2)
{
back();
delay2(350);
left();
delay2(50);
}
if(!L1&&L2)
{
go();
delay2(20);
if(!L1&&!L2)
{back();
delay2(350);
right();
delay2(50);
}
else
{
right();
delay2(50);
}

}
if(L1&&!L2)
{ go();
delay2(20);
if(!L1&&!L2)
{
back();
delay2(350);
left();
delay2(50);
}
else
{
left();
delay2(50);
}
}

}

/*********************过桩模式************************/
void beatpile() //designed by 王奇 2012、6 大一下学期
{
if(L1&&L2)
{
go();
}
if(L1&&!L2)
{
go();
delay2(20);
if(!L1&&!L2)
{back();
delay2(350);
right();
delay2(50);
}
else
{
go();
delay2(400);
right2();
delay2(470);
go();
delay2(260);
left2();
delay2(480);

}

}

if(!L1&&L2)
{ go();
delay2(20);
if(!L1&&!L2)
{
back();
delay2(350);
left();
delay2(50);
}
else
{
go();
delay2(400);
left2();
delay2(470);
go();
delay2(260);
right2();
delay2(480);
}
}



}



void selectdisplay() //designed by 王奇 2012、6 大一下学期
{
uchar k;
lcdcom(0x80+2);
for(k=0;k<16;k++)
lcddata(init1[k]);
lcdcom(0x80+0x40+3);
lcddata(0x30+1);
lcdcom(0x80+0x40+7);
lcddata(0x30+2);
lcdcom(0x80+0x40+11);
lcddata(0x30+3);
}

void main()
{
uchar a;
init();
lcdinit();
selectdisplay();
while(1)
{


/************操作选择模式界面*************/
if(selectflag==1) //designed by 王奇 2012、6 大一下学期
{ selectflag=1;
lcdcom(0x01);
delay(1);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way1name[a]);
lcdcom(0x80+0x40);
for(a=0;a<16;a++)
lcddata(way1[a]);
while(!backflag);

}
if(selectflag==2)
{
selectflag=2;
lcdcom(0x01);
delay(1);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way2name[a]);
lcdcom(0x80+0x40);
for(a=0;a<16;a++)
lcddata(way2[a]);
while(!backflag);
}
if(selectflag==3)
{
selectflag=3;
lcdcom(0x01);
delay(1);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way3name[a]);
lcdcom(0x80+0x40);
for(a=0;a<16;a++)
lcddata(way3[a]);
while(!backflag);
}

/******************返回到主菜单**********************/
if(backflag==1) //designed by 王奇 2012、6 大一下学期
{
en1=0;
en2=0;
backflag=0;
yunxingflag=0;
selectflag=0;
lcdcom(0x01);
delay(1);
selectdisplay();
}

}

}





/*******************红外中断处理**************************/
void IR_IN() interrupt 0 using 0
{
uchar j,k,N=0;
EX0 = 0; //关掉外部中断防止中断的再次发生进入检测引导码阶段(9ms的低电平4.5ms的高电平)
delay(15);
if (IRIN==1)
{ EX0 =1; //9ms的检测检测结束从新打开外部中断
return;
}
//确认IR信号出现
while (!IRIN) //等IR变为高电平,跳过9ms的前导低电平信号。
{delay(1);}

for (j=0;j<4;j++) //收集四组数据
{
for (k=0;k<8;k++) //每组数据有8位
{
while (IRIN) //等 IR 变为低电平,跳过4.5ms的引导高电平信号。
{delay(1);}
while (!IRIN) //等 IR 变为高电平
{delay(1);}
while (IRIN) //计算IR高电平时长(0和1的低电平的时长一样的,只要判断高电平时长超过0.56ms并小于1.12ms为1否则为0)
{
delay(1);
N++;
if (N>=30)
{
EX0=1;
return;
} //0.14ms计数过长自动离开。
} //高电平计数完毕
IRCOM[j]=IRCOM[j] >> 1; //数据最高位补"0"
if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;} //高电平持续时间大于1.12ms则数据最高位补"1"
N=0;
}//end for k
}//end for j
if (IRCOM[2]!=~IRCOM[3]) // 判断有没有误码(有责放弃没有判断键码)
{ EX0=1;
return;
}
switch(IRCOM[2])
{ // 显示遥控上的字符按键
case 0x45: //开关键
break;
case 0x46: //mode
yunxingflag=1;
break;
case 0x47: //静音
break;
case 0x44: //播放暂停
en1=~en1;
en2=~en2;
break;
case 0x40: //后退
backflag=1;
break;
case 0x43: //前进
break;
case 0x07: //EQ
break;
case 0x15: //VOL-
break;
case 0x09: //VOL+
break;
case 0x16: //0
break;
case 0x19: //rpt
break;
case 0x0d: //u/sd
break;
case 0x0c: //1
selectflag=1;
break;
case 0x18: //2
selectflag=2;
if(yunxingflag==1)
{go();}
break;
case 0x5e: //3
selectflag=3;
break;
case 0x08: //4
if(selectflag==2&yunxingflag==1) //designed by 王奇 2012、6 大一下学期
left2();
break;
case 0x1c: //5
break;
case 0x5a: //6
if(selectflag==2&yunxingflag==1)
right2();
break;
case 0x42: //7
break;
case 0x52: //8
if(selectflag==2&yunxingflag==1)
back();
break;
case 0x4a: //9
break;
}
EX0 = 1;
}
/*****************秒钟计时器测量速度************************/

void T0sev() interrupt 1 //designed by 王奇 2012、6 大一下学期
{
uchar ms,a;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ms++;


if(selectflag==3) //壁障
{
if(yunxingflag==1)
{
beatpile();
}
}
if(selectflag==1) //壁障
{
if(yunxingflag==1)
{
direction();
}
}
if(ms==20)
{
if(selectflag==1) //壁障
{
if(yunxingflag==1)
{
//crossflag=1;
lcdcom(0x01);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way1name[a]);

lcdcom(0x80+0x40);
for(a=0;a<6;a++)
lcddata(speed[a]);
lcdcom(0x80+0x40+10);
lcddata(0x30+num/10);
lcddata(0x30+num%10);
lcddata(0x6b);
lcddata(0x6d);
lcddata(0x2f);
lcddata(0x68);
num=0;
}
}//

if(selectflag==2) //红外控制
{
if(yunxingflag==1)
{

remoteflag=1;
lcdcom(0x01);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way2name[a]);

lcdcom(0x80+0x40);
for(a=0;a<6;a++)
lcddata(speed[a]);
lcdcom(0x80+0x40+10);
lcddata(0x30+num/10);
lcddata(0x30+num%10);
lcddata(0x6b);
lcddata(0x6d);
lcddata(0x2f);
lcddata(0x68);
num=0;
}
}//

if(selectflag==3) //过庄模式
{
if(yunxingflag==1)
{

pileflag=1;
lcdcom(0x01);
lcdcom(0x80);
for(a=0;a<16;a++)
lcddata(way3name[a]);

lcdcom(0x80+0x40);
for(a=0;a<6;a++)
lcddata(speed[a]);
lcdcom(0x80+0x40+10);
lcddata(0x30+num/10);
lcddata(0x30+num%10);
lcddata(0x6b);
lcddata(0x6d);
lcddata(0x2f);
lcddata(0x68);
num=0;
}
}//


}


}
/******************速度中断测量************************/
void EX1sevr() interrupt 2 using 0 //designed by 王奇 2012、6 大一下学期
{
EX1=0;
num++;
EX1=1;

}

返回顶部