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

📄 stepper.lst

📁 课程设计_步进电机的控制
💻 LST
字号:
C51 COMPILER V7.06   STEPPER                                                               06/26/2008 14:28:37 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE STEPPER
OBJECT MODULE PLACED IN Stepper.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Stepper.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          
   2          #include "Stepper.h"
   3          
   4          uchar keyscan(void);
   5          void getkey(void);
   6          void display(void);
   7          
   8          char code str0[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x89,0xc0,0xbf,0xc0,0xc0,0xc0};//0,1,2
             -,3,4,5,6,7,8,9,启动,结束,反向,无,无,复位
   9          char code str1[]={0x28,0x14,0x24,0x44,0x12,0x22,0x42,0x11,0x21,0x41,0x81,0x82, 0x84,0x18,0x48,0x88};
  10          int code str2[]={ 0,40,80,120,160,200,240,280,320,360,100000,0,0,0,0,0} ;  // 周期
  11          
  12          static int p,flag_p;
  13          unsigned int count,t;
  14          char key;
  15          
  16          /* 定时器0服务子程序 */
  17          void time0() interrupt 1 using 1  // 用定时器0中断来产生CLK时钟
  18          {
  19   1              /* 定时10ms,产生20ms周期的时钟,也就是50Hz的时钟 */
  20   1              TH0 = T/256;  
  21   1              TL0 = T%256;
  22   1              
  23   1              if(count!=0)
  24   1               {
  25   2                CLK = ~CLK;
  26   2                count--;
  27   2                if(p!=10||key!=0)
  28   2                {
  29   3      
  30   3                 if(count%40==0)
  31   3                  { 
  32   4                      flag_p--;
  33   4                   P0=str0[flag_p];  
  34   4                     LED1=0;
  35   4                      for(t=0;t<=10000;t++);
  36   4                         LED1=1;
  37   4                         }
  38   3                        
  39   3                       }
  40   2               }
  41   1              else
  42   1               {
  43   2                  P0=0x89;TR0=0;
  44   2               }
  45   1      
  46   1      }
  47          
  48          /* 键消抖延时函数 */
  49          void delay(void)
  50          {
  51   1              uchar i;
  52   1              for (i=300;i>0;i--);
  53   1      }
  54          
