zoukankan      html  css  js  c++  java
  • 步进电机的单片机控制程序---单片机

    1.4相8拍-步进电机的控制程序,正传或者反转都转一周即停止

    #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 步进电机运转圈数 因为我们的步进电机是减速步进电机 减速比是1/64 所以这里N=64时 步进电机外部的主轴转1圈
       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;
        }
     }
    
    /********************************************************/              


  • 相关阅读:
    【转】[Python小记] 通俗的理解闭包 闭包能帮我们做什么?
    【OCR技术系列之六】文本检测CTPN的代码实现
    002. Centos7安装mysql5.5.37
    044. asp.net主题之二为主题添加CSS样式和动态加载主题
    043. asp.net主题之一初识主题和皮肤
    042. asp.net使用缓存来提高母版页的访问性能
    041. asp.net中内容页访问母版页中的控件
    040. asp.netWeb中TreeView控件绑定XML文件
    039. asp.netWeb用户控件之七实现具有虚拟键盘的功能的用户控件
    038. asp.netWeb用户控件之六实现日期选择的用户控件
  • 原文地址:https://www.cnblogs.com/fhyfhy/p/4525474.html
Copyright © 2011-2022 走看看