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

📄 test.lst

📁 用51单片机开发的简单计算器程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 190   2              if (digs[i] != 0){
 191   3                  send_word(i+1, digs[i]);
 192   3                  pre_zero_flag = 1;
 193   3              } else {
 194   3                  if (pre_zero_flag != 0){
 195   4                      send_word(i+1, 0x00);
 196   4                  }
 197   3              }
 198   2          }
 199   1          if (minus_sign == 1)
 200   1              sign_led = 0;
 201   1      }
 202          /**
 203           * show_digs will display the whole current_digs array to the LEDs
 204           */
 205          void show_digs(){
 206   1          byte i;
 207   1          for (i=0; i<4; i++){
 208   2              send_word(i+1, current_digs[i]);
 209   2          }
 210   1      }
 211          /**
 212           * flow_control function
 213           */
 214          byte flow_control(byte key_value){
 215   1          static float last_val = 0;      // The last operant.
 216   1          static byte last_op = 0;        // The last operator.
 217   1          static bit lock = 0;            // Flag for locking.
 218   1          static byte current_index = 0;
 219   1          static byte dot_flag = 0;
 220   1          // The state value to return.
 221   1          byte result = STATE_IDLE;
 222   1          static float value = 0;
 223   1          float _key_value = 0;
 224   1          int i = 0;
 225   1      
 226   1          
 227   1          if (key_value<10){
 228   2              // a digit has been inputed.
 229   2              if (lock != 0)  return result;
 230   2              if (current_index<DATA_WIDTH){
 231   3                  if (dot_flag != 0){
 232   4                      _key_value = key_value;
 233   4                      for (i=0; i<dot_flag; i++) _key_value /= 10;
 234   4                      value += _key_value;
 235   4                  } else {
 236   4                      value *= 10; value += key_value;
 237   4                  }
 238   3                  result = STATE_NUM;
 239   3              }
 240   2          } else if (key_value == '.'){
 241   2              if (dot_flag == 0){
C51 COMPILER V8.06   TEST                                                                  04/25/2008 15:35:58 PAGE 5   

 242   3                  dot_flag = 1;
 243   3                  result = STATE_DOT;
 244   3              } else
 245   2                  result = STATE_IDLE;
 246   2          } else {
 247   2              // a special key has been inputted.
 248   2              result = STATE_REFRESH;
 249   2              switch (key_value){
 250   3                  case 's':   // do operation on the current value.
 251   3                      value = sqrt(value);
 252   3                      calc_res = value;
 253   3                      lock = 1;
 254   3                      break;
 255   3                  default:    // do operation with the last value.
 256   3                      switch (last_op) {
 257   4                          case 0:
 258   4                              last_val = value;
 259   4                              calc_res = last_val;
 260   4                              break;
 261   4                          case '+':
 262   4                              calc_res = last_val + value;
 263   4                              break;
 264   4                          case '-':
 265   4                              calc_res = last_val - value;
 266   4                              break;
 267   4                          case '*':
 268   4                              calc_res = last_val * value;
 269   4                              break;
 270   4                          case '/':
 271   4                              if (value == 0)
 272   4                                  // divide by zero error.
 273   4                                  result = STATE_ERROR;
 274   4                              else
 275   4                                  calc_res = last_val / value;
 276   4                              break;
 277   4                      }
 278   3                      value = 0;
 279   3                      lock = 0;
 280   3                      last_val = calc_res;
 281   3                      last_op = key_value;
 282   3                      break;
 283   3              }
 284   2              dot_flag = 0;
 285   2          }
 286   1          return result;
 287   1      }
 288          
 289          void tests(){
 290   1              byte tmp;
 291   1          shift_flag = 0;
 292   1          led_init();
 293   1          show_copyright();
 294   1      
 295   1          /* // debug flow_control
 296   1          tmp = flow_control(1);
 297   1          tmp = flow_control('.');
 298   1          tmp = flow_control('+');
 299   1          tmp = flow_control(2);
 300   1          tmp = flow_control(5);
 301   1          tmp = flow_control('s');
 302   1          tmp = flow_control('=');
 303   1          _nop_();
C51 COMPILER V8.06   TEST                                                                  04/25/2008 15:35:58 PAGE 6   

 304   1          */
 305   1      
 306   1          /* // test sqrt
 307   1          show_float(sqrt(25));
 308   1          */
 309   1      
 310   1          /* // test show_float
 311   1          show_float(12.345);     // should be 123.5
 312   1          show_float(12.3);       // should be 12.3
 313   1          */
 314   1      
 315   1          /* // test keyboard driver
 316   1          while(1){
 317   1                      tmp = kb_scan();
 318   1                      send_word(0x04,tmp);
 319   1              }
 320   1          */
 321   1      }
*** WARNING C280 IN LINE 290 OF TEST.C: 'tmp': unreferenced local variable
 322          
 323          void main(){
 324   1          byte theKey, state;
 325   1          byte i;
 326   1          bit refresh_flag = 0;
 327   1          // initializing...
 328   1          shift_flag = 0;
 329   1          shift_led = 1;
 330   1          sign_led = 1;
 331   1          led_init();
 332   1          show_copyright();
 333   1          // end of initialization.
 334   1          theKey = kb_scan();
 335   1          CLEAN;
 336   1          while (1){
 337   2              state = flow_control(theKey);
 338   2              switch (state){
 339   3              case STATE_NUM:
 340   3                  if (refresh_flag == 1){
 341   4                      for (i=0; i<4; i++) current_digs[i]=0x7f;
 342   4                      refresh_flag = 0;
 343   4                  }else{
 344   4                      for (i=1; i<4; i++) current_digs[i-1]=current_digs[i];
 345   4                  }
 346   3                  current_digs[3] = theKey;
 347   3                  show_digs();
 348   3                  break;
 349   3              case STATE_DOT:
 350   3                  current_digs[3] |= 0x80;
 351   3                  send_word(4, current_digs[3]);
 352   3                  break;
 353   3              case STATE_REFRESH:
 354   3                  refresh_flag = 1;
 355   3                  show_float(calc_res);
 356   3                  break;
 357   3              case STATE_ERROR:
 358   3                  for (i=0; i<4; i++) current_digs[i]=0x7f;
 359   3                  current_digs[0] = 0x0b;
 360   3                  show_digs();
 361   3                  break;
 362   3              case STATE_IDLE:
 363   3                  break;
 364   3              case STATE_SIGN:
C51 COMPILER V8.06   TEST                                                                  04/25/2008 15:35:58 PAGE 7   

 365   3                  sign_led = ~sign_led;
 366   3                  break;
 367   3              }
 368   2              theKey = kb_scan();
 369   2          }
 370   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1650    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     51      47
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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