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

📄 main.lst

📁 《Proteus在MCS-51&ARM7系统中的应用百例》逆向之 Chapter 8 《Proteus在MCS-51&ARM7系统中的应用百例》MCS-51例子的C语言版本。 最
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: D:\Program Files\Keil 8.08\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND SRC(.\main.SRC)

line level    source

   1          #include <reg51.h>
   2          typedef unsigned char BYTE;
   3          
   4          BYTE DBUF[5];
   5          BYTE TEMP[5];
   6          BYTE YJ;                //结果存放
   7          BYTE YJ1;               //中间结果存放  
   8          BYTE GONG;              //功能键存放
   9          BYTE get_key;   //GETKEY()函数是否成功返回
  10          
  11          sbit DIN=P3^0;
  12          sbit CLK=P3^1; 
  13          
  14          BYTE code SEGTAB[]  ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
  15                                                    0x7D,0x07,0x7F,0x6F,0x77,0x7C,
  16                                                    0x39,0x5E,0x79,0x71,0x00,0x40};
  17          
  18          BYTE code KEYTABLE[]={0x0DE,0x0ED,0x0DD,0x0BD,
  19                                                    0x0EB,0x0DB,0x0BB,0x0E7,
  20                                                    0x0D7,0x0B7,0x07E,0x07D,
  21                                                    0x07B,0x077,0x0BE,0x0EE};
  22          
  23          
  24          enum keymode {num_key,fun_key,clear_key}key_mode;
  25          
  26          /* 通过 */
  27          void DELAY(BYTE i)
  28          {
  29   1              BYTE j=80;
  30   1      
  31   1              do
  32   1              {
  33   2                      do
  34   2                      {}while(--j);
  35   2              }while(--i);
  36   1      }
  37          
  38          
  39          BYTE GETKEY()
  40          {
  41   1              BYTE temp;
  42   1              BYTE temp2;
  43   1              BYTE r1;
  44   1              BYTE offset;
  45   1      
  46   1              get_key=0;
  47   1              DELAY(10);
  48   1      
  49   1              P1=0x0F;
  50   1              temp=P1;
  51   1      
  52   1              if(temp==0x0F)
  53   1                      return 0;               
  54   1              else
  55   1              {
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 2   

  56   2                      temp2=temp;
  57   2      
  58   2                      P1=0xEF;
  59   2                      if(P1==0xEF)
  60   2                      {
  61   3                              P1=0xDF;
  62   3                              if(P1==0xDF)
  63   3                              {
  64   4                                      P1=0xBF;
  65   4                                      if(P1==0xBF)
  66   4                                      {
  67   5                                              P1=0x7F;
  68   5                                              if(P1==0x7F)
  69   5                                              {
  70   6                                                      return 0;               
  71   6                                              }               
  72   5                                      }               
  73   4                              }               
  74   3                      }
  75   2                      // K13
  76   2                      //检查ACC
  77   2                      temp2=ACC&0xF0|temp2;
  78   2      
  79   2                      r1=16;
  80   2                      offset=0;
  81   2      
  82   2                      do
  83   2                      {
  84   3                              if(temp2==KEYTABLE[offset])
  85   3                              {
  86   4                                      P1=0x0F;
  87   4                                      while(P1!=0x0F);
  88   4                                      DELAY(10);
  89   4                                      get_key=1;
  90   4                                      return offset;
  91   4                              }
  92   3                              offset++;
  93   3                      }while(--r1);
  94   2              }
  95   1      }
  96          
  97          /* 通过 */
  98          BYTE TESTKEY()
  99          {
 100   1              P1=0x0F;
 101   1              return ( (~P1)&0x0F );  
 102   1      }
 103          
 104          /* 通过 */
 105          void DISP()
 106          {
 107   1              BYTE data *point_1=DBUF;
 108   1              BYTE data *point_2=TEMP+4;
 109   1              BYTE num=5;
 110   1              BYTE num2;
 111   1      
 112   1              do
 113   1              {
 114   2                      *point_2=SEGTAB[*point_1];
 115   2                      point_1++;
 116   2                      point_2--;              
 117   2              }while(--num);
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 3   

 118   1      
 119   1              point_1=TEMP;
 120   1              num=5;
 121   1              
 122   1              do
 123   1              {       
 124   2                      num2=8;
 125   2                      //检查ACC
 126   2                      ACC=*point_1;
 127   2                      do
 128   2                      {
 129   3                              #pragma asm
 130   3                                      RLC A
 131   3                              #pragma endasm
 132   3      
 133   3                              DIN=CY;
 134   3                              CLK=0;
 135   3                              CLK=1;
 136   3                      }while(--num2);
 137   2                      point_1++;
 138   2              }while(--num);
 139   1      }
 140          
 141          
 142          
 143          main()
 144          {
 145   1              BYTE num=0;
 146   1              BYTE key;
 147   1              BYTE _R0;
 148   1              BYTE input;             
 149   1              BYTE temp;
 150   1      
 151   1              GONG=0;
 152   1              
 153   1              DBUF[0]=0x10;
 154   1              DBUF[1]=0x10;
 155   1              DBUF[2]=0x10;
 156   1              DBUF[3]=0x10;
 157   1              DBUF[4]=0x10;
 158   1      
 159   1              
 160   1              while(1)
 161   1              {
 162   2                      DISP();
 163   2              
 164   2                      while(!TESTKEY());
 165   2      
 166   2                      key=GETKEY();
 167   2                      if(!get_key)
 168   2                              continue;
 169   2                                                       
 170   2                      num++;
 171   2      
 172   2                      switch(key)
 173   2                      {
 174   3                              case 0:         key_mode=num_key;       break;
 175   3                              case 1:         key_mode=num_key;       break;
 176   3                              case 2:         key_mode=num_key;       break;
 177   3                              case 3:         key_mode=num_key;       break;
 178   3                              case 4:         key_mode=num_key;       break;
 179   3                              case 5:         key_mode=num_key;       break;
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 4   

 180   3                              case 6:         key_mode=num_key;       break;
 181   3                              case 7:         key_mode=num_key;       break;
 182   3                              case 8:         key_mode=num_key;       break;
 183   3                              case 9:         key_mode=num_key;       break;
 184   3              
 185   3                              case 10:        key_mode=fun_key;       break;
 186   3                              case 11:        key_mode=fun_key;       break;
 187   3                              case 12:        key_mode=fun_key;       break;
 188   3                              case 13:        key_mode=fun_key;       break;
 189   3                              case 14:        key_mode=fun_key;       break;
 190   3                              
 191   3                              
 192   3                              default:        key_mode=clear_key;     
 193   3                      }
 194   2              
 195   2                      if(key_mode==num_key)
 196   2                      {
 197   3                              if(num==1)
 198   3                              {
 199   4                                      input=key;
 200   4                                      DBUF[4]=key;
 201   4                                      DBUF[3]=0x10;
 202   4                                      DBUF[2]=0x10;
 203   4                                              continue;
 204   4                              }
 205   3                              else if(num==2)
 206   3                              {
 207   4                                      input=input*10+key;
 208   4                                      DBUF[2]=0x10;
 209   4                                      DBUF[3]=DBUF[4];
 210   4                                      DBUF[4]=key;
 211   4                                              continue;
 212   4                              }
 213   3                              else if(num==3)
 214   3                              {
 215   4                                      OV=0;
 216   4                                      ACC=input*10;
 217   4                                      if(OV) goto E3;
 218   4                                      ACC+=key;
 219   4                                      if(CY) goto E3; 
 220   4                                      input=ACC;
 221   4      
 222   4                                      DBUF[2]=DBUF[3];
 223   4                                      DBUF[3]=DBUF[4];
 224   4                                      DBUF[4]=key;
 225   4                                              continue;                                       
 226   4                              }
 227   3                              else
 228   3                              {
 229   4                                      goto E3;
 230   4                              }
 231   3                      }
 232   2                      else if(key_mode==fun_key)
 233   2                      {
 234   3                              DBUF[4]=0x10;
 235   3                              DBUF[3]=0x10;
 236   3                              DBUF[2]=0x10;
 237   3                              
 238   3                              _R0=GONG;
 239   3                              GONG=key;
 240   3      
 241   3                              /* + */
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 5   

 242   3                              if(_R0==10)
 243   3                              {       
 244   4                                      YJ=YJ+input;
 245   4                                      if(CY)  goto E3;
 246   4                                      num=0;
 247   4                              }
 248   3                              /* - */
 249   3                              else if(_R0==11)
 250   3                              {
 251   4                                      YJ=YJ-input;
 252   4                                      if(CY)  goto E3;
 253   4                                      num=0;
 254   4                              }
 255   3                              /* * */
 256   3                              else if(_R0==12)
 257   3                              {
 258   4                                              
 259   4                                      YJ=YJ*input;
 260   4                                      if(OV)  goto E3;                                
 261   4                              }
 262   3                              /* / */
 263   3                              else if(_R0==13)
 264   3                              {
 265   4                                      YJ=YJ/input;
 266   4                                      num=0;
 267   4                              }
 268   3                              /* FIRST */
 269   3                              else if(_R0==0)
 270   3                              {
 271   4                                      YJ=input;
 272   4                                      num=0;
 273   4                              }
 274   3                              /* DEN */
 275   3                              else
 276   3                              {
 277   4                                      num=0;
 278   4                              }
 279   3                                      
 280   3                      }
 281   2                      /*   清除  */
 282   2                      else 
 283   2                      {
 284   3      E3:                     num=0;
 285   3                              input=0;
 286   3                              YJ=0;
 287   3                              GONG=0;
 288   3      
 289   3                              DBUF[0]=0x10;
 290   3                              DBUF[1]=0x10;
 291   3                              DBUF[2]=0x10;
 292   3                              DBUF[3]=0x10;
 293   3                              DBUF[4]=0x10;
 294   3                                      continue;
 295   3                      }
 296   2      
 297   2      //DISP1:
 298   2                      YJ1=YJ/10;
 299   2                      DBUF[4]=YJ%10;
 300   2      
 301   2                      if(YJ1==0)
 302   2                              continue;
 303   2                      else
C51 COMPILER V8.08   MAIN                                                                  05/22/2007 09:40:33 PAGE 6   

 304   2                      {
 305   3                              temp=YJ1;
 306   3                              YJ1=YJ1/10;
 307   3                              DBUF[3]=temp%10;
 308   3      
 309   3                              if(YJ1==0) continue;
 310   3                              else DBUF[2]=YJ1;
 311   3                      }       
 312   2              }//end while
 313   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    513    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15    ----
   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 + -