找回密码
 立即注册

QQ登录

只需一步,快速开始

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

以下是我弄的步进电机源代码

[复制链接]
跳转到指定楼层
楼主
ID:357602 发表于 2018-6-24 09:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
此源代码包含了电机的正反转控制,加减速,显示模块还没开始弄,还望各路大神多多指教

单片机源程序如下:


  1. //采用一相励磁方式,即四根信号线每次只有一个为高电平。步进电机型号28BYJ-48,5V,DC,四相八拍
  2. #include<reg52.h>
  3. #define uchar unsigned char
  4.        
  5. sbit jia_key=P3^2;                           //电机加速I/O口定义
  6. sbit jian_key=P3^3;                          //电机减速I/O口定义
  7. sbit zf_key=P3^4;                          //电机正反转I/O口定义
  8. bit flag=0;                                        //电机正反转标志位,flag为0时正转,flag为1时为反转

  9. uchar num=0,maichong=4,table_begin=0;

  10. uchar code table1[]={0x01,0x02,0x04,0x08, 0x08,0x04,0x02,0x01};  //电机正反转I/O口的高低电平对应表

  11. //延时函数
  12. void delay(uchar i)
  13. {
  14.     uchar j,k;
  15.     for(j=i;j>0;j--)
  16.          for(k=120;k>0;k--);  //12M晶振
  17. }

  18. //按键检测处理函数
  19. void key ()
  20. {
  21.         if(jia_key==0)
  22.         {
  23.                 delay(5);
  24.                 if(jia_key==0)   //key=0按下
  25.                 {
  26.                         num++;
  27.                         if(num==4)
  28.                                 num=3;              //最大则保持3
  29.                         while(jia_key==0);//等待松开按键
  30.                 }
  31.         }
  32.         if(jian_key==0)
  33.         {
  34.                 delay(5);
  35.                 if(jian_key==0)
  36.                 {
  37.                         if(num!=0)     //判断是否最小速
  38.                                 num--;
  39.                         else
  40.                                 num=0;
  41.                         while(jian_key==0);  //等待按键释放,若按键没有释放则jian_key始终等于0,程序就一直停在while语句处,直到按键释放jian_key=1跳出while循环。
  42.                                                                                 //通常我们在检测单片机按键时,要等待按键释放才去执行相应代码
  43.                 }
  44.         }
  45.         if(zf_key==0)  //电机正反转标志
  46.         {
  47.                 delay(5);
  48.                 if(zf_key==0)       //按键按下为0则反转
  49.                 {
  50.                         flag=~flag;    //正反转标识取反
  51.                         while(zf_key==0);
  52.                 }
  53.         }
  54. }


  55. //根据速度标识进行数据处理
  56. void dispose()
  57. {
  58.   switch(num)
  59.   {
  60.     case 0:
  61.              //show_num=2;
  62.                    maichong=8;
  63.                     break;
  64.                 case 1:
  65.                  // show_num=4;
  66.                    maichong=6;
  67.                     break;
  68.                 case 2:
  69.                   //show_num=6;
  70.                    maichong=4;
  71.                     break;
  72.            case 3:
  73.                  // show_num=8;
  74.                    maichong=2;
  75.                     break;
  76.         }
  77.         if(flag==0)
  78.         {
  79.           table_begin=0;
  80.         }
  81.         else
  82.           table_begin=4;
  83. }

  84. //电机速度,和正反转控制
  85. void qudong()
  86. {
  87.     uchar i,j;
  88.         for(j=table_begin;j<4+table_begin;j++)
  89.         {
  90.           P1=table1[j];
  91.            for(i=0;i<maichong;i++)
  92.            {
  93.              //display();
  94.                          delay(5);
  95.            }
  96.         }
  97. }


  98. //主函数
  99. void main()
  100.   {
  101.     while(1)
  102.            {
  103.            key();
  104.                  dispose();
  105.                  qudong();
  106.            }
  107.   }
复制代码

所有资料51hei提供下载:
步进电机.zip (4.39 KB, 下载次数: 8)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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