⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 步进电机按键控制.lst

📁 51单片机实例
💻 LST
字号:
C51 COMPILER V7.06   步进_缁___键控制                                                      05/20/2010 15:57:19 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 步进_缁___键控制
OBJECT MODULE PLACED IN .\obj\步进电机按键控制.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE 步进电机按键控制.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\步进电机按键控制.l
                    -st) OBJECT(.\obj\步进电机按键控制.obj)

stmt level    source

   1          /*-----------------------------------------------
   2            名称:步进电机
   3            论坛:www.doflye.net
   4            编写:shifang
   5            日期:2009.5
   6            修改:无
   7            内容:本程序用于测试4相步进电机常规驱动 
   8                  使用1-2相励磁
   9                  1-2相激励功率增倍,步进角度减半,抖动减少
  10                  顺序如下 a-ab-b-bc-c-cd-d-da   又称4相8拍
  11           ------------------------------------------------*/
  12          
  13          #include <reg52.h>
  14          
  15          
  16          
  17          sbit A1=P1^0; //定义步进电机连接端口
  18          sbit B1=P1^1;
  19          sbit C1=P1^2;
  20          sbit D1=P1^3;
  21          
  22          
  23          #define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通电,其他相断电
  24          #define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通电,其他相断电
  25          #define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通电,其他相断电
  26          #define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通电,其他相断电
  27          #define Coil_A1 {A1=1;B1=0;C1=0;D1=0;}//A相通电,其他相断电
  28          #define Coil_B1 {A1=0;B1=1;C1=0;D1=0;}//B相通电,其他相断电
  29          #define Coil_C1 {A1=0;B1=0;C1=1;D1=0;}//C相通电,其他相断电
  30          #define Coil_D1 {A1=0;B1=0;C1=0;D1=1;}//D相通电,其他相断电
  31          #define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部断电
  32          
  33          unsigned char Speed;
  34          bit Flag;
  35          /*------------------------------------------------
  36           uS延时函数,含有输入参数 unsigned char t,无返回值
  37           unsigned char 是定义无符号字符变量,其值的范围是
  38           0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
  39           长度如下 T=tx2+5 uS 
  40          ------------------------------------------------*/
  41          void DelayUs2x(unsigned char t)
  42          {   
  43   1       while(--t);
  44   1      }
  45          /*------------------------------------------------
  46           mS延时函数,含有输入参数 unsigned char t,无返回值
  47           unsigned char 是定义无符号字符变量,其值的范围是
  48           0~255 这里使用晶振12M,精确延时请使用汇编
  49          ------------------------------------------------*/
  50          void DelayMs(unsigned char t)
  51          {
  52   1           
  53   1       while(t--)
  54   1       {
C51 COMPILER V7.06   步进_缁___键控制                                                      05/20/2010 15:57:19 PAGE 2   

  55   2           //大致延时1mS
  56   2           DelayUs2x(245);
  57   2               DelayUs2x(245);
  58   2       }
  59   1      }
  60          /*------------------------------------------------
  61                              主函数
  62          ------------------------------------------------*/
  63          main()
  64          {
  65   1       unsigned int i=512;//旋转一周时间
  66   1       
  67   1       EA=1;          //全局中断开
  68   1       EX0=1;         //外部中断0开
  69   1       IT0=1;         //1表示边沿触发
  70   1      
  71   1       Speed=10;
  72   1      while(1){
  73   2       Coil_OFF
  74   2       while((i--)&&Flag)  //正向
  75   2        {  Coil_A1       
  76   3           DelayMs(Speed);
  77   3           Coil_AB1                 //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  78   3           DelayMs(Speed);         //改变这个参数可以调整电机转速 ,数字越小,转速越大,力矩越小
  79   3               Coil_B1       
  80   3           DelayMs(Speed);
  81   3           Coil_BC1
  82   3           DelayMs(Speed);
  83   3               Coil_C1       
  84   3           DelayMs(Speed);
  85   3           Coil_CD1
  86   3           DelayMs(Speed);
  87   3               Coil_D1       
  88   3           DelayMs(Speed);
  89   3           Coil_DA1
  90   3           DelayMs(Speed);
  91   3        }
  92   2        Coil_OFF
  93   2        i=512;
  94   2        while((i--)&&(!Flag))//反向
  95   2        {  
  96   3           Coil_A1       
  97   3           DelayMs(Speed);
  98   3           Coil_DA1                //遇到Coil_AB1  用{A1=1;B1=1;C1=0;D1=0;}代替
  99   3           DelayMs(Speed);         //改变这个参数可以调整电机转速 ,数字越小,转速越大,力矩越小
 100   3               Coil_D1       
 101   3           DelayMs(Speed);
 102   3           Coil_CD1
 103   3           DelayMs(Speed);
 104   3               Coil_C1       
 105   3           DelayMs(Speed);
 106   3           Coil_BC1
 107   3           DelayMs(Speed);
 108   3               Coil_B1       
 109   3           DelayMs(Speed);
 110   3           Coil_AB1
 111   3           DelayMs(Speed);
 112   3        }
 113   2       }
 114   1      }
 115          
 116          /*------------------------------------------------
C51 COMPILER V7.06   步进_缁___键控制                                                      05/20/2010 15:57:19 PAGE 3   

 117                           外部中断程序
 118          ------------------------------------------------*/
 119          void ISR_INT0(void) interrupt 0 
 120          {
 121   1       
 122   1       if(!INT0)
 123   1         {
 124   2         DelayMs(10);//在此处可以添加去抖动程序,防止按键抖动造成错误
 125   2         if(!INT0)
 126   2         //while(!INT1);//等待按键释放
 127   2           {
 128   3           Flag=!Flag;   
 129   3           }
 130   2         }
 131   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    279    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -