找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机控制步进电机

[复制链接]
跳转到指定楼层
楼主
ID:395404 发表于 2018-9-8 16:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. #include <reg52.h>
  2. #define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255
  3. #define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


  4. unsigned char code zheng[4]={0x08,0x04,0x02,0x01};//正转表格
  5. unsigned char code fan[4]={0x01,0x02,0x04,0x08};//反转表格

  6. uchar flag_start ;     //启动标志位  1为起动步进电机 否则关闭电机
  7. uchar flag_z_f;        //正反标志位  0为顺时钟 1为逆时史上转
  8. uchar flag_shudu;      //4种速度 0,1,2,3,
  9. uint flag_shudu_value = 400;


  10. void Delay(unsigned int i)//延时
  11. {
  12. while(--i);
  13. }

  14. uchar key_can;
  15. /********************独立按键程序*****************/
  16. void key()
  17. {
  18.         static uchar key_new;
  19.         key_can = 20;                                //按键值还原
  20.         if((P3 & 0xf0) != 0xf0)                //按键按下
  21.         {
  22.                 Delay(5);                                //按键消抖动
  23.                 if(((P3 & 0xf0) != 0xf0) && (key_new == 1))
  24.                 {                                                //确认是按键按下
  25.                         key_new = 0;
  26.                         switch(P3 & 0xf0)
  27.                         {
  28.                                 case 0xe0:  key_can = 1;  break;         //得到按键值
  29.                                 case 0xd0:  key_can = 2;  break;         //得到按键值
  30.                                 case 0xb0:  key_can = 3;  break;         //得到按键值
  31.                                 case 0x70:  key_can = 4;  break;         //得到按键值
  32.                         }                                
  33.                 }        
  34.         }
  35.         else           //按键松开
  36.                 key_new = 1;        
  37. }


  38. /******************主程序**********************/
  39. void main()
  40. {
  41.         unsigned char i;        
  42.         while(1)
  43.         {
  44.                 key();
  45.                 if(key_can < 10)
  46.                 {                                                
  47.                          if(key_can == 1)         //启动键
  48.                         {
  49.                                 if(flag_start == 0)          //启动
  50.                                 {
  51.                                         flag_start = 1;        
  52.                                         switch(flag_shudu)
  53.                                         {
  54.                                                 case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  55.                                                 case 1:  flag_shudu_value = 800; P2 = 0xf9;  break;
  56.                                                 case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  57.                                                 case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  58.                                         }
  59.                                 }
  60.                                 else         //停止
  61.                                 {
  62.                                         flag_start = 0;        
  63.                                         P2 = 0XFF;                //关闭指示灯
  64.         
  65.                                 }
  66.                         }if(key_can == 2)         //正反转键
  67.                         {
  68.                                 flag_z_f = ~flag_z_f;    //

  69.                         }if(key_can == 3)          //减速
  70.                         {
  71.                                 flag_shudu ++;
  72.                                 if(flag_shudu >= 4)
  73.                                         flag_shudu = 0;
  74.                                 switch(flag_shudu)
  75.                                 {
  76.                                         case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  77.                                         case 1:  flag_shudu_value = 800; P2 = 0xf9;  break;
  78.                                         case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  79.                                         case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  80.                                 }
  81.                         }if(key_can == 4)         //加速
  82.                         {
  83.                                 if(flag_shudu == 0)
  84.                                         flag_shudu = 4;
  85.                                 flag_shudu --;
  86.                                 switch(flag_shudu)
  87.                                 {
  88.                                         case 0:  flag_shudu_value = 500; P2 = 0xf0;  break;        //速度1  最快
  89.                                         case 1:  flag_shudu_value = 800; P2 = 0xf8;  break;
  90.                                         case 2:  flag_shudu_value = 1000; P2 = 0xfc;  break;
  91.                                         case 3:  flag_shudu_value = 1500;P2 = 0xfe;  break;        //速度4  最慢
  92.                                 }
  93.                         }
  94.                 }
  95.                 if(flag_start == 1)
  96.                 {
  97.                         for(i=0;i<4;i++)                    //4相
  98.                         {
  99.                                 if(flag_z_f == 0)
  100.                                         P1=zheng[i];      //电机正转
  101.                                 else
  102.                                         P1=fan[i];        //电机反转
  103.                                 Delay(flag_shudu_value);        //改变这个参数可以调整电机转速
  104.                         }
  105.                 }
  106.         }
  107. }
复制代码



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

使用道具 举报

沙发
ID:1 发表于 2018-9-8 18:16 | 只看该作者
补全原理图或者详细说明一下电路连接即可获得100+黑币
回复

使用道具 举报

板凳
ID:435943 发表于 2018-11-30 13:36 | 只看该作者
很不错的例子
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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