/****************************************************// //***************************************************// // 智能小车控制器基于51单片机实现前进后退转弯与智能采样控制功能 #include #include unsigned int tata[8]; unsigned char flag=0,flag2=0,flag3=0,n,m; unsigned int Angle,q,length,temp1; sbit A1=P3^2; sbit A2=P3^3; sbit B1=P3^4; sbit B2=P3^5; sbit ENA=P3^6; sbit ENB=P3^7;
sbit red1=P1^3; sbit red2=P1^6;
void InitUART(void) {
TMOD = 0x20;
SCON = 0x50;
TH1 = 0xFD;
TL1 = TH1;
PCON = 0x00;
ES
= 1;
TR1 = 1; EA
= 1; ENA = 1; ENB = 1; }
void delay(void)
//直线延时延时函数 {
unsigned char a,b;
for(b=255;b>0;b--)
for(a=38;a>0;a--); }
void delay1(void)
//转角延时函数 {
unsigned char w,y,c;
for(c=1;c>0;c--)
for(y=97;y>0;y--)
for(w=3;w>0;w--); }
void delay3(void)
//避障延时函数 {
unsigned char a,b,c;
for(c=98;c>0;c--)
for(b=100;b>0;b--)
for(a=40;a>0;a--); }
void delay2(void)
//手动控制延时函数 {
unsigned char a,b,c;
for(c=98;c>0;c--)
for(b=15;b>0;b--)
for(a=17;a>0;a--)
{
if(m)
{
break;
}
} } void qianjin() //前进 { unsigned char f; A1=1;A2=0;B1=1;B2=0;
for(f=0;f
A1=1;A2=0;B1=1;B2=0; }
void zuozhuan() //左转 { A1=1;A2=0;B1=0;B2=1; }
void youzhuan() //右转 { A1=0;A2=1;B1=1;B2=0; }
void houtui() { A1=0;A2=1;B1=0;B2=1; } void tingzhi() { A1=0;A2=0;B1=0;B2=0; }
void main() { unsigned char temp; InitUART(); while(1) {
if(flag)
{
flag=0;
for(temp=2;temp
{
tata[temp]=tata[temp]%16;
}
//执行转角指令
Angle=10*(tata[2]*100+tata[3]*10+tata[4]);
m=0;
if(Angle
//地面小角度摩擦校正函数
{
Angle++;
}
if(tata[1]==\'L\')
{
for(q=0;q
{
zuozhuan();
delay1();
if(m)
{
break;
}
} } else if(tata[1]==\'R\') { for(q=0;q
{
youzhuan();
delay1();
if(m)
{
break;
}
} } tingzhi(); delay(); for(temp=2;temp
{
tata[temp]=tata[temp]%16; }
//执行前进指令
length=100*(tata[5]*100+tata[6]*10+tata[7]); // m=0; if(!m) { for(q=0;q
{
qianjin();
delay();
delay();
if(m)
{
break;
}
if(!red1)
{
delay1();
if(!red1)
{
youzhuan();
delay3();
while(!red1);
}
}
if(!red2)
{
delay1();
if(!red2)
{
zuozhuan();
delay3();
while(!red2);
}
}
if((!red1)||(!red2))
{
houtui();
delay3();
while((!red1)||(!red2));
}
}
}
}
if(flag3)
{
m=0;
flag3=0;
if(tata[1]
==\'W\'){qianjin(); }
else if(tata[1]==\'A\'){A1=0;A2=0;B1=0;B2=1;}
else if(tata[1]==\'S\'){houtui();}
else if(tata[1]==\'D\'){A1=0;A2=1;B1=0;B2=0;}
else if(tata[1]==\'T\'){tingzhi(); }
delay2();
}
tingzhi(); } }
void UARTInterrupt(void) interrupt 4 {
if(RI)
{
m=1;
RI = 0;
if(SBUF==\'$\')
{
flag2=1;
}
if(flag2)
{
}
} } tata[n]=SBUF; n++;
if(n==9&&tata[8]==\'*\') { n=0; flag=1; flag2=0; } if(n==3&&tata[2]==\'#\') { n=0; flag3=1; flag2=0; }