标题: 智能小车寻迹程序 [打印本页]

作者: 1673945286    时间: 2019-4-14 13:23
标题: 智能小车寻迹程序
#include<reg52.h>
#include"touwenjian.h"
sbit IN1=P1^2;
sbit IN2=P1^3;
sbit IN3=P1^6;
sbit IN4=P1^7;
sbit EN1=P1^4;
sbit EN2=P1^5;

//定义按键
sbit K4=P3^7;
//sbit K3=P3^6;

//蜂鸣器驱动口定义
sbit FM=P2^3;

//循迹LED指示灯定义
sbit Left_1_led=P3^3;         //左循迹红外传感器      
sbit Right_1_led=P3^2;         //右循迹红外传感器  

//避障LED指示灯定义  
sbit Left_2_led=P3^4;         //左避障红外传感器  
sbit Right_2_led=P3^5;         //右避障红外传感器  


#define left_go           {IN1=0,IN2=1;}            //左电机向前走
#define left_back         {IN1=1,IN2=0;}            //左边电机向后转
#define left_stop         {EN1=0;IN1=0,IN2=0;}         //左边电机停转                     
#define right_go          {IN3=1,IN4=0;}           //右边电机向前走
#define right_back        {IN3=0,IN4=1;}           //右边电机向后走
#define right_stop        {EN2=0;IN3=0,IN4=0;}               //右边电机停转

unsigned char pwm_kong_left  =0;
unsigned char pwm_kong_right =0;

unsigned char push_kong_left  =6;
unsigned char push_kong_right =6;

bit right_pwm_on =1;
bit left_pwm_on  =1;

void delay(unsigned int xms)                               
{
    unsigned int i,j;
        for(i=xms;i>0;i--)                     
    for(j=112;j>0;j--);
}

void qianjin(void)
{
        right_go;
        left_go;

}

void houtui(void)
{
        right_back;
        left_back;
}

void zuozhuan(void)
{
        right_go;
        left_stop;
}

void youzhuan(void)
{
        right_stop;
        left_go;

}
void tingzhi(void)
{
        right_stop;
        left_stop;
}

void pwm_tiaosu_right(void)
{
        if(right_pwm_on)
        {
                if(pwm_kong_right<=push_kong_right)
                {
                        EN1=1;
                }
                else
                {
                        EN1=0;
                }
                if(pwm_kong_right==20)
                {
                        pwm_kong_right=0;
                }
        }
        else
        {
                EN1=0;
        }
}

void pwm_tiaosu_left(void)
{
        if(right_pwm_on)
        {
                if(pwm_kong_left<=push_kong_right)
                {
                        EN2=1;
                }
                else
                {
                        EN2=0;
                }
                if(pwm_kong_left==20)
                {
                        pwm_kong_left=0;
                }
        }
        else
        {
                EN2=0;
        }
}

void timer0()interrupt 1 using 2
{
        TH0=0XFC;
        TL0=0X66;
        pwm_kong_right++;
        pwm_kong_left++;
        pwm_tiaosu_right();
        pwm_tiaosu_left();
}

//判断案件是否按下,按下就前进
void keyscan(void)              //按键扫描函数
{
    A:    if(K4==0)                        //判断是否有按下信号
                {
                    delay(10);                  //延时10ms
                        if(K4==0)                        //再次判断是否按下
                         {
                            FM=0;               //蜂鸣器响                 
                            while(K4==0);        //判断是否松开按键
                            FM=1;               //蜂鸣器停止  
                          }
                    else
                     {
                       goto A;        //跳转到A重新检测
                      }
                }
                else
                {
                  goto A;             //跳转到A重新检测
                }
}


void main(void)
{
        P1=0x00;
//        keyscan();
        delay(1000);

        TMOD=0X01;
    TH0= 0XFC;  //1ms定时
    TL0= 0X66;
    TR0= 1;
    ET0= 1;
        EA = 1;       

                while(1)        //无限循环
        {
            //有信号为0  没有信号为1
        if(Left_1_led==0&&Right_1_led==0)
            qianjin();   //调用前进函数
        else if(Left_1_led==1&&Right_1_led==0)            //左边检测到黑线
                        {
                             zuozhuan();                       //调用小车左转函数
                        }                          
                else if(Right_1_led==1&&Left_1_led==0)                //右边检测到黑线
                        {          
                                 youzhuan();                   //调用小车右转函数
                    }
                else
                        tingzhi();         
         }
}


作者: admin    时间: 2019-4-14 21:44
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1