找回密码
 立即注册

QQ登录

只需一步,快速开始

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

控制直流电极的程序 用L298n为啥电机没动

[复制链接]
跳转到指定楼层
楼主
ID:146960 发表于 2016-12-9 18:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上面的程序中有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);
}















分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:84299 发表于 2016-12-9 21:26 | 只看该作者
首先数码管位选肯定不能少,电机没动因该是在中断服务函数里没有进行计数器值复位(TH0=0XC3;    TL0=0XC3;)处理
回复

使用道具 举报

板凳
ID:146960 发表于 2016-12-9 21:55 | 只看该作者
aiwang51 发表于 2016-12-9 21:26
首先数码管位选肯定不能少,电机没动因该是在中断服务函数里没有进行计数器值复位(TH0=0XC3;    TL0=0XC3; ...

定时器0工作方式2是自动重载,中断程序不是不用复位吗?
回复

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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