logo资料库

51单片机红外四路循迹小车程序.docx

第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
资料共6页,全文预览结束
#include sbit ENA = P2^0; sbit ENB = P2^1; sbit INB1 = P2^2; sbit INA1 = P2^4; sbit INA2 = P2^3; sbit INB2 = P2^5; sbit left1 = P1^5; sbit left2 = P1^4; sbit s1 = P1^3; sbit s2 = P1^2; sbit right1 = P1^1; sbit right2 = P1^0; unsigned char zkb1 = 0; unsigned char zkb2 = 0; unsigned char t = 0; unsigned char tt ; unsigned char k; void init() { EA = 1; TMOD = 0x01; TH0 =(65536 - 100) / 256; TL0 = (65536 - 100)% 256; ET0 = 1; TR0 = 1; } void timer0() interrupt 1 { TH0 = (65536 - 100) / 256; TL0 = (65536 - 100) % 256; if(t < zkb1) { INA1 = 1; }
else { INA1 = 0; } if(t < zkb2) { INB1 =1; } else { } INB1 = 0; t++; if(t >= 80) { t = 0; } } { } void delay(char z) char x,y; for(x=z;x>0;x--) for(y=120;y>0;y--); void turn_left1() { zkb1 = 40; zkb2 = 0; } void turn_left2() { zkb1 = 80; zkb2 = 0; delay(200); // }
void turn_right1() { zkb1 =0; zkb2 =40; } void turn_right2() { zkb1 = 0; zkb2 =80; delay(200); // } void qianjin() { zkb1 = 80; zkb2 = 80; } void zhijiaol() { turn_left2(); delay(2000); } void zhijiaor() { turn_right2(); delay(2000); } void panduan() { zkb1=40; zkb2=40; k=2500; while(k--) { if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)&&(k>=0)) {
ENA=0; ENB=0; } } } void xunji() { unsigned char flag; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 1; if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 2; if((left1 == 1)&&(left2 == 0)&&(s1 == 0)&&(s2 == 0)&&(right1 == 0)&&(right2 == 1)) flag = 3; if((left1 == 0)&&(left2 == 0)&&(s1 == 0)&&(s2 == 0)&&(right1 == 0)&&(right2 == 0)) flag = 4; if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 5; if((left1 == 1)&&(left2 == 0)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 6; if((left1 == 0)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 7; if((left1 == 1)&&(left2 == 0)&&(s1 == 0)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 8; if((left1 == 0)&&(left2 == 0)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 9; if((left1 == 1)&&(left2 == 0)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 10; if((left1 == 0)&&(left2 == 0)&&(s1 == 0)&&(s2 == 1)&&(right1 == 1)&&(right2 == 1)) flag = 11; if((left1 == 0)&&(left2 == 0)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 12; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 13; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 0)&&(right2 == 1)) flag = 14; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 1)&&(right2 == 0)) flag = 15; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 0)&&(right1 == 0)&&(right2 == 1)) flag = 16; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 1)&&(right1 == 0)&&(right2 == 0)) flag = 17;
if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 0)&&(right2 == 1)) flag = 18; if((left1 == 1)&&(left2 == 1)&&(s1 == 1)&&(s2 == 0)&&(right1 == 0)&&(right2 == 0)) flag = 19; if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 0)&&(right2 == 0)) flag = 20; if((left1 == 0)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 0)&&(right2 == 1)) flag = 21; if((left1 == 0)&&(left2 == 0)&&(s1 == 1)&&(s2 == 0)&&(right1 == 0)&&(right2 == 1)) flag = 22; if((left1 == 0)&&(left2 == 0)&&(s1 == 1)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 23; if((left1 == 0)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 1)) flag = 24; if((left1 == 1)&&(left2 == 0)&&(s1 == 0)&&(s2 == 1)&&(right1 == 0)&&(right2 == 0)) flag = 25; if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 0)) flag = 26; if((left1 == 1)&&(left2 == 1)&&(s1 == 0)&&(s2 == 1)&&(right1 == 0)&&(right2 == 0)) flag = 27; if((left1 == 1)&&(left2 == 0)&&(s1 == 0)&&(s2 == 0)&&(right1 == 1)&&(right2 == 0)) flag = 28; if((left1 == 0)&&(left2 == 0)&&(s1 == 0)&&(s2 == 1)&&(right1 == 0)&&(right2 == 1)) flag = 29; if((left1 == 1)&&(left2 == 0)&&(s1 == 1)&&(s2 == 0)&&(right1 == 0)&&(right2 == 0)) flag = 30; switch(flag) { case 1:qianjin();break; case 2:qianjin();break; case 3:qianjin();break; case 4:panduan();break; case 5:turn_left1();break; case 6:turn_left2();break; case 7:turn_left2();break; case 8:turn_left2();break; case 9:turn_left2();break; case 21:turn_left2();break; case 22:turn_left2();break; case 23:turn_left2();break; case 24:turn_left2();break; case 29:turn_left2();break;
case 13:turn_right1();break; case 14:turn_right2();break; case 15:turn_right2();break; case 16:turn_right2();break; case 17:turn_right2();break; case 25:turn_right2();break; case 26:turn_right2();break; case 27:turn_right2();break; case 28:turn_right2();break; case 30:turn_right2();break; case 10:zhijiaol();break; case 11:zhijiaol();break; case 12:zhijiaol();break; case 18:zhijiaor();break; case 19:zhijiaor();break; case 20:zhijiaor();break; default:qianjin();break; } } void main() { init(); INA2 = 0; INB2 = 0; while(1) { xunji(); } }
分享到:
收藏