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

📄 计算器.lst

📁 51单片机 计算器 1602显示
💻 LST
📖 第 1 页 / 共 2 页
字号:
 161   2                                      if(temp!=0xf0)
 162   2                                      {
 163   3                                              temp=P1;
 164   3                                              switch(temp)
 165   3                                                      {
 166   4                                                              case 0xeb:num=8; break;
 167   4                                                              case 0xdb:num=9; break;
 168   4                                                              case 0xbb:num=10; break;
 169   4                                                              case 0x7b:num=11; break;                                                                                                
 170   4                                                      }                                                                                       
 171   3                                      }
 172   2                      while(P1!=0xfb);
 173   2                              if(num==8||num==9||num==10)
 174   2                              {
 175   3                                      if(flag==0)
 176   3                                              {a=a*10+table[num];}
 177   3                                      else
 178   3                                              {b=b*10+table[num];}
 179   3                              }
C51 COMPILER V7.06   计算器                                                                03/23/2010 19:43:28 PAGE 4   

 180   2                              if(num==11)//"-"
 181   2                              {
 182   3                                      flag=1;
 183   3                                      fuhao=2;
 184   3                              } 
 185   2                              i=table1[num];
 186   2                              write_date(0x30+i);                                     
 187   2                         }
 188   1                              P1=0xf7;
 189   1                              temp=P1;
 190   1                              temp=temp&0xf0;
 191   1                              if(temp!=0xf0)                          
 192   1                              {       delay(5);
 193   2                                      temp=P1;
 194   2                                      temp=temp&0xf0;
 195   2                                      if(temp!=0xf0)
 196   2                                      {
 197   3                                              temp=P1;
 198   3                                              switch(temp)
 199   3                                                      {
 200   4                                                              case 0xe7:num=12; break;
 201   4                                                              case 0xd7:num=13; break;
 202   4                                                              case 0xb7:num=14; break;
 203   4                                                              case 0x77:num=15; break;                                                        
 204   4                                                              
 205   4                                                      }                                                                               
 206   3                                      }
 207   2                      while(P1!=0xf7);//松手检测,没有松手则保持显示的状态                                       
 208   2                        switch(num)
 209   2                              {
 210   3                                      case 12:{       
 211   4                                                              lcd_clean();
 212   4                                                              a=0;b=0;flag=0;
 213   4                                                              fuhao=0;
 214   4                                                      } break;
 215   3                                      case 13:{       
 216   4                                                              if(flag==0)
 217   4                                                                      {
 218   5                                                                              a=a*10;write_date(0x30);
 219   5                                                                      }
 220   4                                                              else
 221   4                                                              {
 222   5                                                                      b=b*10;
 223   5                                                                      write_date(0x30);
 224   5                                                              }
 225   4                                                      } break;                                                                                                 
 226   3                                      case 14:{
 227   4                                                              if(fuhao==1)
 228   4                                                              {       
 229   5                                                                write_com(0x80+0x0f);
 230   5                                                                lcd_clean();//重新定位后再清屏
 231   5                                                                write_com(0x04);                                                                      
 232   5                                                                c=a+b;                                                                                
 233   5                                                                      while(c!=0)
 234   5                                                                              {
 235   6                                                                                      write_date(0x30+c%10);
 236   6                                                                                      c=c/10;
 237   6                                                                              }
 238   5                                                                              write_date(0x3d);//写"="
 239   5                                                                              a=0;b=0;flag=0;fuhao=0;//清0
 240   5                                                                      }
 241   4                                                      else if(fuhao==2)
C51 COMPILER V7.06   计算器                                                                03/23/2010 19:43:28 PAGE 5   

 242   4                                                                      {       
 243   5                                                                              write_com(0x80+0x0f);
 244   5                                                                              lcd_clean();
 245   5                                                                              write_com(0x04);
 246   5                                                                              if(a-b>0)
 247   5                                                                                      c=a-b;
 248   5                                                                              else
 249   5                                                                                      c=b-a;
 250   5                                                                              while(c!=0)
 251   5                                                                                      {
 252   6                                                                                              write_date(0x30+c%10);                                                                                          
 253   6                                                                                              c=c/10;
 254   6                                                                                      }
 255   5                                                                              if(a-b<0)
 256   5                                                                              write_date(0x2d);//"-"
 257   5                                                                              write_date(0x3d);
 258   5                                                                              a=0;b=0;flag=0;fuhao=0;
 259   5                                                                      }
 260   4                                                              else if(fuhao==3)
 261   4                                                                      {
 262   5                                                                        write_com(0x80+0x0f);
 263   5                                                                        lcd_clean();
 264   5                                                                        write_com(0x04);
 265   5                                                                        c=a*b;
 266   5                                                                              while(c!=0)
 267   5                                                                                      {
 268   6                                                                                          write_date(0x30+c%10);                                                              
 269   6                                                                                              c=c/10;
 270   6                                                                                      }
 271   5                                                                              write_date(0x3d);
 272   5                                                                              a=0;b=0;flag=0;fuhao=0;
 273   5                                                                      }
 274   4                                                      else if(fuhao==4)
 275   4                                                              {
 276   5                                                                      write_com(0x80+0x0f);
 277   5                                                                      lcd_clean();
 278   5                                                                       write_com(0x04);
 279   5                                                                      i=0;
 280   5                                                                      c=(long)(((float)a/b)*1000);//化整后再加小数点                                                  
 281   5                                                                      while(c!=0)
 282   5                                                                      {
 283   6                                                                         write_date(0x30+c%10);
 284   6                                                                              c=c/10;         i++;
 285   6                                                                      if(i==3)
 286   6                                                                      write_date(0x2e);//加小数点"."
 287   6                                                                      }
 288   5                                                                      if(a/b<=0)
 289   5                                                                              write_date(0x30);
 290   5                                                                              write_date(0x3d);
 291   5                                                                              a=0;b=0;flag=0;fuhao=0;
 292   5                                                              }
 293   4                                                              
 294   4                                                      }       break;
 295   3                              case 15:{       
 296   4                                                      i=table1[num];
 297   4                                                      write_date(0x30+i);//"+"
 298   4                                                      flag=1;fuhao=1;
 299   4                                              } break;
 300   3                                      
 301   3                              }
 302   2                      }                                               
 303   1      }
C51 COMPILER V7.06   计算器                                                                03/23/2010 19:43:28 PAGE 6   

 304          
 305           void main()
 306          {       
 307   1              init();
 308   1              while(1)
 309   1                      {
 310   2                              keyscan();
 311   2                      }
 312   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1620    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17    ----
   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 + -