标题: 控制直流电极的程序 用L298n为啥电机没动 [打印本页]

作者: 程世龙    时间: 2016-12-9 18:47
标题: 控制直流电极的程序 用L298n为啥电机没动
上面的程序中有sbit NUM_1=P2^4;这个,是打开第一位数码管,没用到位选,这也可以吗?还有这个我用L298n为啥电机没动了?

#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
sbit L1=P1^0;
sbit L2=P1^1;
sbit R1=P1^2;
sbit R2=P1^3;
sbit key_down=P3^4;
sbit key_set=P3^5;
sbit key_up=P3^6;
sbit NUM_1=P2^4;
uchar PWM;
uchar num=0,duty=0,speed=0;
uchar code table[]={

                0x3F,  //"0"
                0x06,  //"1"
                0x5B,  //"2"
                0x4F,  //"3"
                0x66,  //"4"
                0x6D,  //"5"
                0x7D,  //"6"
                0x07,  //"7"
                0x7F,  //"8"
                0x6F,  //"9"
                0x77,  //"A"
                0x7C,  //"B"
                0x39,  //"C"
                0x5E,  //"D"
                0x79,  //"E"
                0x71,  //"F"
                0x76,  //"H"
                0x38,  //"L"
                0x37,  //"n"
                0x3E,  //"u"
                0x73,  //"P"
                0x5C,  //"o"
                0x40,  //"-"
                0x00,  //熄灭
                0x00  //自定义

                         };


void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void car_forward(uchar speed)
{ duty=speed;
  L1=0;
  L2=PWM;
  R1=0;
  R2=PWM;
}
void car_stop(void)
{ L1=0;
  L2=0;
  R1=0;
  R2=0;
}
void main(void)
{  TMOD=0x02;
   EA=1;
   TH0=0XC3;
   TL0=0XC3;
   ET0=1;
   TR0=1;
   NUM_1=0;
   P0=table[speed];
   while(1)
   { if(key_down==0 || key_up==0)
       {ET0=0;
        car_stop();
        delay(10);
          if(key_up==0)
            {
               speed++;
            }
          else if(key_down==0)
            { if(speed != 0)
                {
           speed--        ;
        }
            }
          P0=table[speed];
          while(key_down==0 || key_up==0)
           { ET0=1;
             if(key_set==0)
               { ET0=0;
                 car_stop();
         speed=0;
         P0=table[speed];
               }
            }
       }
   }
}
void timer0(void) interrupt 1
{ num++;
  if(num <= duty)
    {
      PWM=1;
    }
  else
  {
    PWM=0;
  }
  if(num >= 10)
  {
    num=0;
  }
  car_forward(speed);
}
















作者: aiwang51    时间: 2016-12-9 21:26
首先数码管位选肯定不能少,电机没动因该是在中断服务函数里没有进行计数器值复位(TH0=0XC3;    TL0=0XC3;)处理
作者: 程世龙    时间: 2016-12-9 21:55
aiwang51 发表于 2016-12-9 21:26
首先数码管位选肯定不能少,电机没动因该是在中断服务函数里没有进行计数器值复位(TH0=0XC3;    TL0=0XC3; ...

定时器0工作方式2是自动重载,中断程序不是不用复位吗?
作者: 程世龙    时间: 2016-12-9 21:56
程世龙 发表于 2016-12-9 21:55
定时器0工作方式2是自动重载,中断程序不是不用复位吗?

这个需要使能l298n的ENA和ENB吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1