智能小车程序


#include

#define Left_moto_pwm P2_0 //接驱动模块ENA 使能端,输入PWM信号调节速度
#define Right_moto_pwm P2_7 //接驱动模块ENB
//传感器从右向左为one————five
#define one P0_6 //5路寻迹模块接口第一路
#define two P0_7 //5路寻迹模块接口第二路
#define three P0_4 //5路寻迹模块接口第三路
#define four P0_2 //5路寻迹模块接口第四路
#define five P0_0 //5路寻迹模块接口第5路

#define Left_moto_go {P2_1=0,P2_2=1;} //P3_4 P3_5 接IN1 IN2 当 P3_4=0,P3_5=1; 时左电机前进
#define Left_moto_back {P2_1=1,P2_2=0;} //P3_4 P3_5 接IN1 IN2 当 P3_4=1,P3_5=0; 时左电机后退
#define Right_moto_go {P2_5=1,P2_6=0;} //P3_6 P3_7 接IN1 IN2 当 P3_6=0,P3_7=1; 时右电机前进
#define Right_moto_back {P2_5=0,P2_6=1;} //P3_6 P3_7 接IN1 IN2 当 P3_6=1,P3_7=0; 时右电机后退

unsigned char pwm_val_left =0;//变量定义
unsigned char push_val_left =0;// 左电机占空比N/10
unsigned char pwm_val_right =0;
unsigned char push_val_right=0;// 右电机占空比N/10
bit Right_moto_stop=1;
bit Left_moto_stop =1;
unsigned int time=0;

void zhuan()
{
push_val_left = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度
push_val_right = 4; //PWM 调节参数1-10 1为最慢,10是最快 改这个值可以改变其速度
if(one==0||two==0)
{Left_moto_go; Right_moto_back;} //左转
if(three==0)
{Left_moto_back;Right_moto_go; } //后退
if(four==0||five==0)
{Left_moto_back;Right_moto_go; } //右转
else
{ Left_moto_go ; //左电机前进
Right_moto_go ; } //右电机前进
}
/************************************************************************/
/* PWM调制电机转速 */
/************************************************************************/
/* 左电机调速 */
/*调节push_val_left的值改变电机转速,占空比 */
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left<=push_val_left)
Left_moto_pwm=1;
else
Left_moto_pwm=0;
if(pwm_val_left>=10)
pwm_val_left=0;
}
else Left_moto_pwm=0;
}
/******************************************************************/
/* 右电机调速 */
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right<=push_val_right)
Right_moto_pwm=1;
else
Right_moto_pwm=0;
if(pwm_val_right>=10)
pwm_val_right=0;
}
else Right_moto_pwm=0;
}
/*********

******************************************/
///*TIMER0中断服务子函数产生PWM信号*/
void timer0()interrupt 1 using 2
{
TH0=0XF8; //1Ms定时
TL0=0X30;
time++;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/***************************************************/

void main(void)
{

TMOD=0X01;
TH0= 0XF8; //1ms定时
TL0= 0X30;
TR0= 1;
ET0= 1;
EA = 1;
P0=0xff;
while(1) /*无限循环*/
{
zhuan();
}
}

相关文档
最新文档