找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3606|回复: 0
收起左侧

四路巡线小车代码

[复制链接]
ID:244417 发表于 2017-10-30 23:50 | 显示全部楼层 |阅读模式
#include<AT89x51.H>

#define Right_moto_pwm P1_4 //接驱动模块ENA使能端输入PWM

信号调节速度

#define Left_moto_pwm P1_5 //接驱动模块ENB使能端输入PWM

信号调节速度

#define Left_1_led P2_0 //四路寻迹模块接口第一路

#define Left_2_led P2_1 //四路寻迹模块接口第二路

#define Right_1_led P2_2 //四路寻迹模块接口第三路

#define Right_2_led P2_3 //四路寻迹模块接口第四路

#define Left_moto_go {P1_0=0,P1_1=1;} //左电机前进

#define Left_moto_back {P1_0=1,P1_1=0;} //左电机后退

#define Left_moto_stop {P1_0=1,P1_1=1;} //左电机停转

#define Right_moto_go {P1_2=0,P1_3=1;} //右电机前转 #define Right_moto_back {P1_2=1,P1_3=0;} //右电机后退

#define Right_moto_stop {P1_2=1,P1_3=1;} //右电机停转

#define uchar unsigned char

#define uint unsigned int

uchar pwm_val_left =0;

uchar push_val_left =0; //左电机占空比N/10

uchar pwm_val_right =0;

uchar push_val_right=0; //右电机占空比N/10

bit Right_moto_stp=1;

bit Left_moto_stp =1;

/****************************************************************

********/

void run(void) //前进函数

{

push_val_left =13; //PWM 调节参数1-20 1为最慢20是最快 改这

个值可以改变其速度

push_val_right =15; //PWM 调节参数1-20 1为最慢20是最快 改

这个值可以改变其速度

Left_moto_go ; //左电机前进

Right_moto_go ; //右电机前进

}

/****************************************************************

********/

void left(void) //左转函数

{

push_val_left =8;

push_val_right =9;

Right_moto_go; //右电机继续

Left_moto_stop; //左电机停走

}

/************************************************************************/

void right(void) //右转函数

{

push_val_left =8;

push_val_right =9;

Right_moto_stop; //右电机停走

Left_moto_go; //左电机继续

}

void Delayms(uint x)

{

uchar i;

while(x--)for(i=0;i<120;i++);

}

void stop(void)

{

Right_moto_stop; //右电机停走

Left_moto_stop; //左电机停走

Delayms(3000);

run();

Delayms(100);

}

/*************************PWM调 制 电 机 转 速

********************************/

void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变

电机转速,占空比

{

if(Left_moto_stp)

{

if(pwm_val_left<=push_val_left)

Left_moto_pwm=1;

else

Left_moto_pwm=0; if(pwm_val_left>=20)

pwm_val_left=0;

}

else

Left_moto_pwm=0;

}

void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变

电机转速,占空比

{

if(Right_moto_stp)

{

if(pwm_val_right<=push_val_right)

Right_moto_pwm=1;

else

Right_moto_pwm=0;

if(pwm_val_right>=20)

pwm_val_right=0;

}

else

Right_moto_pwm=0;

}

/***************************************************/

void xunji()

{

switch(P2&0x0f)

{

case 0x00: // 全部没有压线直走

run(); break;

case 0x01: // 右压线左转

left(); break;

case 0x02: // 右压线左转

left(); break;

case 0x04: // 左压线转右

right(); break; case 0x08: // 左压线右转

right();break;

case 0x0f:

stop();break;

default:

run(); break;

}

}

/***********TIMER0中断服务子函数产生PWM信号**********/

void timer0()interrupt 1 using 2

{

TH0=0XF8; //2Ms定时

TL0=0X30;

pwm_val_left++;

pwm_val_right++;

pwm_out_left_moto();

pwm_out_right_moto();

}

/***************************************************/

void main(void)

{

TMOD=0X01;

TH0= 0XF8; //2ms定时

TL0= 0X30;

TR0= 1;

ET0= 1;

EA = 1;

while(1) /*无限循环*/

{

xunji(); }

}

回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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