
#include <stc89C52.h>
#define uchar unsigned char
#define uint unsigned int
/////////pwm调试使能端
sbit LPWMA=P2^0;//左电机
sbit LM0=P2^1;//
sbit LM1=P2^2;
sbit RPWMB=P2^5;//右电机
sbit RM0=P2^3;//
sbit RM1=P2^4;
////////////五路循迹
sbit L1=P4^4;//左--->右
sbit L0=P4^1;
sbit M0=P3^7;
sbit R0=P3^6;
sbit R1=P3^5;
////////////////
void delay(unsigned int t); //函数声明
void Init_Timer0(void);//定时器初始化
///////////////定义电机转动方向
#define Right_moto_back {RM0=0,RM1=1;} //右电机后退
#define Right_moto_go {RM0=1,RM1=0;} //右电机前进
#define Right_moto_stop {RM0=1,RM1=1;} //右电机停转
#define Left_moto_back {LM0=1,LM1=0;} //左1电机后退
#define Left_moto_go {LM0=0,LM1=1;} //左1电机前进
#define Left_moto_stop {LM0=1,LM1=1;} //左1电机停转
//////////////////////////////
/////////////////////////////
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 =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度
push_val_right =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度
Left_moto_go ; //左1电机前进
Right_moto_go ; //右1电机前进
}
/************************************************************************/
void left(void) //左转函数
{
push_val_left =12;
push_val_right =12;
Right_moto_go; //右电机继续
Left_moto_stop; //左电机停走
}
/*************************************** *********************************/
void right(void) //右转函数
{
push_val_left =12;
push_val_right =12;
Right_moto_stop; //右电机停走
Left_moto_go; //左电机继续
}
///////////////////////////////////////////////////////////////停止
void delay_50ms(int t)
{
int j;
for(;t>0;t--)
for(j=110;j>0;j--);
}
void yuandizhuan(void)//原地转
{
delay_50ms(30);
push_val_left =20;
push_val_right =20;
Left_moto_go ; //左电机前进
Right_moto_back ;//右电机后退
}
void stop()//停车
{
Left_moto_stop ; //左电机前进
Right_moto_stop ;//右电机后退
}
///////////////////////////////////////////
/*************************PWM调 制 电 机 转 速
********************************/
void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变电机转速,占空比
{
if(Left_moto_stp)
{
if(pwm_val_left<=push_val_left)LPWMA=1;
else LPWMA=0;
if(pwm_val_left>=20)pwm_val_left=0;
}
else LPWMA=0;
}
void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变电机转速,占空比
{
if(Right_moto_stp)
{
if(pwm_val_right<=push_val_right)
{RPWMB=1;}
else
{RPWMB=0;}
if(pwm_val_right>=20)
{pwm_val_right=0;}
}
else
{RPWMB=0;}
}
/***************************************************/
// void xunji()//寻迹
//{
//
//while(1)
//{
// if(P101&&P111&&P120&&P131&&P141) //直行
// run();
// if(P101&&P111&&P120&&P130&&P141)// 右转
// right();
// if(P101&&P110&&P120&&P131&&P141) // 左转
// left();
// if(P100&&P110&&P120&&P130&&P140) //到终点
// yuandizhuan();
// }
// }
/*TIMER0中断服务子函数产生PWM信号/
void Init_Timer0()interrupt 1 using 2
{
TH0=0XFC; //2Ms定时
TL0=0X30;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*************************./z**************************/
void main(void)
{
// TMOD |=0X01;
// TH0= 0XFC; //2ms定时
// TL0= 0X30;
// TR0= 1;
// ET0= 1;
// EA = 1;
// while(1) /无限循环 /
// {
// //xunji();
// push_val_left =6;
// // Left_moto_stop; //左电机停走
// Left_moto_go; //左电机停走
// push_val_right =6;
// Right_moto_go; //右电机继续
// }
}
void delay(unsigned int t)
{
while(--t);
}
c
#include <stc89C52.h>
#define uchar unsigned char
#define uint unsigned int
/////////pwm调试使能端
sbit LPWMA=P2^0;//左电机
sbit LM0=P2^1;//
sbit LM1=P2^2;
sbit RPWMB=P2^5;//右电机
sbit RM0=P2^3;//
sbit RM1=P2^4;
////////////五路循迹
sbit L1=P4^4;//左--->右
sbit L0=P4^1;
sbit M0=P3^7;
sbit R0=P3^6;
sbit R1=P3^5;
////////////////
void delay(unsigned int t); //函数声明
void Init_Timer0(void);//定时器初始化
///////////////定义电机转动方向
#define Right_moto_back {RM0=0,RM1=1;} //右电机后退
#define Right_moto_go {RM0=1,RM1=0;} //右电机前进
#define Right_moto_stop {RM0=1,RM1=1;} //右电机停转
#define Left_moto_back {LM0=1,LM1=0;} //左1电机后退
#define Left_moto_go {LM0=0,LM1=1;} //左1电机前进
#define Left_moto_stop {LM0=1,LM1=1;} //左1电机停转
//////////////////////////////
/////////////////////////////
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 =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度
push_val_right =10; //PWM 调节参数1-20 1为最慢20是最快 改这个值可以改变其速度
Left_moto_go ; //左1电机前进
Right_moto_go ; //右1电机前进
}
/************************************************************************/
void left(void) //左转函数
{
push_val_left =12;
push_val_right =12;
Right_moto_go; //右电机继续
Left_moto_stop; //左电机停走
}
/*************************************** *********************************/
void right(void) //右转函数
{
push_val_left =12;
push_val_right =12;
Right_moto_stop; //右电机停走
Left_moto_go; //左电机继续
}
///////////////////////////////////////////////////////////////停止
void delay_50ms(int t)
{
int j;
for(;t>0;t--)
for(j=110;j>0;j--);
}
void yuandizhuan(void)//原地转
{
delay_50ms(30);
push_val_left =20;
push_val_right =20;
Left_moto_go ; //左电机前进
Right_moto_back ;//右电机后退
}
void stop()//停车
{
Left_moto_stop ; //左电机前进
Right_moto_stop ;//右电机后退
}
///////////////////////////////////////////
/*************************PWM调 制 电 机 转 速
********************************/
void pwm_out_left_moto(void) //左电机调速,调节push_val_left的值改变电机转速,占空比
{
if(Left_moto_stp)
{
if(pwm_val_left<=push_val_left)LPWMA=1;
else LPWMA=0;
if(pwm_val_left>=20)pwm_val_left=0;
}
else LPWMA=0;
}
void pwm_out_right_moto(void) //右电机调速,调节push_val_left的值改变电机转速,占空比
{
if(Right_moto_stp)
{
if(pwm_val_right<=push_val_right)
{RPWMB=1;}
else
{RPWMB=0;}
if(pwm_val_right>=20)
{pwm_val_right=0;}
}
else
{RPWMB=0;}
}
/***************************************************/
// void xunji()//寻迹
//{
//
//while(1)
//{
// if(P10==1&&P11==1&&P12==0&&P13==1&&P14==1) //直行
// run();
// if(P10==1&&P11==1&&P12==0&&P13==0&&P14==1)// 右转
// right();
// if(P10==1&&P11==0&&P12==0&&P13==1&&P14==1) // 左转
// left();
// if(P10==0&&P11==0&&P12==0&&P13==0&&P14==0) //到终点
// yuandizhuan();
// }
// }
/***********TIMER0中断服务子函数产生PWM信号**********/
void Init_Timer0()interrupt 1 using 2
{
TH0=0XFC; //2Ms定时
TL0=0X30;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();
}
/*************************./z**************************/
void main(void)
{
// TMOD |=0X01;
// TH0= 0XFC; //2ms定时
// TL0= 0X30;
// TR0= 1;
// ET0= 1;
// EA = 1;
// while(1) /*无限循环*/
// {
// //xunji();
// push_val_left =6;
// // Left_moto_stop; //左电机停走
// Left_moto_go; //左电机停走
// push_val_right =6;
// Right_moto_go; //右电机继续
// }
}
void delay(unsigned int t)
{
while(--t);
}