控制寻迹小车程序,如何优化提升小车速度。新手求教
时间:10-02
整理:3721RD
点击:
/********************************
课题:循迹智能车设计
硬件连接:
左电机控制端口:P0.3、P0.2
右电机控制端口:P0.1、P0.0
P1.0--------右光电管
P1.1--------前光电管
P1.2--------左光电管
*********************************/
#include<reg52.h>//包含必要头文件
sbit you1=P0^0;//定义单片机控制右边电机的引脚
sbit you2=P0^1;//定义单片机控制右边电机的引脚
sbit zuo1=P0^2;//定义单片机控制左边电机的引脚
sbit zuo2=P0^3;//定义单片机控制左边电机的引脚
sbit q=P1^1;//定义单片机连接循迹板前边光电管的引脚
sbit y=P1^0;//定义单片机连接循迹板右边光电管的引脚
sbit z=P1^2;//定义单片机连接循迹板左边光电管的引脚
sbit zb=P1^3;
sbit yb=P1^4;
void delay(int z)//pwm中使用的延时函数
{
int i,j;
for(i=2;i>0;i--)
for(j=z;j>0;j--);
}
void delay2() //等待使用的延时函数
{
int i,j;
for(i=400;i>0;i--)
for(j=580;j>0;j--);
}
void qian()//左右轮协同前进子函数
{
you1=0;99999
you2=1;
zuo1=0;
zuo2=1;
delay(7);//pwm调速 此为pwm有效值
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-7);
}
void you()//左右轮协同 右转子函数
{
you1=0;
you2=1;
zuo1=1;
zuo2=0;
delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-5);
}
void zuo()//左右轮协同 左转子函数
{
you1=1;
you2=0;
zuo1=0;
zuo2=1;
delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-5);
}
void ting()//左右轮都停止转动
{
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(50000);
}
void hou()//左右轮协同前进子函数
{
you1=1;
you2=0;
zuo1=1;
zuo2=0;
}
void main()//主函数
{
z=1;
q=1;
y=1;
delay2();
ting();
while(1)//单片机不间断监测 (是个死循环)
{
qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态
while((z==0)&&(y==1))//判断当左边光电管遇到黑线时
{
zuo();//调用左转子函数
}
while((z==1)&&(y==0))//判断当右边光电管遇到黑线时
{
you();//调用右转子函数
}
while((z==0)&&(y==0)&&(q==0))//判断当左右光电管均遇到黑线时
{ //即遇到十字路口时
unsigned int i=0;
for(i=0;i<300;i++)
qian(); //调用前进子函数
while((q==1)&&(z==1)&&(y==1))
{
unsigned char zz,yy,qq;
for(i=0;i<20000;i++)
ting(); //调用停止子函数
delay(5000);
qq=q;
zz=z;
yy=y;
while((qq==q)&&(zz==z)&&(yy==y));
}
}
}
}
课题:循迹智能车设计
硬件连接:
左电机控制端口:P0.3、P0.2
右电机控制端口:P0.1、P0.0
P1.0--------右光电管
P1.1--------前光电管
P1.2--------左光电管
*********************************/
#include<reg52.h>//包含必要头文件
sbit you1=P0^0;//定义单片机控制右边电机的引脚
sbit you2=P0^1;//定义单片机控制右边电机的引脚
sbit zuo1=P0^2;//定义单片机控制左边电机的引脚
sbit zuo2=P0^3;//定义单片机控制左边电机的引脚
sbit q=P1^1;//定义单片机连接循迹板前边光电管的引脚
sbit y=P1^0;//定义单片机连接循迹板右边光电管的引脚
sbit z=P1^2;//定义单片机连接循迹板左边光电管的引脚
sbit zb=P1^3;
sbit yb=P1^4;
void delay(int z)//pwm中使用的延时函数
{
int i,j;
for(i=2;i>0;i--)
for(j=z;j>0;j--);
}
void delay2() //等待使用的延时函数
{
int i,j;
for(i=400;i>0;i--)
for(j=580;j>0;j--);
}
void qian()//左右轮协同前进子函数
{
you1=0;99999
you2=1;
zuo1=0;
zuo2=1;
delay(7);//pwm调速 此为pwm有效值
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-7);
}
void you()//左右轮协同 右转子函数
{
you1=0;
you2=1;
zuo1=1;
zuo2=0;
delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-5);
}
void zuo()//左右轮协同 左转子函数
{
you1=1;
you2=0;
zuo1=0;
zuo2=1;
delay(5);//pwm调速 此为pwm有效值,前进时速度为全速的80%
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(10-5);
}
void ting()//左右轮都停止转动
{
you1=1;
you2=1;
zuo1=1;
zuo2=1;
delay(50000);
}
void hou()//左右轮协同前进子函数
{
you1=1;
you2=0;
zuo1=1;
zuo2=0;
}
void main()//主函数
{
z=1;
q=1;
y=1;
delay2();
ting();
while(1)//单片机不间断监测 (是个死循环)
{
qian();//调用前进子函数,使小车光电管不满足以下几个条件时都处于前进状态
while((z==0)&&(y==1))//判断当左边光电管遇到黑线时
{
zuo();//调用左转子函数
}
while((z==1)&&(y==0))//判断当右边光电管遇到黑线时
{
you();//调用右转子函数
}
while((z==0)&&(y==0)&&(q==0))//判断当左右光电管均遇到黑线时
{ //即遇到十字路口时
unsigned int i=0;
for(i=0;i<300;i++)
qian(); //调用前进子函数
while((q==1)&&(z==1)&&(y==1))
{
unsigned char zz,yy,qq;
for(i=0;i<20000;i++)
ting(); //调用停止子函数
delay(5000);
qq=q;
zz=z;
yy=y;
while((qq==q)&&(zz==z)&&(yy==y));
}
}
}
}