sc2272四路无线遥控小车程序,遥控和避障程序不能用不知道错在哪高手帮忙指正。最好附改好的程序。谢谢! 200
遥控不能按下即执行循迹程序,需要一直按住。避障程序没有反应。希望高手指正,非常感谢!#include<reg52.h>#defineucharunsignedchar#d...
遥控不能按下即执行循迹程序,需要一直按住。避障程序没有反应。希望高手指正,非常感谢!
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P2^1; //P10与电机驱动IN1相连
sbit s2=P2^2; //P11与电机驱动IN2相连
sbit s3=P2^3; //P12与电机驱动IN3相连
sbit s4=P2^4; //P13与电机驱动IN4相连
sbit en1=P3^0;
sbit en2=P3^1;
sbit leftss1_red=P1^0;
sbit ss3_red=P1^1;
sbit rightss5_red=P1^2;
sbit near_red=P1^4;
sbit D0=P3^7;
sbit D1=P3^6;
sbit D2=P3^5;
sbit D3=P3^4;
void xunji();
void init();
void goahead();
void turnleft();
void goback();
void turnright();
void stop();
void bz();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
/******电机程序**********/
void init()
{
en1=1; //开电机使能
en2=1;
s1=0; //先确定电机的低电平
s2=0;
s3=0;
s4=0;
}
void goahead()
{
s1=1;
s2=0;
s3=1;
s4=0;
}
void goback()
{
s1=0;
s2=1;
s3=0;
s4=1;
}
void turnleft()
{
s3=1;
s4=0;
}
void turnright()
{
s1=1;
s2=0;
}
void stop() //电机停止
{
en1=0;
en2=0;
}
/******循迹程序**********/
void xjqj() //循迹前进
{
if((leftss1_red==0)&(ss3_red==1)&(rightss5_red==0))
{
en1=1;
en2=1;
goahead();
delay(150);
en1=0;
en2=0;
delay(50);
}
else if(near_red==1) //避障
{
bz();
}
else if((leftss1_red==0)&(rightss5_red==1))
{
en1=0;
en2=1;
turnleft();
delay(150);
en1=1;
en2=0;
delay(50);
}
else if((leftss1_red==1)&(rightss5_red==0))
{
en1=1;
en2=0;
turnright();
delay(150);
en1=0;
en2=1;
delay(50);
}
else
{
stop();
}
}
void xjht() //循迹后退
{
if((leftss1_red==0)&(ss3_red==1)&(rightss5_red==0))
{
en1=1;
en2=1;
goahead();
delay(150);
en1=0;
en2=0;
delay(50);
}
else if((leftss1_red==1)&(rightss5_red==0))
{
en1=1;
en2=0;
turnleft();
delay(150);
en1=0;
en2=1;
delay(50);
}
else if((leftss1_red==0)&(rightss5_red==1))
{
en1=0;
en2=1;
turnright();
delay(150);
en1=1;
en2=0;
delay(50);
}
else
{
stop();
}
}
/******避障**********/
void bz()
{
en1=1;
en2=1;
goback();
delay(1500);
stop();
delay(500);
xjqj();
}
/******主函数**********/
main()
{
init(); // 调用电机初始化函数
TMOD=0x01;
EA=1;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
ET0=1;
TR0=1;
while(1)
{
if(D2==1&&D1==0&&D3==0&&D0==0) {xjqj();}//循迹前进
if(D1==1&&D2==0&&D3==0&&D0==0) {xjht();}//循迹后退
if(D3==1&&D2==0&&D1==0&&D0==0) {en1=0,en2=0;s1=0,s2=0,s3=0,s4=0;}//停
if(D0==1&&D2==0&&D3==0&&D1==0) {en1=1,en2=1;s1=0,s2=1,s3=0,s4=1;}//后退
}
}
修正可用的程序再追加800分。 展开
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit s1=P2^1; //P10与电机驱动IN1相连
sbit s2=P2^2; //P11与电机驱动IN2相连
sbit s3=P2^3; //P12与电机驱动IN3相连
sbit s4=P2^4; //P13与电机驱动IN4相连
sbit en1=P3^0;
sbit en2=P3^1;
sbit leftss1_red=P1^0;
sbit ss3_red=P1^1;
sbit rightss5_red=P1^2;
sbit near_red=P1^4;
sbit D0=P3^7;
sbit D1=P3^6;
sbit D2=P3^5;
sbit D3=P3^4;
void xunji();
void init();
void goahead();
void turnleft();
void goback();
void turnright();
void stop();
void bz();
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
/******电机程序**********/
void init()
{
en1=1; //开电机使能
en2=1;
s1=0; //先确定电机的低电平
s2=0;
s3=0;
s4=0;
}
void goahead()
{
s1=1;
s2=0;
s3=1;
s4=0;
}
void goback()
{
s1=0;
s2=1;
s3=0;
s4=1;
}
void turnleft()
{
s3=1;
s4=0;
}
void turnright()
{
s1=1;
s2=0;
}
void stop() //电机停止
{
en1=0;
en2=0;
}
/******循迹程序**********/
void xjqj() //循迹前进
{
if((leftss1_red==0)&(ss3_red==1)&(rightss5_red==0))
{
en1=1;
en2=1;
goahead();
delay(150);
en1=0;
en2=0;
delay(50);
}
else if(near_red==1) //避障
{
bz();
}
else if((leftss1_red==0)&(rightss5_red==1))
{
en1=0;
en2=1;
turnleft();
delay(150);
en1=1;
en2=0;
delay(50);
}
else if((leftss1_red==1)&(rightss5_red==0))
{
en1=1;
en2=0;
turnright();
delay(150);
en1=0;
en2=1;
delay(50);
}
else
{
stop();
}
}
void xjht() //循迹后退
{
if((leftss1_red==0)&(ss3_red==1)&(rightss5_red==0))
{
en1=1;
en2=1;
goahead();
delay(150);
en1=0;
en2=0;
delay(50);
}
else if((leftss1_red==1)&(rightss5_red==0))
{
en1=1;
en2=0;
turnleft();
delay(150);
en1=0;
en2=1;
delay(50);
}
else if((leftss1_red==0)&(rightss5_red==1))
{
en1=0;
en2=1;
turnright();
delay(150);
en1=1;
en2=0;
delay(50);
}
else
{
stop();
}
}
/******避障**********/
void bz()
{
en1=1;
en2=1;
goback();
delay(1500);
stop();
delay(500);
xjqj();
}
/******主函数**********/
main()
{
init(); // 调用电机初始化函数
TMOD=0x01;
EA=1;
TH0=(65536-200)/256;
TL0=(65536-200)%256;
ET0=1;
TR0=1;
while(1)
{
if(D2==1&&D1==0&&D3==0&&D0==0) {xjqj();}//循迹前进
if(D1==1&&D2==0&&D3==0&&D0==0) {xjht();}//循迹后退
if(D3==1&&D2==0&&D1==0&&D0==0) {en1=0,en2=0;s1=0,s2=0,s3=0,s4=0;}//停
if(D0==1&&D2==0&&D3==0&&D1==0) {en1=1,en2=1;s1=0,s2=1,s3=0,s4=1;}//后退
}
}
修正可用的程序再追加800分。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询