怎么通过按键控制步进电机的转动还是停止?

2019-07-15 13:24发布

本帖最后由 看起来很无聊 于 2016-7-17 11:29 编辑

这是我自己写的一个程序,刚开始步进电机是停止的,按下按键后步进电机转动,但是再按下按键时,步进电机并不会停止。应该怎么改呢或者有什么思路其他的方法?
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;                                         //暂停还有停止
unsigned char code F_Rotation[4]={0x03,0x06,0x0c,0x09};//正转表格
unsigned char code B_Rotation[4]={0x03,0x09,0x0c,0x06};//反转表格

void delay(uchar i)//延时
{
     uchar j;
     while( i--){
         for(j=0;j<250;j++)
             {;}
     }
}

void main()
{

    uchar i,j;
    uchar flag=0; //控制步进电机停止还是运转
    if(key1==0) {
       delay(5);
       if(key1==0)
       {
           flag=~flag;
           while(!key1);
        }
    }

while(flag)
{
      j=0;
      for(i=0;i<192;i++)
      {
          P1 = 0x00;
          P1 = F_Rotation[j];//这里只有正转是为了测试
          j++;
          if(j>=4) j=0;
          delay(2);
      }
      delay(200);
  }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
看起来很无聊
1楼-- · 2019-07-15 17:17
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;                                         //暂停还有停止
unsigned char code F_Rotation[4]={0x03,0x06,0x0c,0x09};//正转表格
unsigned char code B_Rotation[4]={0x03,0x09,0x0c,0x06};//反转表格

void delay(uchar i)//延时
{
     uchar j;
         while( i--){
             for(j=0;j<250;j++)
                     {;}
         }
}

void main()
{

    uchar i,j;
    uchar flag=0; //控制步进电机停止还是运转
    if(key1==0) {
           delay(5);
           if(key1==0)
           {
               flag=~flag;
                   while(!key1);
                }
    }

while(flag)
{
      j=0;
          for(i=0;i<192;i++)
          {
              P1 = 0x00;
                  P1 = F_Rotation[j];//这里只有正转是为了测试
                  j++;
                  if(j>=4) j=0;
                  delay(2);
          }
          delay(200);
  }
}
看起来很无聊
2楼-- · 2019-07-15 21:28
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;                                         //暂停还有停止
unsigned char code F_Rotation[4]={0x03,0x06,0x0c,0x09};//正转表格
unsigned char code B_Rotation[4]={0x03,0x09,0x0c,0x06};//反转表格

void delay(uchar i)//延时
{
     uchar j;
         while( i--){
             for(j=0;j<250;j++)
                     {;}
         }
}

void main()
{

    uchar i,j;
    uchar flag=0; //控制步进电机停止还是运转
    if(key1==0) {
           delay(5);
           if(key1==0)
           {
               flag=~flag;
                   while(!key1);
                }
    }

while(flag)
{
      j=0;
          for(i=0;i<192;i++)
          {
              P1 = 0x00;
                  P1 = F_Rotation[j];//这里只有正转是为了测试
                  j++;
                  if(j>=4) j=0;
                  delay(2);
          }
          delay(200);
  }
}
看起来很无聊
3楼-- · 2019-07-16 01:32
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit key1=P3^4;                                         //暂停还有停止
unsigned char code F_Rotation[4]={0x03,0x06,0x0c,0x09};//正转表格
unsigned char code B_Rotation[4]={0x03,0x09,0x0c,0x06};//反转表格

void delay(uchar i)//延时
{
     uchar j;
         while( i--){
             for(j=0;j<250;j++)
                     {;}
         }
}

void main()
{

    uchar i,j;
    uchar flag=0; //控制步进电机停止还是运转
    if(key1==0) {
           delay(5);
           if(key1==0)
           {
               flag=~flag;
                   while(!key1);
                }
    }

while(flag)
{
      j=0;
          for(i=0;i<192;i++)
          {
              P1 = 0x00;
                  P1 = F_Rotation[j];//这里只有正转是为了测试
                  j++;
                  if(j>=4) j=0;
                  delay(2);
          }
          delay(200);
  }
}
看起来很无聊
4楼-- · 2019-07-16 03:38
 精彩回答 2  元偷偷看……
chenwei6991627
5楼-- · 2019-07-16 08:04
没看见你的停止控制程序啊
看起来很无聊
6楼-- · 2019-07-16 09:41
chenwei6991627 发表于 2016-7-17 15:08
没看见你的停止控制程序啊

那个按键控制flag 当按一下是flag反向再通过while(flag)控制步进电机停止还是转动

一周热门 更多>