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

📄 sp0604_实验18_计算器.lst

📁 基于AT89S52编写的一个计算器C程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 166   9                          case 4:
 167   9                            NumberA+=(unsigned long)(LEDBuffer[Temp])*10000;
 168   9                        }
 169   8                        Temp++;
 170   8                      }              
 171   7                      CurrentFunction=1;
 172   7                      Signal=Key;
 173   7                      GetKeyMaxFlag=0;
 174   7                      GetKeyCount=0;
 175   7                      for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
 176   7                        LEDBuffer[Temp]=16;
 177   7                      LEDBuffer[0]=0;
 178   7                    }
 179   6                    else if(Key==14)
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 4   

 180   6                      {
 181   7                        CurrentFunction=0;
 182   7                      GetKeyMaxFlag=0;
 183   7                      GetKeyCount=0;
 184   7                      NagFlag=0;
 185   7                      DotPosition=0;
 186   7                      for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
 187   7                        LEDBuffer[Temp]=16;
 188   7                        LEDBuffer[0]=0;                 
 189   7                      }
 190   6                    break;
 191   6                  case 1://输入数据2
 192   6                    if((Key>=0)&&(Key<=9))
 193   6                    {
 194   7                        if(GetKeyMaxFlag==0)
 195   7                        {
 196   8                          for(Temp=GetKeyCount;Temp>0;Temp--)
 197   8                          LEDBuffer[Temp]=LEDBuffer[Temp-1];
 198   8                        LEDBuffer[0]=Key;
 199   8                      GetKeyCount++;
 200   8                      if(GetKeyCount==5)GetKeyMaxFlag=1;
 201   8                        }
 202   7                    }
 203   6                    else if(Key==15)
 204   6                      {
 205   7                      NumberB=0;
 206   7                      Temp=0;
 207   7                      while(LEDBuffer[Temp]!=16)
 208   7                        {
 209   8                        switch(Temp)
 210   8                          {
 211   9                          case 0:
 212   9                            NumberB+=LEDBuffer[Temp];
 213   9                            break;
 214   9                          case 1:
 215   9                            NumberB+=(unsigned long)(LEDBuffer[Temp])*10;
 216   9                            break;
 217   9                          case 2:
 218   9                            NumberB+=(unsigned long)(LEDBuffer[Temp])*100;
 219   9                            break;
 220   9                          case 3:
 221   9                            NumberB+=(unsigned long)(LEDBuffer[Temp])*1000;
 222   9                            break;
 223   9                          case 4:
 224   9                            NumberB+=(unsigned long)(LEDBuffer[Temp])*10000;
 225   9                            break;
 226   9                        }
 227   8                        Temp++;
 228   8                      }              
 229   7                      
 230   7                      Result=0;
 231   7                      switch(Signal)
 232   7                        {
 233   8                        case 10://加法运算
 234   8                          Result=NumberA;
 235   8                        Result+=NumberB;
 236   8                        DotPosition=0;
 237   8                          break;
 238   8                        case 11://减法运算
 239   8                          Result=NumberA;
 240   8                        Result-=NumberB;
 241   8                        DotPosition=0;
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 5   

 242   8                          break;
 243   8                        case 12://乘法运算
 244   8                          Result=NumberA;
 245   8                        Result*=NumberB;
 246   8                        DotPosition=0;
 247   8                          break;
 248   8                        case 13://除法运算
 249   8                          Result=NumberA;
 250   8                        Result*=10000;
 251   8                        Result/=NumberB;
 252   8                          break;
 253   8                      }
 254   7                      
 255   7                      for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
 256   7                        LEDBuffer[Temp]=16;
 257   7                      LEDBuffer[0]=0;
 258   7                      
 259   7                      NagFlag=0;
 260   7                      if(Result<0)
 261   7                        {               
 262   8                        Result=~Result;
 263   8                        Result++;
 264   8                        NagFlag=1;
 265   8                      }
 266   7                      
 267   7                      if(Signal==13)//除法运算中除得结果小于0的处理
 268   7                        {
 269   8                          if(Result>=1000)DotPosition=4;
 270   8                          else if(Result>=100)DotPosition=3;
 271   8                            else if(Result>=10)DotPosition=2;
 272   8                            else if(Result>=1)DotPosition=1;
 273   8                          for(Temp=DotPosition;Temp<5;Temp++)LEDBuffer[Temp]=0;
 274   8                          DotPosition=4;
 275   8                        }
 276   7                        else DotPosition=0;
 277   7                      
 278   7                      Temp=0;//将运算结果送出显示缓冲区
 279   7                      while(Result)
 280   7                      {
 281   8                        LEDBuffer[Temp]=Result%10;
 282   8                        Result/=10;
 283   8                        Temp++;
 284   8                      }
 285   7                      
 286   7                      if(NagFlag==1)LEDBuffer[Temp]=17;//运算结果为负的处理
 287   7                      
 288   7                      if(Signal==13)//除法运算中最后位"0"的处理
 289   7                        {
 290   8                        Temp=0;
 291   8                        while(LEDBuffer[Temp]==0)
 292   8                          {
 293   9                            for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=LEDBuffer[i+1];
 294   9                          LEDBuffer[sizeof(LEDBuffer)-1]=16;
 295   9                          DotPosition--;
 296   9                          }
 297   8                      }
 298   7                      
 299   7                      CurrentFunction=2;
 300   7                    }
 301   6                    break;
 302   6                  case 2:
 303   6                    if(Key==14)
C51 COMPILER V8.01   SP0604_实验18_计算芲                                                  04/06/2006 23:05:49 PAGE 6   

 304   6                    {
 305   7                    CurrentFunction=0;
 306   7                      GetKeyMaxFlag=0;
 307   7                    GetKeyCount=0;
 308   7                    NagFlag=0;
 309   7                    DotPosition=0;
 310   7                    for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
 311   7                      LEDBuffer[Temp]=16;
 312   7                    LEDBuffer[0]=0;             
 313   7                    }
 314   6                    break;
 315   6                }         
 316   5                }
 317   4            }
 318   3          }
 319   2          else NoFlashFlag=0; 
 320   2        }
 321   1      }
 322          


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