两轮巡线小车源程序 2个红外传感器

发布者:EtherealEssence最新更新时间:2020-09-21 来源: 51hei关键字:两轮巡线小车  红外传感器  电机驱动 手机看文章 扫描二维码
随时随地手机看文章

传感器:2个红外传感器


程序如下:

#include //52头文件

unsigned char pwm_left_val; //左电机占空比值 取值范围0-170,0最快

unsigned char pwm_right_val; //右电机占空比值取值范围0-170 ,0最快

unsigned char pwm_t;//周期

////////////////////////////////////

/*电机驱动IO定义*/

sbit IN1 = P1^0; //为1 左电机反转

sbit IN2 = P1^1; //为1 左电机正转

sbit IN3 = P1^2; //为1 右电机正转

sbit IN4 = P1^3; //为1 右电机反转

sbit EN1 = P1^6; //为1 左电机使能

sbit EN2 = P1^7; //为1 右电机使能

sbit left_led = P2^0;//左寻迹信号,为0没有识别到黑线,为1识别到黑线

sbit right_led = P2^3;//右寻迹信号,为0没有识别到黑线,为1识别到黑线


#define left_motor_en  EN1 = 1 //左电机使能

#define right_motor_en  EN2 = 1 //右电机使能


#define left_motor_stops IN1 = 0, IN2 = 0//左电机停止

#define right_motor_stops IN3 = 0, IN4 = 0//右电机停止

#define left_motor_go  IN1 = 0, IN2 = 1//左电机正传

#define left_motor_back  IN1 = 1, IN2 = 0//左电机反转

#define right_motor_go  IN3 = 1, IN4 = 0//右电机正传

#define right_motor_back IN3 = 0, IN4 = 1//右电机反转

///////////////////////////////////////////////////////////////////

/*延时*/

void delay(unsigned int z)//毫秒级延时

{

        unsigned int x,y;

        for(x = z; x > 0; x--)

                for(y = 110; y > 0 ; y--);

}        

/*小车前进*/

void forward()

{

        pwm_left_val= pwm_right_val=100;

        left_motor_go; //左电机前进

        right_motor_go; //右电机前进

}

/*小车左转*/

void xiaoleft_run()

{

        pwm_left_val=170;

        pwm_right_val=100;

        left_motor_go; //左电机前进

        right_motor_go; //右电机前进

}

/*小车右转*/

void xiaoright_run()

{

        pwm_left_val=100;

        pwm_right_val=170;

        left_motor_go; //左电机前进

        right_motor_go; //右电机前进

}


void timer0_init()

{

TMOD |= 0x02;//8位自动重装模块

TH0 = 220;

TL0 = 220;//11.0592M晶振下占空比最大比值是256,输出100HZ

TR0 = 1;//启动定时器0

ET0 = 1;//允许定时器0中断

EA  = 1;//总中断允许


}

int main()

{

timer0_init();

delay(100);//延时1秒

while(1)

{

  //为0 没有识别到黑线 为1识别到黑线

  if(left_led==0&&right_led==0)

  {

   forward();//前进

   delay(100);

  }

  else if( left_led == 1 && right_led== 0 )//左边触线,小左转修正

  {

   xiaoleft_run();

   delay(200);

  }

  else if(left_led == 0 && right_led== 1  )//右边触线,小右转修正

  {

   xiaoright_run();

   delay(200);

  }        

}               

}

//定时器0中断

void timer0() interrupt 1

{

        pwm_t++;//周期计时加

        if(pwm_t == 155)

                pwm_t = EN1 = EN2 = 0;

        if(pwm_left_val == pwm_t)//左电机占空比        

                EN1 = 1;               

        if(pwm_right_val == pwm_t)//右电机占空比

                EN2 = 1;                        

}


关键字:两轮巡线小车  红外传感器  电机驱动 引用地址:两轮巡线小车源程序 2个红外传感器

上一篇:rs485 16路继电器控制板 仿modbus通信协议控制有上下位机程序
下一篇:51单片机MLX90614红外温度计

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved