求大神看个程序

2019-07-15 21:36发布

就是这个程序,用按键控制步进电机正反转,为什么只有按键一直摁着电机才转,松开就不转了





#include<reg52.h> //头文件一般无需改动
#include<intrins.h> //头文件一般无需改动
#define uchar unsigned char
#define uint  unsigned int
uchar code FFW[8]={0x1f,0x3f,0x2f,0x6f,0x4f,0xcf,0x8f,0x9f};//正转驱动值
uchar code REV[8]={0x8f,0xcf,0x4f,0x6f,0x2f,0x3f,0x1f,0x9f};//反转驱动值
sbit KEY1=P3^2;
sbit KEY2=P3^3;
sbit KEY3=P3^4;
uint a;     
/*********************************************************/
void delayus(unsigned int i)//延时函数
{
  unsigned int j;
  for(;i>0;i--)
    for(j=10;j>0;j--);
}
void delayms(uint i)//延时函数
{
  unsigned int j;
  for(;i>0;i--)
    for(j=100;j>0;j--);
}
/***********************************************************/


void  motor_rev() //反转
  {uchar i;
for (i=0;i<8;i++)//8拍   1个脉冲即1拍=3.75°
                           {
                                 P1=REV[i];//赋驱动值
                                delayus(a); //改变转速,不过不要超过步进电机的最快值  延时一下
                           }

  }
   void  motor_ffw()        //正转
  {uchar i;
for (i=0;i<8;i++)//8拍   1个脉冲即1拍=3.75°
                           {
                                 P1=FFW[i];//赋驱动值
                                delayus(a); //改变转速,不过不要超过步进电机的最快值  延时一下
                           }

  }
void main()
{
                a=9;
                
                EA=1;          //全局中断开
                EX0=1;         //外部中断0开
                IT0=1;         //边沿触发
        while(1)

      {
          if(KEY1==0)
          {

                       motor_ffw();  
                        //电机正转
       
          
           }
           else if(KEY2==0)
           {
                       motor_rev();  
                        //电机反转
                         
                   }

           else if(KEY3==0)
           {
                        P1 = 0xf0;
                 }
        }                       
          }
         

/********************************************************/


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhanwuplg
1楼-- · 2019-07-16 00:46
 精彩回答 2  元偷偷看……
Neway.
2楼-- · 2019-07-16 04:11
什么程序写的..........
南关忆北
3楼-- · 2019-07-16 09:04
我按你说的改了,没有变化啊,还是那样
南关忆北
4楼-- · 2019-07-16 10:10
zhanwuplg 发表于 2013-11-23 09:41
没加按键释放语句.....在正反转调用语句前加 while(KEY1==0);  下面也一样

我按你说的改了,没有变化啊,还是那样
longgyue
5楼-- · 2019-07-16 14:58

void main()
{
                a=9;
                unsigned   char  flag=0;
                EA=1;          //全局中断开
                EX0=1;         //外部中断0开
                IT0=1;         //边沿触发
        while(1)

      {
          if(KEY1==0)
          {     
                    flag=1;
         
           }
           else if(KEY2==0)
           {
                         flag=2;
            }

           else if(KEY3==0)
           {
                   flag=0;
            }

          switch(flag)
           {
               case 0:   P1 = 0xf0; break;
               case 1:   motor_ffw();  break; //电机正转
               case 2:   motor_rev();  break; //电机反转
           }
       }                        
    }
         

南关忆北
6楼-- · 2019-07-16 18:42
 精彩回答 2  元偷偷看……

一周热门 更多>