#includereg52.h#defineucharunsignedchar#defineuintunsignedint//*********************第一部分Start********************************sbitIN1=P1^0;//以下是电机驱动芯片L298管脚位声明sbitPWM1=P1^1;sbitIN2=P1^2;sbitIN3=P1^3;sbitPWM2=P1^4;sbitIN4=P1^5;sbitRPR3=P1^6;//此处是传感器RPR220管脚位声明sbitRPR4=P1^7;sbitRPR1=P2^0;sbitRPR2=P2^1;sbitbz1=P0^0;//避障1sbitbz2=P0^1;//避障2sbitA=P3^2;//默认为遥控避障工作模式,按下A键后小车变换为循迹避障模式sbitB=P0^3;//按下B键不放,小车前进sbitC=P0^4;//按下C键不放,小车左转弯sbitD=P0^5;//按下D键不放,小车右转弯sbitled=P0^7;intn=1;//*********************第一部分End**************************//*********************第二部分子函数定义Start************/*********************************延时函数***************************************/voidtimer(unsignedintt)//中断计时{unsignedinti;for(i=0;it;i++)/*延时t*50ms*/{TMOD=0X10;TH0=0x3C;TL0=0xB0;TR1=1;while(!TF1);TR1=0;}}int0()interrupt0{n=n+1;//默认遥控功能if(n%2==0){led=0;}elseled=1;EA=1;EX0=1;IT0=1;}main(){EA=1;EX0=1;IT0=1;while(1){while(n%2==1){if(A==1)break;if(A==0&&B==1&&bz1==1){IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(100);//5SPWM1=0;PWM2=0;timer(100);//5S}if(A==0&&C==1&&bz1==1){IN1=0,IN2=1,IN3=0,IN4=1;PWM1=0;PWM2=1;timer(50);PWM1=0;PWM2=1;timer(50);PWM1=0;PWM2=0;timer(10);}if(A==0&&D==1&&bz1==1){IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=0;timer(50);PWM1=1;PWM2=0;timer(50);PWM1=0;PWM2=0;timer(10);}if(A==0&&bz1==0){unsignedintk=0;IN1=0,IN2=1,IN3=1,IN4=0;for(k=0;k=30;k++){PWM1=1;PWM2=1;timer(25);PWM1=0;PWM2=0;timer(25);}}}while(n%2==0){if(A==1)break;if(A==0&&bz1==1&&((RPR4==0&&RPR3==0&&RPR1==0&&RPR2==0)|(RPR1==0&&RPR2==1&&RPR3==1&&RPR4==0)))//未检测到黑线,小车继续前进{IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(100);PWM1=0;PWM2=0;timer(400);}if(A==0&&bz1==1&&RPR1==0&&RPR2==1&&RPR3==0&&RPR4==0)//仅左轮检测到黑线,小车向左转弯{IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(50);PWM1=0;PWM2=1;timer(50);PWM1=0;PWM2=0;timer(400);}if(A==0&&bz1==1&&RPR1==0&&RPR2==0&&RPR3==1&&RPR4==0)//仅右轮检测到黑线,小车向右转弯未检测到障碍物{IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(50);PWM1=1;PWM2=0;timer(50);PWM1=0;PWM2=0;timer(400);}if(A==0&&bz1==1&&RPR4==1&&RPR3==0&&RPR1==0&&RPR2==0)//右轮最外围检测到黑线向右大转弯未检测到障碍物{IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(50);PWM1=1;PWM2=0;timer(100);PWM1=0;PWM2=0;timer(50);}if(A==0&&bz1==1&&RPR4==0&&RPR3==0&&RPR1==1&&RPR2==0)//左轮最外围检测到黑线左轮大转弯未检测到障碍物{IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(50);PWM1=0;PWM2=1;timer(100);PWM1=0;PWM2=0;timer(400);}if(A==0&&bz1==1&&RPR4==0&&RPR3==0&&RPR1==1&&RPR2==1)//左转90°弯未检测到障碍物{IN1=1,IN2=0,IN3=0,IN4=1;while(RPR3==1){PWM1=1;PWM2=1;timer(250);PWM1=0;PWM2=0;timer(250);}}if(A==0&&bz1==1&&RPR4==1&&RPR3==1&&RPR1==0&&RPR2==0)//右转90°弯{IN1=0,IN2=1,IN3=1,IN4=0;while(RPR4==1){PWM1=1;PWM2=1;timer(250);PWM1=0;PWM2=0;timer(250);}}if(A==0&&bz1==0){unsignedintk=0;for(k=0;k=30;k++){IN1=0,IN2=1,IN3=1,IN4=0;PWM1=1;PWM2=1;timer(250);PWM1=0;PWM2=0;timer(250);}for(k=0;k=12;k++){IN1=0,IN2=1,IN3=0,IN4=1;PWM1=1;PWM2=1;timer(250);PWM1=0;PWM2=0;timer(250);}}}}}