超声波避障小车代码
#include <reg51.h>
#include <intrins.h> #define uchar unsigned char
#define uint unsigned int sbit ENA = P0^6;
sbit IN1 = P3^2;
sbit IN2 = P3^3;
sbit IN3 = P3^4;
sbit IN4 = P3^5;
sbit ENB = P2^0; sbit Echo = P1^1;
sbit Trig = P1^2; sbit DJ = P1^0;void turnleft();
void turnright();
void straight();
void stop();
void count();
void run();
void hcsr04();
void delayms(uint ms);uint stime = 0;
uint timer = 0;
uint timercar = 0;
uint S = 0;
uchar flag =0;
uchar s_bai,s_shi,s_ge;
uchar PWMA,PWMB;
uint counter;
uchar i,j;
uchar jiaodu;void main()
{ TMOD|=0x11; TH0=0;TL0=0; TH1=0xFE; TL1=0x33;ET0=1; ET1=1; TR1=1; EA=1; jiaodu = 3;while(1){hcsr04(); count(); run();}
}void delayms(uint ms)
{uint msi,msj;for(msi = 0;msi < ms;msi++)for(msj = 0;msj < 112;msj++);
}void run()
{if(jiaodu ==3 && S >= 15){straight();hcsr04();count();}else if(jiaodu ==3 && S < 15){stop();jiaodu = 2;delayms(200);hcsr04();count();}if(jiaodu == 2 && S >=15){turnright();delayms(500);jiaodu =3;delayms(200);hcsr04();count();}else if(jiaodu == 2 && S < 15){jiaodu = 4;delayms(200);hcsr04();count();}if(jiaodu == 4 && S >=15){turnleft();delayms(500);jiaodu =3;delayms(200);hcsr04();count();}else if(jiaodu == 4 && S <15){jiaodu =3;delayms(200);hcsr04();count();}
}
void straight()
{IN1 = 1;IN2 = 0;PWMA = 25;IN3 = 1;IN4 = 0;PWMB = 25;
}
void turnleft()
{IN1 = 0;IN2 = 1;PWMA = 25;IN3 = 1;IN4 = 0;PWMB = 25;
}
void turnright()
{IN1 = 1;IN2 = 0;PWMA = 25;IN3 = 0;IN4 = 1;PWMB = 25;
}
void stop()
{IN1 = 0;IN2 = 0;PWMA = 0;IN3 = 0;IN4 = 0;PWMB = 0;
}
void hcsr04()
{Trig=1; _nop_(); _nop_(); _nop_(); _nop_(); _nop_();_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); Trig=0;while(!Echo); TR0=1; while(Echo); TR0=0;
}
void count(void)
{stime=TH0*256+TL0; TH0=0;TL0=0; S=(stime*1.8)/100;
}
void Tmr0_isr() interrupt 1
{flag=1;
}void Tmr1_isr() interrupt 3
{TH1=0xFE; TL1=0x33;i++;j++;counter++;if(counter <= jiaodu) DJ = 1;if(counter > jiaodu && counter <= 40) DJ = 0;if(counter > 40) counter = 0;if(i < PWMA){ENA = 1;}else {ENA = 0;if(i >= 100){i = 0;}}if(j < PWMB){ENB = 1;}else {ENB = 0;if(j >= 100){j = 0;}}
}