找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机步进电机控制器

[复制链接]
跳转到指定楼层
楼主
ID:922853 发表于 2021-5-17 18:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. 1          #include <reg51.h>       //包含单片机头文件
  2.    2          //宏定义方便使用
  3.    3          #define uint unsigned int  
  4.    4          #define uchar unsigned char
  5.    5         
  6.    6          uchar code FFW[]=       //8拍编码
  7.    7          {
  8.    8            0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09
  9.    9          };
  10.   10          sbit K1 = P3^0;
  11.   11          sbit K2 = P3^1;
  12.   12          sbit K3 = P3^2;
  13.   13          sbit K4 = P3^3;
  14.   14          sbit K5 = P3^4;
  15.   15          uchar Pos_N=1;  //定义正转圈数变量
  16.   16          uchar Inv_N=2;  //定义反转圈数变量
  17.   17          uchar Run_flag=0;  //电机运行的标志
  18.   18          uint speed=20;
  19.   19          /*-----------------------------------
  20.   20          延时函数
  21.   21          ------------------------------------*/
  22.   22          void DelayMS(uint ms)
  23.   23          {
  24.   24   1        uchar i;
  25.   25   1        while(ms--)
  26.   26   1        {
  27.   27   2          for(i=0;i<20;i++);
  28.   28   2        }
  29.   29   1      }
  30.   30          /*-----------------------------------
  31.   31          正转函数
  32.   32          ------------------------------------*/
  33.   33          void SETP_MOTOR_FFW()
  34.   34          {
  35.   35   1        static uint i=0,j=0;
  36.   36   1        if(++i>speed*10)       //延时
  37.   37   1        {
  38.   38   2              i=0;
  39.   39   2              P1=FFW[j];      //送8拍
  40.   40   2              if(++j>7)j=0;
  41.   41   2        }
  42.   42   1        
  43.   43   1      }
  44.   44          /*-----------------------------------
  45.   45          反转函数
  46.   46          ------------------------------------*/
  47.   47          void SETP_MOTOR_REV()
  48.   48          {
  49.   49   1        static uint i=0,j=0;
  50.   50   1      
  51.   51   1        if(++i>speed*10)       //延时
  52.   52   1        {
  53.   53   2              i=0;
  54.   54   2              P1=FFW[7-j];   //倒序送八拍编码
  55.   55   2              if(++j>7)j=0;
  56. C51 COMPILER V8.02   MAIN                                                                  01/27/2021 19:00:20 PAGE 2   

  57.   56   2        }
  58.   57   1      }
  59.   58          //*********************************
  60.   59          //按键扫描程序
  61.   60          //mode:0,不支持连续按;1,支持连续按;
  62.   61          //*********************************
  63.   62          uchar KEY_Scan()
  64.   63          {        
  65.   64   1        static uchar key_up=1;//按键按松开标志         
  66.   65   1        if(key_up&&(K1==0||K2==0||K3==0||K4==0||K5==0))
  67.   66   1        {
  68.   67   2          DelayMS(5);//去抖动
  69.   68   2              if(K1==0||K2==0||K3==0||K4==0||K5==0)
  70.   69   2              {
  71.   70   3                  key_up=0;
  72.   71   3                      if(K1==0)return 1;
  73.   72   3                      else if(K2==0)return 2;
  74.   73   3                      else if(K3==0)return 3;
  75.   74   3                  else if(K4==0)return 4;
  76.   75   3                  else if(K5==0)return 5;
  77.   76   3              }
  78.   77   2              else
  79.   78   2              {
  80.   79   3                      return 0;
  81.   80   3              }
  82.   81   2        }else if(K1==1&&K2==1&&K3==1&&K4==1&&K5==1)key_up=1;      
  83.   82   1        return 0;// 无按键按下
  84.   83   1      }
  85.   84          /*-----------------------------------
  86.   85          主函数
  87.   86          ------------------------------------*/
  88.   87         
  89.   88          void main()
  90.   89          {
  91.   90   1        uchar key_num=0;
  92.   91   1        P1=0x01;      //电机初始位置
  93.   92   1        P2=0xfb;  //停止指示灯
  94.   93   1        while(1)
  95.   94   1        {
  96.   95   2          key_num=KEY_Scan(); //扫面按键
  97.   96   2              if(key_num==1) //正转
  98.   97   2              {
  99.   98   3                      P2=0xfe;  //正转指示灯
  100.   99   3                      Run_flag=1;//正转标志
  101. 100   3              }
  102. 101   2              else if(key_num==2)//反转
  103. 102   2              {
  104. 103   3                      P2=0xfd;  //反转指示灯
  105. 104   3                      Run_flag=2;//反转标志
  106. 105   3              }
  107. 106   2              else if(key_num==3)//停止
  108. 107   2              {
  109. 108   3                      P2=0xfb;  //停止指示灯
  110. 109   3              P1=0x01;  //回到初始位置
  111. 110   3                      Run_flag=0;//停止标志
  112. 111   3              }
  113. 112   2              else if(key_num==4)//加速
  114. 113   2          {
  115. 114   3            if(speed!=0)
  116. 115   3            {
  117. 116   4              speed-=1;
  118. 117   4            }
  119. C51 COMPILER V8.02   MAIN                                                                  01/27/2021 19:00:20 PAGE 3   

  120. 118   3          }
  121. 119   2          else if(key_num==5)//减速
  122. 120   2          {
  123. 121   3            speed+=1;
  124. 122   3                if(speed>100) //限定调速范围0-100
  125. 123   3                {
  126. 124   4                       speed=100;
  127. 125   4                }
  128. 126   3          }
  129. 127   2      
  130. 128   2              if(Run_flag==1)//正转标志
  131. 129   2              {
  132. 130   3                 SETP_MOTOR_FFW();
  133. 131   3              }
  134. 132   2              else if(Run_flag==2)//反转标志
  135. 133   2              {
  136. 134   3                 SETP_MOTOR_REV();
  137. 135   3              }
  138. 136   2              else
  139. 137   2              {
  140. 138   3                 P2=0xfb;  //停止指示灯
  141. 139   3              }
  142. 140   2      
  143. 141   2         
  144. 142   2        }
  145. 143   1      }
复制代码
加减速转+提示灯

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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