[范例教程] 28BYJ-48步进电机驱动

[复制链接]
1383|1
 楼主| kmzuaz 发表于 2023-10-23 12:33 | 显示全部楼层 |阅读模式
  1. #include<intrins.h>


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

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

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

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

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


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


chenqianqian 发表于 2023-10-24 12:31 来自手机 | 显示全部楼层
现在步进电机用得少了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

3413

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部