小车转向及速度控制

这个代码我拿到的时候是改过的,原来是控制四轮小车的代码,后面改成控制三轮的了。

代码:

#include <reg52.h>//在这里01是向前走,10是想后走
sbit H1=P0^1;
sbit H2=P0^2;
sbit H3=P0^3;
sbit H4=P0^4;

//--定义使用的IO口--//
sbit PWM1=P3^1;
sbit PWM2=P3^2;
sbit PWM3=P3^3;
sbit PWM4=P3^4;
sbit ena=P3^5;
sbit enb=P3^6;
//--定义一个全局变量--//
unsigned char timer1; 

void Time1Config();

/*******************************************************************************
* 函 数 名       : main
* 函数功能       : 主函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void speed1(unsigned int d)//直走,通过改变d的值改变速度

{
    Time1Config();
    while(1)
    { 
        if(timer1>100)  //PWM周期为100*0.5ms
        {
            timer1=0;      break;
        }
        if(timer1 < d)  //改变d这个值可以改变直流电机的速度
        {
            PWM1=0;
            PWM2=1;
            PWM3=0;
            PWM4=1;
            ena=1;
            enb=1;

        }
        else
        {
                PWM1=0;
            PWM2=0;
            PWM3=0;
            PWM4=0;
            ena=0;
            enb=0;
        }
    }
    }
void speed2(unsigned int d)//向左转
{
    Time1Config();
    while(1)
    { 
        if(timer1>100)  
        {
            timer1=0;   break;
        }
        if(timer1 < d)  
        {
            PWM1=1;
            PWM2=0;
            PWM3=0;
            PWM4=1;
            ena=1;
            enb=1;

        }
        else
        {
                PWM1=0;
            PWM2=0;
            PWM3=0;
            PWM4=0;
            ena=0;
            enb=0;
        }
    }   

 }
 void speed3(unsigned int d)//向右转
{
    Time1Config();
    while(1)
    { 
        if(timer1>100)  //PWM周期为100*0.5ms
        {
            timer1=0;  break;
        }
        if(timer1 < d)  //改变30这个值可以改变直流电机的速度
        {
            PWM1=0;
            PWM2=1;
            PWM3=1;
            PWM4=0;
            ena=1;
            enb=1;

        }
        else
        {
                PWM1=0;
            PWM2=0;
            PWM3=0;
            PWM4=0;
            ena=0;
            enb=0;
        }
    }   

 }
 void speed4(unsigned int d)
{
    Time1Config();
    while(1)
    { 
        if(timer1>100)  //PWM周期为100*0.5ms
        {
            timer1=0;  break;
        }
        if(timer1 < d)  //改变d这个值可以改变直流电机的速度
        {
            PWM1=0;
            PWM2=0; 
            PWM3=0;
            PWM4=0;
            ena=0;
            enb=0;

        }
        else
        {
                PWM1=0;
            PWM2=0;
            PWM3=0;
            PWM4=0;
            ena=0;
            enb=0;
        }
    }
    }

 void main()
 {  while(1)
   {   

       if(H3==1&&H2==1&&H1==0||H3==1&&H2==0&&H1==0)
    { 
    speed2(10) ;}//偏右了,应该向左转

      if(H3==0&&H2==1&&H1==0||H3==1&&H2==1&&H1==1||H3==1&&H2==0&&H1==1||H3==0&&H2==0&&H1==0)
    { speed1(15) ;}//直走
      if(H3==0&&H2==0&&H1==1||H3==0&&H2==1&&H1==1)
    { speed3(10) ;}向右转                                       


 }


   }


/*******************************************************************************
* 函 数 名       : Time1Config
* 函数功能       : 设置定时器
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void Time1Config()//记时器
{
    TMOD|= 0x10;   //设置定时计数器工作方式1为定时器

    //--定时器赋初始值,12MHZ下定时0.5ms--//  
    TH1 = 0xFE; 
    TL1 = 0x0C;


    ET1 = 1;     //开启定时器1中断
    EA = 1;
    TR1 = 1;     //开启定时器    
}

/*******************************************************************************
* 函 数 名       : Time1
* 函数功能       : 定时器1的中断函数
* 输    入       : 无
* 输    出       : 无
*******************************************************************************/

void Time1(void) interrupt 3    //3 为定时器1的中断号  1 定时器0的中断号 0 外部中断1 2 外部中断2  4 串口中断
{
    TH1 = 0xFE;  //重新赋初值
    TL1 = 0x0C;
    timer1++;    
}

  • 18
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值