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

📄 main1.lst

📁 步进电机的控制程序,可以实现正反变速运行,速度在LCD上显示 另附实现电路 使用了L297 L298芯片
💻 LST
字号:
C51 COMPILER V8.08   MAIN1                                                                 12/07/2008 16:13:54 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN1
OBJECT MODULE PLACED IN MAIN1.OBJ
COMPILER INVOKED BY: C:\Program Files\keil\C51\BIN\C51.EXE MAIN1.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "AT89X51.h"
   2          
   3          int delay();
   4          void inti_lcd();
   5          void show_lcd(int);
   6          void cmd_wr();
   7          void ShowState();
   8          void clock(unsigned int Delay) ;
   9          void DoSpeed();       //计算速度
  10          //正转值
  11          #define RIGHT_RUN 1
  12          //反转值
  13          #define LEFT_RUN 0
  14          sbit RS=0xA0;
  15          sbit RW=0xA1;
  16          sbit E=0xA2;
  17          
  18          char SpeedChar[]="SPEED(n/min):";
  19          char StateChar[]="RUN STATE:";
  20          char STATE_CW[]="CW";
  21          char STATE_CCW[]="CCW";
  22          char SPEED[3]="050";
  23          unsigned int RunSpeed=50;               //速度
  24          unsigned char RunState=RIGHT_RUN;  //运行状态
  25          main()
  26          {
  27   1              
  28   1              /*定时器设置*/
  29   1              TMOD=0x66;      //定时器0,1都为计数方式;方式2;
  30   1              EA=1;                   //开中断
  31   1              
  32   1              TH0=0xff;               //定时器0初值FFH;
  33   1              TL0=0xff;
  34   1              ET0=1;
  35   1              TR0=1;  
  36   1              
  37   1              TH1=0xff;               //定时器1初值FFH;
  38   1              TL1=0xff;
  39   1              ET1=1;
  40   1              TR1=1;
  41   1              
  42   1              IT0=1;                  //脉冲方式
  43   1              EX0=1;                  //开外部中断0:加速
  44   1              IT1=1;                  //脉冲方式
  45   1              EX1=1;                  //开外部中断1:减速
  46   1          
  47   1          inti_lcd();
  48   1          DoSpeed();       
  49   1          ShowState();
  50   1          while(1)
  51   1          { 
  52   2            clock(RunSpeed);
  53   2            P0_1=P0_1^0x01;
  54   2          }
  55   1          
C51 COMPILER V8.08   MAIN1                                                                 12/07/2008 16:13:54 PAGE 2   

  56   1      }
  57          
  58          //定时器0中断程序:正转
  59          void t_0(void) interrupt 1
  60          {
  61   1              RunState=RIGHT_RUN;     
  62   1          P0_0=1;
  63   1          P1=0x01;
  64   1          cmd_wr();
  65   1          ShowState();
  66   1      } 
  67          
  68          
  69          //定时器1中断:反转
  70          void t_1(void) interrupt 3
  71          {
  72   1              RunState=LEFT_RUN;
  73   1          P0_0=0;
  74   1          P1=0x01;
  75   1          cmd_wr();
  76   1          ShowState();
  77   1         
  78   1      } 
  79          
  80          //中断0:加速程序
  81          void SpeedUp() interrupt 0
  82          {   
  83   1             if(RunSpeed>=12)
  84   1                RunSpeed=RunSpeed-2; 
  85   1             DoSpeed();
  86   1             P1=0x01;
  87   1             cmd_wr();
  88   1             ShowState();
  89   1                    
  90   1      }
  91          
  92          //中断1:减速程序
  93          void SpeedDowm() interrupt 2
  94          {   
  95   1          
  96   1          if(RunSpeed<=100)
  97   1              RunSpeed=RunSpeed+2; 
  98   1          DoSpeed();
  99   1          P1=0x01;
 100   1          cmd_wr();
 101   1          ShowState();
 102   1              
 103   1       
 104   1      }
 105          
 106          int delay()         //判断LCD是否忙
 107          {   
 108   1          int a;
 109   1      start:
 110   1          
 111   1          RS=0;
 112   1          RW=1;
 113   1          E=0;
 114   1          for(a=0;a<2;a++);
 115   1          E=1;
 116   1          P1=0xff;
 117   1          if(P1_7==0)
C51 COMPILER V8.08   MAIN1                                                                 12/07/2008 16:13:54 PAGE 3   

 118   1             return 0;
 119   1          else        
 120   1             goto start;
 121   1      
 122   1      }
 123          
 124          void inti_lcd()  //设置LCD方式
 125          {
 126   1      
 127   1         P1=0x38;
 128   1         cmd_wr();
 129   1         delay();
 130   1      
 131   1         P1=0x01;     //清除
 132   1         cmd_wr();
 133   1         delay();
 134   1      
 135   1         P1=0x0f;
 136   1         cmd_wr();
 137   1         delay();
 138   1      
 139   1         P1=0x06;
 140   1         cmd_wr();
 141   1         delay(); 
 142   1      
 143   1         P1=0x0c;
 144   1         cmd_wr();
 145   1         delay();
 146   1      }
 147          
 148          void cmd_wr()           //写控制字
 149          {
 150   1         RS=0;
 151   1         RW=0;
 152   1         E=0;
 153   1         E=1;
 154   1      }
 155          
 156          void show_lcd(int i)   //LCD显示子程序
 157          {  
 158   1         P1=i;
 159   1         RS=1;
 160   1         RW=0;
 161   1         E=0;
 162   1         E=1;
 163   1      
 164   1      }
 165          
 166          void ShowState()    //显示状态与速度
 167          {
 168   1          int i=0;
 169   1          while(SpeedChar[i]!='\0')
 170   1          {
 171   2             delay();
 172   2             show_lcd(SpeedChar[i]);
 173   2             i++;
 174   2          }
 175   1          
 176   1          delay();
 177   1          P1=0x80 | 0x0d;
 178   1          cmd_wr();
 179   1      
C51 COMPILER V8.08   MAIN1                                                                 12/07/2008 16:13:54 PAGE 4   

 180   1          i=0;
 181   1          while(SPEED[i]!='\0')
 182   1          {
 183   2             delay();
 184   2             show_lcd(SPEED[i]);
 185   2             i++;
 186   2          }
 187   1      
 188   1          delay();
 189   1          P1=0xC0;
 190   1          cmd_wr();
 191   1      
 192   1          i=0;
 193   1          while(StateChar[i]!='\0')
 194   1          {
 195   2             delay();
 196   2             show_lcd(StateChar[i]);
 197   2             i++;
 198   2          }
 199   1      
 200   1          delay();
 201   1          P1=0xC0 | 0x0A;
 202   1          cmd_wr();
 203   1      
 204   1          i=0;
 205   1          if(RunState==RIGHT_RUN)
 206   1              while(STATE_CW[i]!='\0')
 207   1              {
 208   2                delay();
 209   2                show_lcd(STATE_CW[i]);
 210   2                i++;
 211   2              }
 212   1          else
 213   1             while(STATE_CCW[i]!='\0')
 214   1              {
 215   2                delay();
 216   2                show_lcd(STATE_CCW[i]);
 217   2                i++;
 218   2              }
 219   1      
 220   1      }
 221          void clock(unsigned int Delay)   //1ms延时程序
 222          {  unsigned int i; 
 223   1         for(;Delay>0;Delay--) 
 224   1          for(i=0;i<124;i++); 
 225   1           
 226   1      }
 227          
 228          void DoSpeed()
 229          {
 230   1          SPEED[0]=(1000*6/RunSpeed/100)+48;
 231   1          SPEED[1]=1000*6/RunSpeed%100/10+48;
 232   1          SPEED[2]=1000*6/RunSpeed%10+48;
 233   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    746    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     38    ----
C51 COMPILER V8.08   MAIN1                                                                 12/07/2008 16:13:54 PAGE 5   

   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 + -