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

📄 dw.lst

📁 能够实现步进电机启动、加速、减速、停止以及4位led显示。
💻 LST
字号:
C51 COMPILER V8.05a   DW                                                                   12/03/2008 20:05:52 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE DW
OBJECT MODULE PLACED IN dw.OBJ
COMPILER INVOKED BY: D:\学习软件\KEIL3\C51\BIN\C51.EXE dw.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REGX51.H>
   2          #include <stdio.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          
   6          uint dw;
   7          int Mispeed=25;                   //步进电机起始速度
   8          int Maspeed=100;                  //步进电机最高转动速度
   9          int speed;                                //速度计数
  10          int loopdj;                               //控制电机线圈的接通
  11          int ldata;
  12          int count;                            //显示速度值
  13          uint id=0;                                //电机状态判断
  14          
  15          uchar code table[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x67};
  16          uint code DHTab[]={76,0xd3,86,95,100,106,110,115,119,123};
  17          uint code DLTab[]={0,0x00,86,73,212,0,214,96,163,165};
  18          void delay(uint n);               //延时函数
  19          void viewkey();                   //键值处理程序
  20          uchar scankey(uchar num); //键值扫描程序
  21          void led_xianshi();       //速度值显示函数
  22          
  23          //延时函数
  24          void delay(uint n)
  25          {
  26   1        int i,j;
  27   1        for(i=0;i<n;i++)
  28   1        for(j=0;j<200;j++);
  29   1      }
  30          
  31          //主函数
  32          void main()
  33          { 
  34   1        speed=Mispeed;          //初值
  35   1        loopdj=0xf7;
  36   1        P1=0xff;
  37   1        TMOD=0x10;                      //定时器T1初始化
  38   1        TH1=0x4c;
  39   1        TL1=0x00;
  40   1        EA=1;                                   //开总中断
  41   1        ET1=1;
  42   1      
  43   1        while(1)
  44   1        { 
  45   2          P3=0xff;
  46   2              if((P3&0xff)!=0xff)
  47   2              {
  48   3               delay(2);
  49   3               if((P3&0xff)!=0xff)
  50   3               {
  51   4                 dw=scankey(P3);                //扫描键值
  52   4               }
  53   3              }
  54   2              viewkey();                           //键值处理及显示
  55   2        }
C51 COMPILER V8.05a   DW                                                                   12/03/2008 20:05:52 PAGE 2   

  56   1      }
  57          
  58          
  59          
  60          //键值扫描程序
  61          uchar scankey(uchar num)
  62          { uchar keynum;
  63   1        ldata=num;
  64   1        while((P3&0xff)!=0xff);                  //按键完全释放
  65   1          switch(ldata)
  66   1          {
  67   2            case 0xfe:keynum=1;break;
  68   2                case 0xfd:keynum=2;break;
  69   2                case 0xfb:keynum=3;break;
  70   2                case 0xf7:keynum=4;break;
  71   2          }
  72   1              return(keynum);                            //返回键值
  73   1      }
  74          
  75          
  76          //键值处理及显示程序
  77          void viewkey()
  78          { 
  79   1        //启动步进电机模块
  80   1        if(dw==1)
  81   1        {
  82   2          TR1=1;                           //启动T1
  83   2              speed=25;
  84   2              dw=5;
  85   2              led_xianshi();       //显示速度值
  86   2        }
  87   1        //加速模块
  88   1        else if(dw==2)
  89   1        {
  90   2          while((P3&0xff)!=0xff);                //按键完全释放
  91   2          speed++;
  92   2              if(speed>Maspeed)
  93   2              {speed=100;}
  94   2              dw=5;
  95   2              led_xianshi();       //显示速度值
  96   2        }
  97   1        //减速模块
  98   1        else if(dw==3)
  99   1        {
 100   2          speed--;
 101   2              if(speed<Mispeed)
 102   2              {speed=25;}
 103   2              dw=5;
 104   2              led_xianshi();       //显示速度值
 105   2        }
 106   1        //停止电机转动模块
 107   1        else if(dw==4)
 108   1        {
 109   2          TR1=0;                           //停止T1
 110   2              P1=0xff;                         //P1.4-P1.7均置高
 111   2              speed=0;
 112   2              dw=5;
 113   2              led_xianshi();       //显示速度值
 114   2        }
 115   1        else if(dw==5)
 116   1        {
 117   2          //TR1=1;                         //启动T1
C51 COMPILER V8.05a   DW                                                                   12/03/2008 20:05:52 PAGE 3   

 118   2              dw=5;
 119   2              led_xianshi();       //显示速度值
 120   2        }
 121   1      }
 122          
 123          //速度值显示函数
 124          void led_xianshi()
 125          { 
 126   1        int led_bai,led_shi,led_ge;
 127   1        count=speed;
 128   1        led_bai=count/100;             //显示值百位
 129   1        led_shi=count%100/10;          //显示值十位
 130   1        led_ge =count%10;                      //显示值个位
 131   1      
 132   1        P2=0x7f;                                       //个位位选
 133   1        P0=table[led_ge];                  //显示个位数
 134   1        delay(2);
 135   1      
 136   1        P2=0xbf;                                   //十位位选
 137   1        P0=table[led_shi];             //显示十位数
 138   1        delay(2);
 139   1      
 140   1        P2=0xdf;                                       //百位位选
 141   1        P0=table[led_bai];             //显示百位数
 142   1        delay(2);
 143   1      }
 144          
 145          
 146          //定时器T1中断处理函数
 147          void T1INT() interrupt 3 using 2
 148          {
 149   1        int t;
 150   1        TR1=0;
 151   1        t=speed-Mispeed;
 152   1        TH1=DHTab[t/10];                       //重新置初值
 153   1        TL1=DLTab[t%10];
 154   1      
 155   1        loopdj=loopdj<<1;                      //循环输出控制步进电机
 156   1        P1=loopdj;
 157   1        id++;
 158   1        if(id==4)
 159   1        {
 160   2          id=0;                                        //重新置0
 161   2          loopdj=0xf7;                         //循环
 162   2        }
 163   1        TR1=1;
 164   1      }
 165          
 166          
 167          
 168          
 169          
 170          
 171          
 172          
 173          
 174          
 175          
 176          
 177          
 178          
 179          
C51 COMPILER V8.05a   DW                                                                   12/03/2008 20:05:52 PAGE 4   

 180          
 181          
 182          
 183          
 184          
 185          
 186          
 187          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    565    ----
   CONSTANT SIZE    =     50    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       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 + -