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

📄 key.lst

📁 基于51单片机控制步进电机的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.12   KEY                                                                   05/26/2009 09:07:39 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #include<key.h> 
   3          #include<led.h>
   4          #include<start.h>   
   5          void count(unsigned char x,unsigned char y)     //x代表对那个变量的修改,y是数字的值
   6          {
   7   1              if(x==1)
   8   1              { 
   9   2                  if(czhengbujin>99) return;//已经设置完三位数字
  10   2                      czhengbujin=czhengbujin*10+y;
  11   2                      if(czhengbujin==0) return;
  12   2                      a++;
  13   2                      show(a,b,c,d);
  14   2              }
  15   1      
  16   1              else if(x==2)
  17   1              {  
  18   2                  if(cfanbujin>99)  return;
  19   2                      cfanbujin=cfanbujin*10+y;
  20   2                      if(cfanbujin==0) return;
  21   2                      b++;
  22   2                      show(a,b,c,d);
  23   2              }
  24   1              else if(x==3)
  25   1              { 
  26   2                  if(czhengjuli>9) return;
  27   2                  czhengjuli=czhengjuli*10+y;
  28   2                      c++;
  29   2                      if(czhengjuli==0) return;
  30   2                      show(a,b,c,d);
  31   2              }
  32   1      
  33   1              else if(x==4)
  34   1              { 
  35   2                  if(cfanjuli>9) return;
  36   2                      cfanjuli=cfanjuli*10+y;
  37   2                      if(cfanjuli==0) return;
  38   2                      d++;
  39   2                      show(a,b,c,d);           
  40   2              }
  41   1              else if(x==5)
  42   1              {
  43   2                  if(csudu>0) return;
  44   2                  csudu=y;
  45   2                  if(csudu==0) return;
  46   2                  show(a,b,c,d);
  47   2              }
  48   1      
  49   1      }
  50          
  51          void suduset(void)
  52          {
  53   1          unsigned char keyword9;
  54   1              unsigned char start=0;
  55   1              P3_6=0;
C51 COMPILER V8.12   KEY                                                                   05/26/2009 09:07:39 PAGE 2   

  56   1              while(1)
  57   1          {
  58   2                keyword9 =keyin();
  59   2                switch(keyword9)
  60   2            { 
  61   3                  case 0x41: count(5,1);break;
  62   3                  case 0x21: count(5,2);break;
  63   3                  case 0x11: count(5,3);break;
  64   3                  case 0x82: count(5,4);break;//数字的设置
  65   3                  case 0x42: count(5,5);break;
  66   3                  case 0x22: count(5,6);break;
  67   3                  case 0x12: count(5,7);break;
  68   3                  case 0x84: count(5,8);break;
  69   3                  case 0x44: count(5,9);break; 
  70   3                      case 0x18: start=1; break;   
  71   3                  default:break;
  72   3                }
  73   2                if(start==1)  break;
  74   2          }
  75   1          startset();
  76   1      }
  77          
  78          void delay(void) //去抖处理延迟
  79          {
  80   1         unsigned int i;
  81   1         for(i=12500;i>0;i--);
  82   1      
  83   1      }
  84          
  85          unsigned char keyscan(void)      //按键扫描
  86          {
  87   1         unsigned char b,c,d,m;
  88   1         do
  89   1         {
  90   2        
  91   2            for(c=0;c<=3;c++)
  92   2            { 
  93   3                    if(c==0)
  94   3                        { 
  95   4                               P1=0xef;
  96   4                        }
  97   3                        
  98   3                        else if(c==1)
  99   3                        {
 100   4                               P1=0xdf;
 101   4                        }
 102   3                        
 103   3                        else if(c==2)
 104   3                        {
 105   4                               P1=0xbf;
 106   4                        }
 107   3                       
 108   3                        else if(c==3)
 109   3                        {      
 110   4                               P1=0x7f;
 111   4      
 112   4                        }
 113   3                        m=P1;
 114   3                        d=~(m)&0x0f;
 115   3                        b=~(m)&0xff;
 116   3                        if(d!=0) return(b); 
 117   3            }   
C51 COMPILER V8.12   KEY                                                                   05/26/2009 09:07:39 PAGE 3   

 118   2         }
 119   1         while(d==0);
 120   1      }
 121          
 122          unsigned char keyin(void)        //扫描确定那个键按下,做了按键去抖处理
 123          {
 124   1         unsigned char t;
 125   1         do
 126   1         {
 127   2           t=keyscan();
 128   2               delay();
 129   2         }
 130   1         while(t!=keyscan());
 131   1         return t;
 132   1      }
 133          
 134          void first(void)
 135          {
 136   1          unsigned char keyword1;
 137   1              keyword1 =keyin();
 138   1              switch(keyword1)
 139   1              {
 140   2              case 0x24:second_0();    break; //正转步数
 141   2          case 0x14:second_1();    break;     //反转步数
 142   2          case 0x88:second_2();    break;     //正转距离
 143   2              case 0x48:second_3();    break; //反转距离
 144   2              default:break;
 145   2              }                                         
 146   1      
 147   1      }
 148          
 149          
 150          
 151          
 152          void second_0(void)      //正转步数设置 
 153          {  
 154   1         
 155   1         unsigned char keyword2=0; //获得按键信息
 156   1         unsigned char fanzhuanbegin=0;//按下反转设置键标志位
 157   1         unsigned char sudu=0;                //按下速度键标志位
 158   1         P3_2=0;
 159   1         if(fanbujin==0)//在此之前并未设置反转
 160   1         {  
 161   2           zhengbujin=1;//设置正传优先标志位
 162   2           while(1)
 163   2           {
 164   3                  keyword2 =keyin();
 165   3                  switch(keyword2)
 166   3              {
 167   4                      case 0x81: count(1,0);break;
 168   4                  case 0x41: count(1,1);break;
 169   4                  case 0x21: count(1,2);break;
 170   4                  case 0x11: count(1,3);break;
 171   4                  case 0x82: count(1,4);break;//数字的设置
 172   4                  case 0x42: count(1,5);break;
 173   4                  case 0x22: count(1,6);break;
 174   4                  case 0x12: count(1,7);break;
 175   4                  case 0x84: count(1,8);break;
 176   4                  case 0x44: count(1,9);break;
 177   4              case 0x14: fanzhuanbegin=1; break;      //反转步数
 178   4                  case 0x28: sudu=1;break;           //只进行正转设置,开始设置速度      
 179   4                  default:break;
C51 COMPILER V8.12   KEY                                                                   05/26/2009 09:07:39 PAGE 4   

 180   4                  }
 181   3                      if (sudu==1||fanzhuanbegin==1) break;
 182   3            }
 183   2            if (fanzhuanbegin==1) second_1();
 184   2            else if(sudu==1) suduset();
 185   2          }
 186   1              
 187   1              
 188   1              
 189   1              
 190   1              
 191   1              else if(fanbujin==1) //已经设置好反转了,先在开始设置正传
 192   1              {
 193   2           while(1)
 194   2           {
 195   3                  keyword2 =keyin();
 196   3                  switch(keyword2)
 197   3              {
 198   4                      case 0x81: count(1,0);break;
 199   4                  case 0x41: count(1,1);break;
 200   4                  case 0x21: count(1,2);break;
 201   4                  case 0x11: count(1,3);break;
 202   4                  case 0x82: count(1,4);break;
 203   4                  case 0x42: count(1,5);break; //数字设置
 204   4                  case 0x22: count(1,6);break;
 205   4                  case 0x12: count(1,7);break;
 206   4                  case 0x84: count(1,8);break;
 207   4                  case 0x44: count(1,9);break;
 208   4                  case 0x28: sudu=1;break;       //正反都以设置完成,设置速度      
 209   4                  default:break;
 210   4                  }

⌨️ 快捷键说明

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