最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

智能循迹小车程序代码(4路)

IT圈 admin 20浏览 0评论

2024年6月6日发(作者:梅成天)

智能循迹小车程序代码(4路)

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

**

************

硬件连接

P1_4接驱动模块ENA使能端输入PWM信号调节速度

P1_5接驱动模块ENB使能端输入PWM信号调节速度

P1_0 P1_1接IN1 IN2 当 P1_0=1,P1_1=0; 时左电机正转 驱动蓝

色输出

端OUT1 OUT2接左电机

P1_0 P1_1接IN1 IN2 当 P1_0=0,P1_1=1; 时左电机反转

P1_2 P1_3接IN3 IN4 当 P1_2=1,P1_3=0; 时右电机正转 驱动蓝

色输出

端OUT3 OUT4接右电机

P1_2 P1_3接IN3 IN4 当 P1_2=0,P1_3=1; 时右电机反转

P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为

OUT1

P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为

OUT2

P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为

OUT3

P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为

OUT4

八路寻迹传感器有信号(白线为0 没有信号黑线为1

***************************************************************

**

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

#include

#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为最慢

改这

个值可以改变其速度

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;

20是最快

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(); }

}

2024年6月6日发(作者:梅成天)

智能循迹小车程序代码(4路)

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

**

************

硬件连接

P1_4接驱动模块ENA使能端输入PWM信号调节速度

P1_5接驱动模块ENB使能端输入PWM信号调节速度

P1_0 P1_1接IN1 IN2 当 P1_0=1,P1_1=0; 时左电机正转 驱动蓝

色输出

端OUT1 OUT2接左电机

P1_0 P1_1接IN1 IN2 当 P1_0=0,P1_1=1; 时左电机反转

P1_2 P1_3接IN3 IN4 当 P1_2=1,P1_3=0; 时右电机正转 驱动蓝

色输出

端OUT3 OUT4接右电机

P1_2 P1_3接IN3 IN4 当 P1_2=0,P1_3=1; 时右电机反转

P1_0接四路寻迹模块接口第一路输出信号即中控板上面标记为

OUT1

P1_1接四路寻迹模块接口第二路输出信号即中控板上面标记为

OUT2

P1_2接四路寻迹模块接口第三路输出信号即中控板上面标记为

OUT3

P1_3接四路寻迹模块接口第四路输出信号即中控板上面标记为

OUT4

八路寻迹传感器有信号(白线为0 没有信号黑线为1

***************************************************************

**

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

#include

#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为最慢

改这

个值可以改变其速度

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;

20是最快

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(); }

}

发布评论

评论列表 (0)

  1. 暂无评论