找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2928|回复: 9
收起左侧

单片机步进电机正反转修改

[复制链接]
ID:259420 发表于 2020-8-4 09:48 | 显示全部楼层
#include <reg51.h>       //51芯片管脚定义头文件
#include <intrins.h>         //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint  unsigned int
uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};  //四相八拍正转编码
uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};  ////四相八拍反转编码
sbit  K1   = P3^2;       //正转
sbit  K2   = P3^3;       //反转
sbit  K3   = P3^4;       //停止
sbit  BEEP = P3^6;       //蜂鸣器
/********************************************************/
/*                                                  
/* 延时t毫秒
/* 11.0592MHz时钟,延时约1ms                                    
/*                                                      
/********************************************************/
void delay(uint t)
{                           
   uint k;
   while(t--)
   {
     for(k=0; k<125; k++)
     { }
   }
}

/**********************************************************/
void delayB(uchar x)    //x*0.14MS
{
   uchar i;
   while(x--)
   {
     for (i=0; i<13; i++)
     { }
   }
}

/**********************************************************/
void beep()
{
   uchar i;
   for (i=0;i<100;i++)
    {
     delayB(4);
     BEEP=!BEEP;                 //BEEP取反
    }
     BEEP=1;                    //关闭蜂鸣器
}

/********************************************************/
/*
/*步进电机正转
/*
/********************************************************/
void  motor_ffw()
{
   uchar i;
   uint  j;
   for (j=0; j<8; j++)         //转1*n圈
    {
            if(K3==0)
        {break;}                //退出此循环程序
      for (i=0; i<8; i++)       //一个周期转45度
        {
          P1 = FFW[i];          //取数据
          delay(2);            //调节转速
        }
    }
}

/********************************************************/
/*
/*步进电机反转
/*
/********************************************************/
void  motor_rev()
{
     uchar i;
         uint  j;
         for (j=0; j<8; j++)       //转1×n圈
      {
            if(K3==0)
         {break;}               //退出此循环程序
        for (i=0; i<8; i++)     //一个周期转45度
        {
          P1 = REV[i];          //取数据
          delay(2);            //调节转速
        }
      }
}

/********************************************************
*                                                      
*  主程序                                               
*                                                      
*********************************************************/

main()
{
      uchar r,N=64;             //N 步进电机运转圈数
   while(1)
    {  
      if(K1==0)
          {
        beep();
                for(r=0;r<N;r++)
         {
                   motor_ffw();       //电机正转
                   if(K3==0)
                  {beep();break;}    //退出此循环程序
             }
      }
          else if(K2==0)
       {
            beep();
                for(r=0;r<N;r++)
         {
               motor_rev();       //电机反转
                   if(K3==0)
                  {beep();break;}    //退出此循环程序
                 }
       }
          else  
                 P1 = 0xf0;
    }
}

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




以上仅供参考
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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