微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 控制寻迹小车程序,如何优化提升小车速度。新手求教

控制寻迹小车程序,如何优化提升小车速度。新手求教

时间: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));
                                        }
                                }                               
                 }
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top