找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1313|回复: 0
打印 上一主题 下一主题
收起左侧

以下程序非本人所写

[复制链接]
跳转到指定楼层
楼主
ID:328853 发表于 2018-5-13 14:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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();   }
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

Powered by 单片机教程网

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