📄 os.lst
字号:
378 2 if ( os_EnableVoice[3] & 0x01 )
379 2 {
380 3 if ( owbIsSearchEnd( &rom ) )
381 3 {
382 4 // finished
383 4 //owbUnpreSearchDevices(); //no needed
384 4 owbPreSearchDevices(&rom);
385 4 bAlarmSearchCycle++;
386 4 bAlarmSearchCycle %= 3;
387 4 }
388 3 else
389 3 {
390 4 // unfinished
391 4 }
392 3
393 3 if (bAlarmSearchCycle < 2)
394 3 {
395 4 //ds
396 4 if ( owbSearchPath(&rom,OWB_DEVICESEARCH) )
397 4 {
398 5 // find a device
399 5 owbReadMeasure(&tempe,TRUE);
400 5 }
401 4 }
402 3 else
403 3 {
404 4 //as
405 4 if ( owbSearchPath(&rom,OWB_ALARMSEARCH) )
406 4 {
407 5 // find a alarm
408 5 g_1HzClock = 0;
409 5 vocAlarm();
410 5 lcdTextOut(0,3,"Alm:");
411 5 for (i=0;i<8;i++) lcdHexOut( owbGetSearchROM(i) );
412 5 }
413 4 }
414 3 }
415 2 if ((g_1HzClock > 15) && vocIsAlarming())
416 2 {
417 3 //alarm time out , stop
418 3 vocStopAll();
419 3 lcdTextOut(0,3," ");
420 3 }
421 2 }
422 1 }
423
424
425 BYTE osMenu()
426 {
427 1 BYTE rt;
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 8
428 1
429 1 lcdClearDisplay();
430 1 lcdTextOut(0,0,"1.Sel&Search Device ");
431 1 lcdTextOut(0,1,"2.Set Date & Time");
432 1 lcdTextOut(0,2,"3.Alarm Setting");
433 1 lcdTextOut(0,3,"4.Voice Setting");
434 1
435 1 rt = UIGT_LOOP;
436 1
437 1 while (rt == UIGT_LOOP)
438 1 {
439 2 switch ( kbdGetKeyPress() )
440 2 {
441 3 case VKEY_CANCEL:
442 3 rt = UIGT_DESKTOP;
443 3 break;
444 3 case VKEY_1:
445 3 rt = UIGT_SEL_SER_DEVICE;
446 3 break;
447 3 case VKEY_2:
448 3 rt = UIGT_SET_DATETIME;
449 3 break;
450 3 case VKEY_3:
451 3 rt = UIGT_SET_ALARM;
452 3 break;
453 3 case VKEY_4:
454 3 rt = UIGT_SET_VOICE;
455 3 break;
456 3 default: ;
457 3 }
458 2 }
459 1
460 1 return rt;
461 1 }
462
463
464 void osSetDateTime(void)
465 {
466 1 BYTE key,status,unit;
467 1 DATETIME dtt;
468 1
469 1 lcdClearDisplay();
470 1 dtt = dttGetCurDateTime();
471 1 status = OS_STATUS_LOOP | OS_STATUS_REDRAW;
472 1 unit = 1; //年位
473 1
474 1 while (status & OS_STATUS_LOOP)
475 1 {
476 2 if (dtt.mo == 0) dtt.mo=12; if (dtt.mo>12) dtt.mo=1;
477 2 // dd 在下面进行处理
478 2 if (dtt.hh > 24) dtt.hh=23; dtt.hh %= 24;
479 2 if (dtt.mi > 60) dtt.mi=59; dtt.mi %= 60;
480 2 if (dtt.ss > 60) dtt.ss=59; dtt.ss %= 60;
481 2
482 2 if (status & OS_STATUS_REDRAW)
483 2 {
484 3 lcdDisplayOnOffControl(1,0,0); // hide cursor (BIT d, BIT c, BIT b)
485 3
486 3 status &= (~OS_STATUS_REDRAW);
487 3 lcdTextOut(0,0,"Set Date & Time");
488 3 lcdTextOut(0,3,"Set with Up/Dn & L/R");
489 3
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 9
490 3 //" 2000-01-01 00:00:00"
491 3 lcdTextOut(0,1," ");
492 3 lcdDateOut(&dtt);
493 3 lcdTextAddOut(" ");
494 3 lcdTimeOut(&dtt);
495 3
496 3 switch (unit)
497 3 {
498 4 case 1: key = 4; break;
499 4 case 2: key = 7; break;
500 4 case 3: key = 10; break;
501 4 case 4: key = 13; break;
502 4 case 5: key = 16; break;
503 4 case 6:
504 4 default: key = 19;
505 4 }
506 3 lcdTextOut(key,1,"");
507 3 lcdDisplayOnOffControl(1,1,0); // show cursor (BIT d, BIT c, BIT b)
508 3 }
509 2
510 2 key = kbdGetKeyPress();
511 2 switch (key)
512 2 {
513 3 case VKEY_ENTER:
514 3 status &= (~OS_STATUS_LOOP);
515 3 dttSetCurDateTime( &dtt );
516 3 break;
517 3 case VKEY_CANCEL:
518 3 status &= (~OS_STATUS_LOOP);
519 3 break;
520 3 case VKEY_UP:
521 3 switch (unit)
522 3 {
523 4 case 1:
524 4 dtt.yy++;
525 4 break;
526 4 case 2:
527 4 dtt.mo++;
528 4 break;
529 4 case 3:
530 4 if (dtt.dd==31) dtt.dd=1;
531 4 else dtt.dd++;
532 4 break;
533 4 case 4:
534 4 dtt.hh++;
535 4 break;
536 4 case 5:
537 4 dtt.mi++;
538 4 break;
539 4 case 6:
540 4 dtt.ss++;
541 4 break;
542 4 default:
543 4 status |= OS_STATUS_REDRAW;
544 4 unit = 1;
545 4 }
546 3 status |= OS_STATUS_REDRAW;
547 3 break;
548 3 case VKEY_DOWN:
549 3 switch (unit)
550 3 {
551 4 case 1:
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 10
552 4 dtt.yy--;
553 4 break;
554 4 case 2:
555 4 dtt.mo--;
556 4 break;
557 4 case 3:
558 4 if (dtt.dd==1) dtt.dd=31;
559 4 else dtt.dd--;
560 4 break;
561 4 case 4:
562 4 dtt.hh--;
563 4 break;
564 4 case 5:
565 4 dtt.mi--;
566 4 break;
567 4 case 6:
568 4 dtt.ss--;
569 4 break;
570 4 default:
571 4 status |= OS_STATUS_REDRAW;
572 4 unit = 1;
573 4 }
574 3 status |= OS_STATUS_REDRAW;
575 3 break;
576 3 case VKEY_LEFT:
577 3 unit--;
578 3 if (unit<1) unit=6;
579 3 status |= OS_STATUS_REDRAW;
580 3 break;
581 3 case VKEY_RIGHT:
582 3 unit++;
583 3 if (unit>6) unit=1;
584 3 status |= OS_STATUS_REDRAW;
585 3 break;
586 3 default: ;
587 3 }
588 2 }
589 1
590 1 lcdDisplayOnOffControl(1,0,0); // hide cursor (BIT d, BIT c, BIT b)
591 1
592 1 // return UIGT_DESKTOP;
593 1 }
594
595
596 // serveic for osSetAlarm
597 void SetTempe(TEMPE * pT, BYTE bT)
598 {
599 1 pT->th = (bT>>4) & 0x0f;
600 1 if (bT & 0x80) pT->th|=0xf0;
601 1 pT->tl = (bT<<4) & 0xf0;
602 1 }
603 //
604 void osSetAlarm(void)
605 {
606 1 BYTE key,status,tL,tH;
607 1 BIT hitTH;
608 1 TEMPE tempe;
609 1
610 1 lcdClearDisplay();
611 1 owbReadAlarmValue( &tH, &tL, FALSE );
612 1 status = OS_STATUS_LOOP | OS_STATUS_REDRAW;
613 1 hitTH = TRUE;
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 11
614 1
615 1 while (status & OS_STATUS_LOOP)
616 1 {
617 2 if (status & OS_STATUS_REDRAW)
618 2 {
619 3 status &= (~OS_STATUS_REDRAW);
620 3
621 3 lcdTextOut(0,0,"Alarm Setting");
622 3 lcdTextOut(0,1," TH: ");
623 3 SetTempe( &tempe, tH );
624 3 lcdTempeOut( &tempe, os_TempeUnitInF );
625 3 lcdTextOut(0,2," TL: ");
626 3 SetTempe( &tempe, tL );
627 3 lcdTempeOut( &tempe, os_TempeUnitInF );
628 3 lcdTextOut(0,3,"Set with Up/Dn & L/R");
629 3
630 3 lcdTextOut( 11, (hitTH)?1:2, "" );
631 3 lcdDisplayOnOffControl(1,1,0); // show cursor (BIT d, BIT c, BIT b)
632 3 }
633 2
634 2 key = kbdGetKeyPress();
635 2 switch (key)
636 2 {
637 3 case VKEY_ENTER:
638 3 status &= (~OS_STATUS_LOOP);
639 3 owbWriteConfig( tH, tL, OWB_DEFAULTCONFIG, FALSE );
640 3 break;
641 3 case VKEY_CANCEL:
642 3 status &= (~OS_STATUS_LOOP);
643 3 break;
644 3 case VKEY_UP:
645 3 if (hitTH) tH++;
646 3 else tL++;
647 3 status |= OS_STATUS_REDRAW;
648 3 break;
649 3 case VKEY_DOWN:
650 3 if (hitTH) tH--;
651 3 else tL--;
652 3 status |= OS_STATUS_REDRAW;
653 3 break;
654 3 case VKEY_LEFT:
655 3 case VKEY_RIGHT:
656 3 hitTH = ~hitTH;
657 3 status |= OS_STATUS_REDRAW;
658 3 break;
659 3 default: ;
660 3 }
661 2 }
662 1
663 1 lcdDisplayOnOffControl(1,0,0); // hide cursor (BIT d, BIT c, BIT b)
664 1 }
665
666
667 void osSetVoice(void)
668 {
669 1 BYTE key,status;
670 1 BYTE hit,y,i;
671 1 BYTE enVoc[4];
672 1
673 1 lcdClearDisplay();
674 1 status = OS_STATUS_LOOP | OS_STATUS_REDRAW;
675 1 hit = 24;
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 12
676 1 for (i=0;i<4;i++) enVoc[i] = os_EnableVoice[i];
677 1
678 1 while (status & OS_STATUS_LOOP)
679 1 {
680 2 if (status & OS_STATUS_REDRAW)
681 2 {
682 3 status &= (~OS_STATUS_REDRAW);
683 3 // hit = 0~23 整点报时开关
684 3 // hit = 24 警报开关
685 3 for (y=1;y<4;y++)
686 3 {
687 4 i = (hit + y + 23) % 25;
688 4
689 4 lcdTextOut( 4, y, "");
690 4 if (i < 24)
691 4 {
692 5 lcdUIntOut( i, 2 );
693 5 lcdTextAddOut(":00:00");
694 5 }
695 4 else
696 4 {
697 5 lcdTextAddOut("Alarm ");
698 5 }
699 4
700 4 lcdTextOut( 14, y, owbGetRomBit((OWBROM*)enVoc,i)?"on ":"off");
701 4 }
702 3
703 3 //"Voice Setting "
704 3 //" 23:00:00 on "
705 3 //" -> Alarm off "
706 3 //" 00:00:00 on "
707 3 lcdTextOut(0,0,"Voice Setting");
708 3 lcdTextOut(1,2,"->");
709 3 }
710 2
711 2 key = kbdGetKeyPress();
712 2 switch (key)
713 2 {
714 3 case VKEY_ENTER:
715 3 for (i=0;i<4;i++) os_EnableVoice[i] = enVoc[i];
716 3 status &= (~OS_STATUS_LOOP);
717 3 break;
718 3 case VKEY_CANCEL:
719 3 status &= (~OS_STATUS_LOOP);
720 3 break;
721 3 case VKEY_UP:
722 3 if (hit>0) hit--;
723 3 else hit=24;
724 3 status |= OS_STATUS_REDRAW;
725 3 break;
726 3 case VKEY_DOWN:
727 3 hit++;
728 3 hit%=25;
729 3 status |= OS_STATUS_REDRAW;
730 3 break;
731 3 case VKEY_LEFT:
732 3 case VKEY_RIGHT:
733 3 if ( owbGetRomBit((OWBROM*)enVoc,hit%25) )
734 3 {
735 4 owbClrRomBit((OWBROM*)enVoc,hit%25);
736 4 }
737 3 else
C51 COMPILER V8.02 OS 04/26/2008 21:37:30 PAGE 13
738 3 {
739 4 owbSetRomBit((OWBROM*)enVoc,hit%25);
740 4 }
741 3 status |= OS_STATUS_REDRAW;
742 3 break;
743 3 default: ;
744 3 }
745 2 }
746 1 }
747
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2635 ----
CONSTANT SIZE = 455 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 67
IDATA SIZE = ---- ----
BIT SIZE = 1 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -