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

📄 cmenu.lst

📁 一个充电控制器的完整单片机程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 394   5                                              sprintf(dstr,">%u\x20\0",*value);
 395   5                                              text(0x90,dstr);        if(k>3)k=0;}
 396   4                                      break;
 397   4                              case 0x8:// set clock
 398   4                                      if(key)
 399   4                                      {
 400   5                                              if(i>12)
 401   5                                              {EA=0;
 402   6                                                      for(i=0;i<6;i++)
 403   6                                                      {
 404   7                                                              code unsigned char clocklc[6]={99,12,31,23,59,59};
 405   7                                                              dstr[3*i+2]='\0';       RESET_DOG;
 406   7                                                              str[5-i]=(unsigned char)atoi(&dstr[3*i]);
 407   7                                                              if(str[5-i]>clocklc[i]){i=10;break;}
 408   7                                                              RESET_DOG;
 409   7                                                      }       EA=1;
 410   6                                                      if(str[3]==0||str[4]==0)i=10;
 411   6                                                      if(i!=10)//right 
 412   6                                                              {
 413   7                                                                      setup12887(str);
 414   7                                                                      start12887();
 415   7                                                                      today.date[0]=str[5];
 416   7                                                                      today.date[1]=str[4];
 417   7                                                                      today.date[2]=str[3];
 418   7                                                              }
 419   6                                                      menuno=0x4;     key=0; subno--;
 420   6                                                      if(i!=10){keyrst(1);delay(200);return;}
 421   6                                              }
 422   5                                              else
 423   5                                              {
 424   6                                                      if(dstr[i]=='_')dstr[i]=0x30+k;
 425   6                                                      i++;
 426   6                                                      if((i%3)==2)i++;
 427   6                                                      k=dstr[i]-0x30;
C51 COMPILER V7.20   CMENU                                                                 06/20/2005 16:55:55 PAGE 8   

 428   6                                                      exit=1;key=0;
 429   6                                              }
 430   5                                              goto menu_change_to;
 431   5                                      }
 432   4                                      else
 433   4                                      {       dstr[i]=0x30+k++;
 434   5                                              switch (i)
 435   5                                              {
 436   6                                                      case 3: //month xX
 437   6                                                              if(k>1)k=0;break;
 438   6                                                      case 4: //month Xx
 439   6                                                              if(dstr[3]==0x31){if(k>2)k=0;}
 440   6                                                              else if(k>9)k=0;        break;
 441   6                                                      case 6: //day xX
 442   6                                                              if(k>3)k=0;break;
 443   6                                                      case 7: //day Xx
 444   6                                                              if(dstr[6]==0x33){if(k>1)k=0;}
 445   6                                                              else if(k>9)k=0;        break;
 446   6                                                      case 9:
 447   6                                                              if(k>2)k=0;break;
 448   6                                                      case 10:
 449   6                                                              if(dstr[10]==0x32){if(k>3)k=0;}
 450   6                                                              else if(k>9)k=0;        break;
 451   6                                                      case 12:
 452   6                                                      case 15:
 453   6                                                              if(k>5)k=0;break;
 454   6                                                      default : if(k>9)k=0;   break;
 455   6                                              }
 456   5                                              if(exit){dstr[i]='_';exit=0;k--;}
 457   5                                                      if(k<0)k=0;
 458   5                                              text(0x90,dstr);
 459   5                                      }
 460   4                                      break;
 461   4                              case 0x9://Select model of current
 462   4                                      if(key)
 463   4                                      {
 464   5                                              menuno=0x4;     key=0;
 465   5                                              //check overload <= discharger model
 466   5                                              if(i)if(sys[setover]>*value)sys[setover]=*value;
 467   5                                              //redo init rate seting
 468   5                                              init_rate_workpoint(8);
 469   5                                              goto menu_change_to;
 470   5                                      }
 471   4                                      else
 472   4                                      {       //select vlaue of current model
 473   5                                              *value=sam[i][k++]; 
 474   5                                              sprintf(dstr,">%u\x20\0",*value);
 475   5                                              text(0x90,dstr);        if(k>2)k=0;}
 476   4                                      break;
 477   4                              case 0xA://input overload.
 478   4                                      if(key)
 479   4                                      {
 480   5                                              if(exit||subno>1)
 481   5                                               {unsigned int data ol;
 482   6                                                      ol=atoi(&str[0]);
 483   6                                                      if(ol<=sys[setdisc])*value=ol;
 484   6                                                      menuno=0x4;     key=0;
 485   6                                                      keyrst(1);      subno=MAX_mset;
 486   6                                                      goto menu_change_to;
 487   6                                               }
 488   5                                              subno++;        exit=1; change=1;
 489   5                                              strcat(dstr,"_\0");
C51 COMPILER V7.20   CMENU                                                                 06/20/2005 16:55:55 PAGE 9   

 490   5                                              text(0x90,dstr);
 491   5                                      }
 492   4                                      else
 493   4                                      {       clear();        exit=0;
 494   5                                              text(0x80,"请输入设置值:");
 495   5                                              onchange();     }
 496   4                                      break;
 497   4                              default :       break;
 498   4                      }
 499   3                      while(!P3_3)
 500   3                      {
 501   4                              unsigned char data n;
 502   4                              delay(10);n++;//10ms
 503   4                              if(n>100)break;
 504   4                              if(waitover){keyrst(0);break;}RESET_DOG;
 505   4                      }
 506   3                      kflag=0;
 507   3              }
 508   2      }
 509   1      }
 510          
 511          //
 512          //-------------------------------------------
 513          //change lcd display number,save to str[10];
 514          static void onchange()
 515          {
 516   1                      static unsigned char num=0;
 517   1                      if(_testbit_(change))num=0;
 518   1                      str[subno]=num+0x30;
 519   1                      str[subno+1]='\0';
 520   1                      sprintf(dstr,"%bu>%s",num,str);
 521   1                      text(0x90,dstr);
 522   1                      num++;
 523   1                      if(num>9)num=0;
 524   1                      if(subno>9)subno=0;//max strlen
 525   1        RESET_DOG;
 526   1      }
 527          
 528          //----------------------------------------------
 529          //int0,12887 second interrupt,display date and time,
 530          //display volatage of storage battery 
 531          /* 0x03 External Interrupt 0 */
 532          void int0_second(void) interrupt IE0_VECTOR 
 533          {
 534   1              if(tlong<60052)tlong++;//account() using it
 535   1                      else tlong=0;
 536   1              if(!key_scan)mfirst=1;
 537   1              ACC=XBYTE[0xA00C];//clear 12887 interrupt flag
 538   1      }
 539          //
 540          //-----------------------------------------
 541          //int0,t0,int1,t1,ser;int0 to 12887,int1 to key
 542          /* 0x13 External Interrupt 1 */
 543          #define lowerc  0x2
 544          #define overc   0x13
 545          void keyint(void)interrupt IE1_VECTOR //start key operation
 546          {
 547   1              if((controlstate==overc)||(controlstate==lowerc))return;
 548   1                      key_scan=1;//enable keyboard scan
 549   1              RESET_DOG;
 550   1      }
 551          //---------------------------------------------
