找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机控制28BYJ-48步进电机驱动源码

[复制链接]
跳转到指定楼层
楼主
ID:258021 发表于 2018-4-26 17:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机控制28BYJ-48步进电机驱动
单片机源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>


  3. unsigned char CCW[8]={0x80,0xC0,0x40,0x60,0x20,0x30,0x10,0x90};   //逆时钟旋转相序表
  4. unsigned char CW[8]={0x90,0x10,0x30,0x20,0x60,0x40,0xC0,0x80};    //正时钟旋转相序表
  5. //unsigned char tab[] = {0x0f};

  6. sbit K1 = P3^0;  //反转按键
  7. sbit K2 = P3^1;  //正转按键
  8. sbit K3 = P3^2;  //停止按键
  9. sbit K4 = P3^3;  //  蜂鸣器

  10. unsigned char K1_Flag=0,K2_Flag=0,K3_Flag=0,K4_Flag=0;

  11. void delay_ms(unsigned int z)                //@11.0592MHz
  12. {
  13.         unsigned char i, j;
  14.    do
  15.    {
  16.         _nop_();
  17.         _nop_();
  18.         _nop_();
  19.         i = 11;
  20.         j = 190;
  21.         do
  22.         {
  23.                 while (--j);
  24.         } while (--i);
  25.         }while (--z);
  26. }

  27. void delay_us(unsigned int z)                //@11.0592MHz
  28. {
  29.         do
  30.         {
  31.                 _nop_();
  32.                 _nop_();
  33.                 _nop_();
  34.         }while(--z);
  35. }


  36. void main(void)
  37. {
  38.         unsigned char i;
  39.         while(1)
  40.         {
  41.                 if(K1 == 0)
  42.                 {
  43.                         delay_ms(5);
  44.                         {
  45.                                 if(K1 == 0)
  46.                                 {
  47.                                         K1_Flag = ~K1_Flag;
  48.                                         K2_Flag = 0;
  49.                                         K3_Flag = 0;
  50.                                         K4_Flag = 0;
  51.                                 }
  52.                                 while(K1 == 0);
  53.                         }
  54.                 }
  55.                 else if(K2 == 0)
  56.                 {
  57.                            delay_ms(5);
  58.                         {
  59.                                 if(K2 == 0)
  60.                                 {
  61.                                         K2_Flag = ~K2_Flag;
  62.                                         K1_Flag = 0;
  63.                                         K3_Flag = 0;
  64.                                         K4_Flag = 0;
  65.                                 }
  66.                                 while(K2 == 0);
  67.                         }
  68.                 }
  69.                 else if(K3 == 0)
  70.                 {
  71.                         delay_ms(5);
  72.                         {
  73.                                 if(K3 == 0)
  74.                                 {
  75.                                         K3_Flag = ~K3_Flag;
  76.                                         K1_Flag = 0;
  77.                                         K2_Flag = 0;
  78.                                         K4_Flag = 0;
  79.                                 }
  80.                                 while(K3 == 0);
  81.                         }
  82.                 }
  83.                 else if(K4 == 0)
  84.                 {
  85.                            delay_ms(5);
  86.                         {
  87.                                 if(K4 == 0)
  88.                                 {
  89.                                         K4_Flag = ~K4_Flag;
  90.                                         K1_Flag = 0;
  91.                                         K2_Flag = 0;
  92.                                         K3_Flag = 0;
  93.                                 }
  94.                                 while(K4 == 0);
  95.                         }
  96.                 }
  97.                 if(K1_Flag)
  98.                 {
  99.                         for(i=0;i<8;i++)  //旋转45度
  100.                         {
  101.                                 P2=CW[i];
  102.                                 delay_us(80);   //调节转速
  103.                         P0 = 0XC6;
  104.                         P2 &= 0XF0;
  105.                         P2 |= 0X02;
  106.                         P0 = 0XF9;
  107.                         P2 &= 0XF0;
  108.                         P2 |= 0X04;
  109.                         }
  110.                 }
  111.                 else if(K2_Flag)
  112.                 {
  113.                         for(i=0;i<8;i++)  //旋转45度
  114.                         {
  115.                                 P2=CW[i];
  116.                                 delay_us(200);   //调节转速
  117.                         }
  118.                         P0 = 0XC6;
  119.                         P2 &= 0XF0;
  120.                         P2 |= 0X02;
  121.                         P0 = 0Xa4;
  122.                         P2 &= 0XF0;
  123.                         P2 |= 0X04;
  124.                 }
  125.                 else if(K3_Flag)
  126.                 {
  127.                           for(i=0;i<8;i++)  //旋转45度
  128.                         {
  129.                                 P2=CW[i];
  130.                                 delay_ms(1);   //调节转速
  131.                         }
  132.                         P0 = 0XC6;
  133.                         P2 &= 0XF0;
  134.                         P2 |= 0X01;
  135.                         P0 = 0XB0;
  136.                         P2 &= 0XF0;
  137.                         P2 |= 0X02;
  138.                 }
  139.                 else if(K4_Flag)
  140.                 {
  141.                          for(i=0;i<8;i++)  //旋转45度
  142.                         {
  143.                                 P2=CW[i];
  144.                                 delay_ms(5);   //调节转速
  145.                         }
  146.                         P0 = 0XC6;
  147.                         P2 &= 0XF0;
  148.                         P2 |= 0X01;
  149.                         P0 = 0X99;
  150.                         P2 &= 0XF0;
  151.                         P2 |= 0X02;
  152.                 }
  153.         }
  154. }
复制代码

所有资料51hei提供下载:
28BYJ-48步进电机驱动.rar (30.14 KB, 下载次数: 76)


评分

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

查看全部评分

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

使用道具 举报

沙发
ID:190659 发表于 2018-4-26 21:35 | 只看该作者
有实物图吗
回复

使用道具 举报

板凳
ID:258021 发表于 2018-4-27 09:59 | 只看该作者

有的奥   不过这只是一个简单的demo  可以自己搭建的奥
回复

使用道具 举报

地板
ID:190659 发表于 2018-4-27 13:06 | 只看该作者
P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X02;
                        P0 = 0XF9;
                        P2 &= 0XF0;
                        P2 |= 0X04;
是什么意思啊
回复

使用道具 举报

5#
ID:258021 发表于 2018-5-3 16:16 | 只看该作者
TopZhou 发表于 2018-4-27 13:06
P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X02;

这是做的一个数码管显示,P2口做数码管的位选,P0口做段选。不好意思,最近没有登陆网站,没有及时的回复你。
回复

使用道具 举报

6#
ID:294123 发表于 2020-1-26 18:03 | 只看该作者
你的逆时钟旋转相序表怎么来的哦?我怎么查的是0x03,0x06,0x0c,0x09正转 5.625°
回复

使用道具 举报

7#
ID:197635 发表于 2020-3-17 23:09 | 只看该作者
好东西感谢
回复

使用道具 举报

8#
ID:298663 发表于 2023-9-11 10:01 | 只看该作者
TopZhou 发表于 2018-4-27 13:06
P0 = 0XC6;
                        P2 &= 0XF0;
                        P2 |= 0X02;

这是配置STC的IO口驱动能力, 比如上拉,下拉
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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