C51 COMPILER V7.06   STEPPER                                                               06/26/2008 14:28:37 PAGE 2   

  55          /* 键扫描函数 */
  56          uchar keyscan(void)
  57          {
  58   1              uchar scancode,tmpcode;
  59   1              P1 = 0xf0;                                                              // 发全0行扫描码
  60   1              if ((P1&0xf0)!=0xf0)                                    // 若有键按下
  61   1              {
  62   2                      delay();                                                        // 延时去抖动
  63   2                      if ((P1&0xf0)!=0xf0)                            // 延时后再判断一次,去除抖动影响
  64   2                      {
  65   3                              scancode = 0xfe;
  66   3                              while((scancode&0x10)!=0)               // 逐行扫描
  67   3                              {
  68   4                                      P1 = scancode;                          // 输出行扫描码
  69   4                                      if ((P1&0xf0)!=0xf0)            // 本行有键按下
  70   4                                      {
  71   5                                              tmpcode = (P1&0xf0)|0x0f;
  72   5      
  73   5                                              /* 返回特征字节码,为1的位即对应于行和列 */
  74   5                                              return((~scancode)+(~tmpcode));
  75   5                                      }
  76   4                                      else scancode = (scancode<<1)|0x01;             // 行扫描码左移一位
  77   4                              }
  78   3                      }
  79   2              }
  80   1              return(0);                                                              // 无键按下,返回值为0  
  81   1      }
  82          
  83          //取键值
  84          void getkey(void)
  85          {       
  86   1         key=keyscan();
  87   1      
  88   1      for(p=0;p<=15;)
  89   1      {
  90   2       if (key==str1[p])
  91   2        {
  92   3         break;
  93   3        
  94   3        }
  95   2       else 
  96   2       {
  97   3        p++;  
  98   3       
  99   3       }
 100   2      
 101   2      }
 102   1      
 103   1      }
 104          
 105          
 106          //显示子程序
 107          
 108          void display(void)
 109          {
 110   1      
 111   1      if(key==0)
 112   1      {
 113   2      P0=0xc0;
 114   2      }
 115   1      else
 116   1      {
C51 COMPILER V7.06   STEPPER                                                               06/26/2008 14:28:37 PAGE 3   

 117   2      P0=str0[p];
 118   2      }
 119   1      
 120   1      
 121   1      }
 122          
 123          /* 主程序 */
 124          void main()
 125          { 
 126   1              uchar key;
 127   1      
 128   1              TMOD = 0x01;                                    // 设置定时器0工作模式
 129   1      
 130   1              EA = 1;
 131   1              ET0 = 1;
 132   1              
 133   1              /* 设置为2相激励 */
 134   1              M1 = 0;
 135   1              M2 = 0;
 136   1      
 137   1              
 138   1              EN = 0;                                                 // 切断驱动输出
 139   1              RET = 0;                                                // 归位输入无效
 140   1              
 141   1              CWB = 1;                                                // 初始设置为顺时针方向
 142   1      
 143   1              while(1)
 144   1          {
 145   2                      key=keyscan();                      // 调用键盘扫描函数
 146   2                      getkey();
 147   2                      
 148   2                      switch(key)
 149   2                      {
 150   3                  case 0x81:                          // 0行3列,启动键
 151   3                                      EN = 1;                         // 打开驱动输出
 152   3                                      TH0 = -T/256;           // 改变T可以改变步进电机转动速度  
 153   3                                  TL0 = -T%256;
 154   3                                      TR0 = 1;                        // 定时器0开始计数
 155   3                                 count=str2[p];
 156   3                                 display();
 157   3                                      
 158   3                                      break;
 159   3                              case 0x82:                              // 1行3列,停止键
 160   3                                      TR0 = 0;                        // 定时器0停止计数
 161   3                                      EN = 0;                         // 切断驱动输出
 162   3                                  break;                      
 163   3                              case 0x84:                              // 2行3列,切换转向按键
 164   3                                      CWB = ~CWB;
 165   3                                      if(LED2==1)
 166   3                                         LED2 = 0;
 167   3                                      else
 168   3                                         LED2=1;
 169   3                                  break;
 170   3                      case 0x88:                              // 3行3列,归位键
 171   3                                      RET = 1;        
 172   3                                      delay();
 173   3                                      RET = 0;
 174   3                                  break;
 175   3                              case  0x11:             // 7
 176   3                                 
 177   3                                  TR0 = 1;                    // 定时器0开始计数
 178   3                                  count=str2[p];    
C51 COMPILER V7.06   STEPPER                                                               06/26/2008 14:28:37 PAGE 4   

 179   3                                  display();
 180   3                                      flag_p =p;
 181   3                                  break;       
 182   3                              case 0x21:              // 8
 183   3                       TR0 = 1;                       // 定时器0开始计数
 184   3                       count=str2[p];
 185   3                                   display();
 186   3                                       flag_p =p;
 187   3                                   break;
 188   3                  case  0x41:             //9
 189   3                                        
 190   3                                    TR0 = 1;                  // 定时器0开始计数
 191   3                                    count=str2[p];
 192   3                                    display();
 193   3                                        flag_p =p;
 194   3                                    break;
 195   3                              case 0x12:              // 4
 196   3                                       
 197   3                                    TR0 = 1;                  // 定时器0开始计数
 198   3                                    count=str2[p];
 199   3                                    display();
 200   3                                        flag_p =p;
 201   3                                    break;
 202   3                              case  0x22:                 //5
 203   3                                    
 204   3                                    TR0 = 1;
 205   3                                    count=str2[p];
 206   3                                        flag_p =p;
 207   3                                    display();
 208   3                                    break;
 209   3                          case  0x42:             //6
 210   3                                        
 211   3                                    TR0 = 1;                  // 定时器0开始计数
 212   3                                    count=str2[p];
 213   3                                        flag_p =p;
 214   3                                    display();
 215   3                                    break;
 216   3                              case    0x14:           //1
 217   3                                        
 218   3                                    TR0 = 1;                  // 定时器0开始计数
 219   3                                    count=str2[p];
 220   3                                        flag_p =p;
 221   3                                    display();
 222   3                                    break;
 223   3                              case    0x24:           //2
 224   3                                       
 225   3                                    TR0 = 1;                  // 定时器0开始计数
 226   3                                    count=str2[p];
 227   3                                        flag_p =p;
 228   3                                    display();
 229   3                                    break;
 230   3                              case     0x44:          //3
 231   3                                      
 232   3                                    TR0 = 1;                   // 定时器0开始计数
 233   3                                    count=str2[p];
 234   3                                        flag_p =p;
 235   3                                    display();
 236   3                                    break;
 237   3                              default:
 238   3                                    break;
 239   3                       }
 240   2              }
C51 COMPILER V7.06   STEPPER                                                               06/26/2008 14:28:37 PAGE 5   

 241   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    628    ----
   CONSTANT SIZE    =     64    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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