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

📄 xiugai.lst

📁 基于stc 8052单片机 的步进电机的控制 包扩加速 减速 显示
💻 LST
字号:
C51 COMPILER V7.02a   XIUGAI                                                               03/18/2009 14:11:51 PAGE 1   


C51 COMPILER V7.02a, COMPILATION OF MODULE XIUGAI
OBJECT MODULE PLACED IN xiugai.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE xiugai.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          /*********************************************************************************************************
             -********
   3          2009年3月5日14:58:54
   4          下面的程序已经实现了步进电机的基本控制很好。现在要实现附加的功能
   5          **********************************************************************************************************
             -*******/
   6          #include <AT89X51.h> 
   7          #define uint unsigned int;
   8          #define uchar unsigned char
   9          //以下定义LED片选信号
  10          sbit LED_1 = P3^0; 
  11          //定义输入按键的序号
  12          sbit K_1 = P1^0;
  13          sbit K_2 = P1^1;
  14          sbit K_3 = P1^2;
  15          sbit K_4 = P1^3;
  16          sbit K_5 = P1^4;
  17          sbit K_6 = P1^5;
  18          //以下定义共阴极LED的显示代码,0~9
  19          uchar code tab[10] = 
  20          {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  21          //以下定义M1驱动信号
  22          sbit M1_1  = P2^0;
  23          sbit M1_2  = P2^1;
  24          sbit M1_3  = P2^2;
  25          sbit M1_4  = P2^3;
  26          
  27          static unsigned int count; //计数 
  28          static int step_index; //步进索引数,值为0-7 即是到该转哪一步了 
  29          static bit turn; //步进电机转动方向 turn=1 反向  turn=0 正向
  30          static bit stop_flag; //步进电机停止标志 
  31          static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快 
  32          static int spcount; //步进电机转速参数计数 
  33          void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒 
  34          void gorun(); //步进电机控制步进函数 
  35          //主函数开始
  36          void main(void) 
  37          { 
  38   1      
  39   1      LED_1 = 0;//显示第一个LED,既M1的状态
  40   1      count = 0; 
  41   1      step_index = 0;
  42   1      speedlevel =2; 
  43   1      spcount = 0;
  44   1      stop_flag = 1;//这里一开始设定为  stop_flag = 0 表示开机即进行运转,stop_flag = 1则表示停止
  45   1      P2_0 = 0; 
  46   1      P2_1 = 0; 
  47   1      P2_2 = 0; 
  48   1      P2_3 = 0; 
  49   1      EA = 1; //允许CPU中断 
  50   1      TMOD = 0x11; //设定时器0和1为16位模式1 
  51   1      ET0 = 1; //定时器0中断允许 
  52   1      
  53   1      TH0 = 0x50; //BEFORE  FE0C
C51 COMPILER V7.02a   XIUGAI                                                               03/18/2009 14:11:51 PAGE 2   

  54   1      TL0 = 0x00; //设定时每隔65.53ms中断一次 
  55   1      TR0 = 1; //开始计数 
  56   1      
  57   1      delay(10000);
  58   1      
  59   1      } 
  60          //定时器0中断处理 在这个中断中完成步进电机的步进功能的
  61          void timeint(void) interrupt 1 
  62          { 
  63   1      TH0=0x50; 
  64   1      TL0=0x00;//设定时每隔65.536ms中断一次 
  65   1      TR0 = 1;
  66   1      count++; 
  67   1      spcount--;
  68   1      if(spcount<=0) //速度调整,SPEEDLEVEL越大,延时越长(延时约为1MS*SPEEDLEVEL),// 频率越小,速度越慢
  69   1      {
  70   2      spcount = speedlevel;  
  71   2      
  72   2      gorun();
  73   2      }
  74   1      K_1 = 1;//读数前先置1
  75   1      if (K_1 == 0) stop_flag = 1; 
  76   1      K_2 = 1;//读数前先置1
  77   1      if (K_2 == 0) stop_flag = 0 ;
  78   1      K_3 = 1;//读数前先置1
  79   1      if (K_3 == 0) turn = 1 ;
  80   1      K_4 = 1;//读数前先置1
  81   1      if (K_4 == 0) turn= 0 ;
  82   1      K_5 = 1;//读数前先置1
  83   1      if (K_5 == 0) 
  84   1      {
  85   2      
  86   2      speedlevel+=1;
  87   2      }
  88   1      K_6 = 1;//读数前先置1
  89   1      if (K_6 == 0) 
  90   1      {
  91   2      speedlevel-=1;
  92   2      }
  93   1      } 
  94          
  95          void delay(unsigned int endcount) 
  96          { 
  97   1      count=0; 
  98   1      do{}while(count<endcount); 
  99   1      } 
 100          
 101          void gorun() 
 102          { 
 103   1      if (stop_flag==1) 
 104   1      { 
 105   2      P2_0 = 0; 
 106   2      P2_1 = 0; 
 107   2      P2_2 = 0; 
 108   2      P2_3 = 0; 
 109   2      P0        = tab[0];
 110   2      return; 
 111   2      } 
 112   1      else if (stop_flag==0)
 113   1      {
 114   2      if (turn==0)
 115   2      P0        = tab[1];
C51 COMPILER V7.02a   XIUGAI                                                               03/18/2009 14:11:51 PAGE 3   

 116   2      else
 117   2      P0        = tab[2];
 118   2      }
 119   1      
 120   1      switch(step_index) 
 121   1      { 
 122   2      case 0: //0 
 123   2      P2_0 = 0; 
 124   2      P2_1 = 0; 
 125   2      P2_2 = 0; 
 126   2      P2_3 = 1; 
 127   2      break; 
 128   2      case 1: //0、1 
 129   2      P2_0 = 0; 
 130   2      P2_1 = 0; 
 131   2      P2_2 = 1; 
 132   2      P2_3 = 1; 
 133   2      break; 
 134   2      case 2: //1 
 135   2      P2_0 = 0; 
 136   2      P2_1 = 0; 
 137   2      P2_2 = 1; 
 138   2      P2_3 = 0; 
 139   2      break; 
 140   2      case 3: //1、2 
 141   2      P2_0 = 0; 
 142   2      P2_1 = 1; 
 143   2      P2_2 = 1; 
 144   2      P2_3 = 0; 
 145   2      break; 
 146   2      case 4: //2 
 147   2      P2_0 = 0; 
 148   2      P2_1 = 1; 
 149   2      P2_2 = 0; 
 150   2      P2_3 = 0; 
 151   2      break; 
 152   2      case 5: //2、3 
 153   2      P2_0 = 1; 
 154   2      P2_1 = 1; 
 155   2      P2_2 = 0; 
 156   2      P2_3 = 0; 
 157   2      break; 
 158   2      case 6: //3 
 159   2      P2_0 = 1; 
 160   2      P2_1 = 0; 
 161   2      P2_2 = 0; 
 162   2      P2_3 = 0; 
 163   2      break; 
 164   2      case 7: //3、0 
 165   2      P2_0 = 1; 
 166   2      P2_1 = 0; 
 167   2      P2_2 = 0; 
 168   2      P2_3 = 1; 
 169   2      } 
 170   1      if (turn==0) 
 171   1      { 
 172   2      step_index++; 
 173   2      if (step_index>7) 
 174   2      step_index=0; 
 175   2      } 
 176   1      else 
 177   1      { 
C51 COMPILER V7.02a   XIUGAI                                                               03/18/2009 14:11:51 PAGE 4   

 178   2      step_index--; 
 179   2      if (step_index<0) 
 180   2      step_index=7; 
 181   2      } 
 182   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    411    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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