找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1203|回复: 1
收起左侧

智能小车寻迹程序

[复制链接]
ID:457497 发表于 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();         
         }
}

回复

使用道具 举报

ID:1 发表于 2019-4-14 21:44 | 显示全部楼层
本帖需要重新编辑补全电路原理图,源码,详细说明与图片即可获得100+黑币(帖子下方有编辑按钮)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表