小车51单片机智能小车避障+遥控+穿桩.docx
- 文档编号:23197792
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:18
- 大小:17.04KB
小车51单片机智能小车避障+遥控+穿桩.docx
《小车51单片机智能小车避障+遥控+穿桩.docx》由会员分享,可在线阅读,更多相关《小车51单片机智能小车避障+遥控+穿桩.docx(18页珍藏版)》请在冰豆网上搜索。
小车51单片机智能小车避障+遥控+穿桩
#include
#include
voiddelay2(uintk)
{
uinti,j;
for(i=0;i { for(j=0;j<121;j++) {;} } } voidgo()//designedby王奇2012、6大一下学期 { in1=1; in3=1; in2=0; en1=1; in4=0; en2=1; } voidback() { in1=0; in2=1; en1=1; in3=0; in4=1; en2=1; } voidleft() { en1=1; in1=0; in2=1; in3=1; in4=0; en2=1; } voidleft2() { en1=0; in1=0; in2=1; in3=1; in4=0; en2=1; } voidright() { in1=1; in2=0; en1=1; en2=1; in3=0; in4=1; } voidright2() { in1=1; in2=0; en1=1; en2=0; in3=0; in4=1; } voiddirection()//蔽障模式 { if(L1&&L2)//designedby王奇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); } } } /*********************过桩模式************************/ voidbeatpile()//designedby王奇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); } } } voidselectdisplay()//designedby王奇2012、6大一下学期 { uchark; 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); } voidmain() { uchara; init(); lcdinit(); selectdisplay(); while (1) { /************操作选择模式界面*************/ if(selectflag==1)//designedby王奇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)//designedby王奇2012、6大一下学期 { en1=0; en2=0; backflag=0; yunxingflag=0; selectflag=0; lcdcom(0x01); delay (1); selectdisplay(); } } } /*******************红外中断处理**************************/ voidIR_IN()interrupt0using0 { ucharj,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; }//endfork }//endforj if(IRCOM[2]! =~IRCOM[3])//判断有没有误码(有责放弃没有判断键码) {EX0=1; return; } switch(IRCOM[2]) {//显示遥控上的字符按键 case0x45: //开关键 break; case0x46: //mode yunxingflag=1; break; case0x47: //静音 break; case0x44: //播放暂停 en1=~en1; en2=~en2; break; case0x40: //后退 backflag=1; break; case0x43: //前进 break; case0x07: //EQ break; case0x15: //VOL- break; case0x09: //VOL+ break; case0x16: //0 break; case0x19: //rpt break; case0x0d: //u/sd break; case0x0c: //1 selectflag=1; break; case0x18: //2 selectflag=2; if(yunxingflag==1) {go();} break; case0x5e: //3 selectflag=3; break; case0x08: //4 if(selectflag==2&yunxingflag==1)//designedby王奇2012、6大一下学期 left2(); break; case0x1c: //5 break; case0x5a: //6 if(selectflag==2&yunxingflag==1) right2(); break; case0x42: //7 break; case0x52: //8 if(selectflag==2&yunxingflag==1) back(); break; case0x4a: //9 break; } EX0=1; } /*****************秒钟计时器测量速度************************/ voidT0sev()interrupt1//designedby王奇2012、6大一下学期 { ucharms,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; } }// } } /******************速度中断测量************************/ voidEX1sevr()interrupt2using0//designedby王奇2012、6大一下学期 { EX1=0; num++; EX1=1; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小车 51单片机智能小车 避障+遥控+穿桩 51 单片机 智能 遥控