C51 COMPILER V7.20   CMENU                                                                 06/20/2005 16:55:55 PAGE 10  

 552          //timer0 interrupt,scan key input
 553          /* 0x0B Timer 0 */
 554          void readkey(void) interrupt TF0_VECTOR 
 555          {
 556   1        //Timer reload
 557   1              TR0=0;
 558   1        TL0 = 0X00;    
 559   1        TH0 = 0X88;    //on 7.3728M,50ms(0x8800);
 560   1              TR0=1;
 561   1      
 562   1              t50ms++;
 563   1      
 564   1        //Timer counter//
 565   1              if((controlstate==overc)||(controlstate==lowerc))return;
 566   1              if(key_scan&&(!kflag))
 567   1                      if(P3_3)
 568   1                      {
 569   2                              if(pushlen>1){key=0;kflag=1;uplen=0;}
 570   2                              else if(uplen>400)waitover=1;
 571   2                              uplen++;pushlen=0;
 572   2                      }
 573   1                      else//low level
 574   1                      {
 575   2                              pushlen++;      uplen=0;
 576   2                              if(pushlen>20){key=1;kflag=1;pushlen=0;}
 577   2                      }
 578   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3469    ----
   CONSTANT SIZE    =    145    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       7
   IDATA SIZE       =      9    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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