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

📄 int_calc.lst

📁 针对51单片机的中断触发按键的程序
💻 LST
字号:
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE INT_CALC
OBJECT MODULE PLACED IN INT_CALC.OBJ
COMPILER INVOKED BY: E:\Program Files\Labcenter Electronics\Keil\C51\BIN\C51.EXE INT_CALC.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*************************************************************************************
   2          *Author:PanXiaoguang  -  hack_ziyoutt@qq.com
   3          *Created Date:2009-03-09
   4          *Last Modified:2009-03-09    [Failed]
   5          *Description: A small calculator,can calculate +,-,*,/ of the integer number【INT】
   6          **************************************************************************************/
   7          
   8          #include <AT89X52.H>
   9          
  10          #ifndef true
  11          #define true 1
  12          #endif
  13          
  14          #ifndef false
  15          #define false 0
  16          #endif
  17          
  18          /*
  19          共阴极LED显示管字段码和显示控制码
  20          */
  21          code numCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79,0x00,0x40};
  22          //               0    1    2    3    4    5    6    7    8    9    E    灭   -
  23          code disControl[]={0xfe,0xfd,0xfb,0xf7};
  24          
  25          unsigned  int data led[4];
  26          int data numBuf[4]={0,0,0,0};
  27          unsigned  char data keyTemp;
  28          unsigned  char data keyCode;
  29          unsigned  char data keyValue;
  30          unsigned  char data keyOp;
  31          int data keyNum1=-1;
  32          int data keyNum2=-1;
  33          unsigned  char data numCount=0;
  34          unsigned  char data key;
  35          unsigned  char data count=1;
  36          
  37          bit isEQ=false;
  38          bit isOP=false;
  39          bit hasOP=false;
  40          bit full=false;
  41          
  42          void delay(unsigned  char t)
  43          {
  44   1              for(;t>0;t--);
  45   1      }
  46          
  47          void disTest(void)
  48          {
  49   1              unsigned  char i,j;
  50   1      
  51   1              if(numCount==0)
  52   1              {
  53   2                      led[0]=led[1]=led[2]=11;
  54   2                      led[3]=0;       
  55   2              }
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 2   

  56   1              else if(numCount==1)
  57   1              {
  58   2                      led[0]=led[1]=led[2]=11;
  59   2                      led[3]=numBuf[0];
  60   2              }
  61   1              else if(numCount==2)
  62   1              {
  63   2                      led[0]=led[1]=11;
  64   2                      led[2]=numBuf[0];
  65   2                      led[3]=numBuf[1];               
  66   2              }
  67   1              else if(numCount==3)
  68   1              {
  69   2                      led[0]=11;
  70   2                      led[1]=numBuf[0];
  71   2                      led[2]=numBuf[1];
  72   2                      led[3]=numBuf[2];       
  73   2              }
  74   1              else if(numCount==4)
  75   1              {
  76   2                      led[0]=numBuf[0];
  77   2                      led[1]=numBuf[1];
  78   2                      led[2]=numBuf[2];
  79   2                      led[3]=numBuf[3];       
  80   2              }
  81   1              else
  82   1              {
  83   2                      led[0]=led[1]=led[2]=11;
  84   2                      led[3]=10;      
  85   2              }
  86   1              for(j=0;j<4;j++)
  87   1              {
  88   2                      if(led[j]==-2)
  89   2                      {
  90   3                              led[j]=12;
  91   3                      }
  92   2                      i=led[j];
  93   2                      P0=numCode[i];
  94   2                      P2=disControl[j];
  95   2                      delay(500);
  96   2              }
  97   1      }
  98          
  99          void initCalc(void)
 100          {
 101   1              numBuf[0]=numBuf[1]=numBuf[2]=numBuf[3]=0;
 102   1              keyNum1=keyNum2=-1;
 103   1              keyOp=0;
 104   1              numCount=0;
 105   1              isOP=false;
 106   1              hasOP=false;
 107   1              isEQ=false;
 108   1              count=1;
 109   1              full=false;
 110   1              disTest();
 111   1      }
 112          
 113          void answerDisplay(int answer)
 114          {
 115   1              unsigned  char j;
 116   1              if(10000 > answer && answer > 999)
 117   1              {
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 3   

 118   2                      numCount=4;
 119   2                      numBuf[0]=answer/1000;
 120   2                      numBuf[1]=answer%1000/100;
 121   2                      numBuf[2]=answer%100/10;
 122   2                      numBuf[3]=answer%10;
 123   2              }
 124   1              else if(1000 > answer && answer > 99)
 125   1              {
 126   2                      numCount=3;
 127   2                      numBuf[0]=answer/100;
 128   2                      numBuf[1]=answer%100/10;
 129   2                      numBuf[2]=answer%10;
 130   2              }
 131   1              else if(100 > answer && answer > 9)
 132   1              {
 133   2                      numCount=2;
 134   2                      numBuf[0]=answer/10;
 135   2                      numBuf[1]=answer%10;            
 136   2              }
 137   1              else if(10 > answer && answer >= 0)
 138   1              {
 139   2                      numCount=1;
 140   2                      numBuf[0]=answer;               
 141   2              }
 142   1              else if(0 > answer && answer > -10)
 143   1              {
 144   2                      numCount=2;
 145   2                      numBuf[0]=-2;
 146   2                      numBuf[1]=-answer;
 147   2              }
 148   1              else if(-9 > answer && answer > -100)
 149   1              {
 150   2                      numCount=3;
 151   2                      numBuf[0]=-2;
 152   2                      numBuf[1]=(-answer)/10;
 153   2                      numBuf[2]=(-answer)%10;         
 154   2              }
 155   1              else if(-99 > answer && answer > -1000)
 156   1              {
 157   2                      numCount=4;
 158   2                      numBuf[0]=-2;
 159   2                      numBuf[1]=(-answer)/100;
 160   2                      numBuf[2]=(-answer)%100/10;
 161   2                      numBuf[3]=(-answer)%10;         
 162   2              }
 163   1              else
 164   1              {               
 165   2                      numCount=4;
 166   2                      for(j=0;j<4;j++)
 167   2                      {
 168   3                              numBuf[j]=-2;
 169   3                      }
 170   2              }
 171   1              disTest();
 172   1      }
 173          
 174          int getNum(void)
 175          {
 176   1              int num;
 177   1      
 178   1              if(numCount==0)
 179   1              {
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 4   

 180   2                      num=-1;
 181   2              }
 182   1              else if(numCount==1)
 183   1              {
 184   2                      num=numBuf[0];
 185   2              }
 186   1              else if(numCount==2)
 187   1              {
 188   2                      num=numBuf[0]*10+numBuf[1];
 189   2              }
 190   1              else if(numCount==3)
 191   1              {
 192   2                      num=numBuf[0]*100+numBuf[1]*10+numBuf[2];
 193   2              }
 194   1              else if(numCount==4)
 195   1              {
 196   2                      num=numBuf[0]*1000+numBuf[1]*100+numBuf[2]*10+numBuf[3];
 197   2              }
 198   1              else
 199   1              {
 200   2                      num=-1;
 201   2              }
 202   1              return num;
 203   1      }
 204          
 205          void getKey(void)
 206          {       
 207   1              switch(keyCode)
 208   1              {
 209   2                      case 215:key=0;isOP=false;isEQ=false;break;
 210   2                      case 235:key=1;isOP=false;isEQ=false;break;
 211   2                      case 219:key=2;isOP=false;isEQ=false;break;
 212   2                      case 187:key=3;isOP=false;isEQ=false;break;
 213   2                      case 237:key=4;isOP=false;isEQ=false;break;
 214   2                      case 221:key=5;isOP=false;isEQ=false;break;
 215   2                      case 189:key=6;isOP=false;isEQ=false;break;
 216   2                      case 238:key=7;isOP=false;isEQ=false;break;
 217   2                      case 222:key=8;isOP=false;isEQ=false;break;
 218   2                      case 190:key=9;isOP=false;isEQ=false;break;
 219   2      
 220   2                      case 119:key=10;isOP=true;isEQ=false;break;// +
 221   2                      case 123:key=11;isOP=true;isEQ=false;break;// -
 222   2                      case 125:key=12;isOP=true;isEQ=false;break;// *
 223   2                      case 126:key=13;isOP=true;isEQ=false;break;// /
 224   2                      case 183:key=14;isOP=true;isEQ=true; break;// =
 225   2      
 226   2                      case 231:initCalc();return;
 227   2      
 228   2                      default:return;
 229   2              }
 230   1      
 231   1              if(!isOP)
 232   1              {
 233   2                      if(!full)
 234   2                      {
 235   3                              if(hasOP && !(count++))
 236   3                              {
 237   4                                      numCount=0;
 238   4                              }
 239   3                              numBuf[numCount++]=key;
 240   3                              if(numCount>4)
 241   3                              {
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 5   

 242   4                                      full=true;
 243   4                              }       
 244   3                      }
 245   2                      else
 246   2                      {
 247   3                              numCount=0;
 248   3                      }
 249   2              }
 250   1              if(isOP && !isEQ)
 251   1              {
 252   2                      hasOP=true;
 253   2                      count=0;
 254   2                      keyOp=key;
 255   2                      keyNum1=getNum();       
 256   2              }
 257   1              if(isEQ)
 258   1              {       
 259   2                      if(!count)
 260   2                      {
 261   3                              numCount=0;
 262   3                      }
 263   2                      if(hasOP)
 264   2                      {
 265   3                              keyNum2=getNum();
 266   3                      }
 267   2                      else
 268   2                      {
 269   3                              keyNum1=getNum();
 270   3                              keyOp=0;
 271   3                      }               
 272   2              }
 273   1      }
 274          
 275          void getKeyCode(void)
 276          {
 277   1              unsigned char k,i;
 278   1              P1=0xff;
 279   1              P1=0x0f;
 280   1              k=P1;
 281   1              P1=0xff;
 282   1              P1=0xf0;
 283   1              i=P1;
 284   1              keyValue=i+k;
 285   1      }
 286          
 287          void numCalc(void)
 288          {
 289   1              int data keyAnswer=0;
 290   1              numCount=0;
 291   1              isEQ=false;
 292   1              isOP=false;
 293   1              switch(keyOp)
 294   1              {
 295   2                      case 0 :keyAnswer=keyNum1;break;
 296   2                      case 10:keyAnswer=keyNum1+keyNum2;break;
 297   2                      case 11:keyAnswer=keyNum1-keyNum2;break;
 298   2                      case 12:keyAnswer=keyNum1*keyNum2;break;
 299   2                      case 13:keyAnswer=keyNum1/keyNum2;break;
 300   2      
 301   2                      default:keyAnswer=0;
 302   2              }
 303   1              answerDisplay(keyAnswer);
C51 COMPILER V7.01  INT_CALC                                                               03/09/2009 18:07:30 PAGE 6   

 304   1      }
 305          
 306          void int0() interrupt 0
 307          {
 308   1              getKeyCode();
 309   1              keyCode=keyValue;
 310   1              getKey();
 311   1              disTest();
 312   1      }
 313          
 314          void main()
 315          {       
 316   1              EA=1;
 317   1              EX0=1;
 318   1              while(1)
 319   1              {       
 320   2                      P1=0x0f;
 321   2                      disTest();
 322   2                      if(isEQ)
 323   2                      {
 324   3                              if(keyOp==0)
 325   3                              {
 326   4                                      numCalc();
 327   4                              }
 328   3                              else
 329   3                              {
 330   4                                      if(keyNum2==-1)
 331   4                                      {
 332   5                                              numCount=1;
 333   5                                              numBuf[0]=-2;
 334   5                                              isOP=false;
 335   5                                              isEQ=false;
 336   5                                      }
 337   4                                      else
 338   4                                      {
 339   5                                              numCalc();
 340   5                                      }
 341   4                              }
 342   3                      }       
 343   2              }
 344   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1466    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     27    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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