📄 cmenu.lst
字号:
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 + -