📄 pcf8563.lst
字号:
452 2 { DataCount++;
453 3 if(DataCount==1)
454 3 {data1=0x00;char_display(0x42,0x30);}
455 3 else if(DataCount==2)
456 3 {data2=0x00;char_display(0x43,0x30);DataCount=0;}
457 3 }
458 2 break;
459 2 case 1: if(EnterCount==1)
460 2 { DataCount++;
461 3 if(DataCount==1)
462 3 {data1=0x01;char_display(0x42,0x31);}
463 3 else if(DataCount==2)
464 3 {data2=0x01;char_display(0x43,0x31);DataCount=0;}
465 3 }
466 2 else if(EnterCount==0)
467 2 { lcd_init();
468 3 CloseCount=1;
469 3 }
470 2 break;
471 2 case 2: if(EnterCount==1)
472 2 { DataCount++;
473 3 if(DataCount==1)
474 3 {data1=0x02;char_display(0x42,0x32);}
475 3 else if(DataCount==2)
476 3 {data2=0x02;char_display(0x43,0x32);DataCount=0;}
477 3 }
478 2 break;
479 2 case 3: LightCount++;
480 2 if(EnterCount==1)
481 2 { DataCount++;
482 3 if(DataCount==1)
483 3 {data1=0x03;char_display(0x42,0x33);}
484 3 else if(DataCount==2)
485 3 {data2=0x03;char_display(0x43,0x33);DataCount=0;}
486 3 }
487 2 if(LightCount==0)
488 2 light=0;
489 2 else if(LightCount==1)
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 9
490 2 light=1;
491 2 else
492 2 light=0;
493 2 break;
494 2 case 4: if(EnterCount==1)
495 2 { DataCount++;
496 3 if(DataCount==1)
497 3 {data1=0x04;char_display(0x42,0x34);}
498 3 else if(DataCount==2)
499 3 {data2=0x04;char_display(0x43,0x34);DataCount=0;}
500 3 }
501 2 else if(EnterCount==0)
502 2 {
503 3 SetPCF8563(minAlarm,0x80); //清除AE标志位
504 3 lcd_init();
505 3 lcd_display(0x02,CloseMinAlarm);
506 3 lcd_display(0x45,AlarmClosed);
507 3 delay(1500);
508 3 lcd_init();
509 3 }
510 2 break;
511 2 case 5: if(EnterCount==1)
512 2 { DataCount++;
513 3 if(DataCount==1)
514 3 {data1=0x05;char_display(0x42,0x35);}
515 3 else if(DataCount==2)
516 3 {data2=0x05;char_display(0x43,0x35);DataCount=0;}
517 3 }
518 2 else if(EnterCount==0)
519 2 {
520 3 SetPCF8563(hourAlarm,0x80); //清除AE标志位
521 3 lcd_init();
522 3 lcd_display(0x03,CloseHourAlarm);
523 3 lcd_display(0x45,AlarmClosed);
524 3 delay(1500);
525 3 lcd_init();
526 3 }
527 2 break;
528 2 case 6: if(EnterCount==1)
529 2 { DataCount++;
530 3 if(DataCount==1)
531 3 {data1=0x06;char_display(0x42,0x36);}
532 3 else if(DataCount==2)
533 3 {data2=0x06;char_display(0x43,0x36);DataCount=0;}
534 3 }
535 2 else if(EnterCount==0)
536 2 {
537 3 SetPCF8563(dayAlarm,0x80); //清除AE标志位
538 3 lcd_init();
539 3 lcd_display(0x03,CloseDayAlarm);
540 3 lcd_display(0x45,AlarmClosed);
541 3 delay(1500);
542 3 lcd_init();
543 3 }
544 2 break;
545 2 case 7: if(EnterCount==1)
546 2 { DataCount++;
547 3 if(DataCount==1)
548 3 {data1=0x07;char_display(0x42,0x37);}
549 3 else if(DataCount==2)
550 3 {data2=0x07;char_display(0x43,0x37);DataCount=0;}
551 3 }
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 10
552 2 else if(EnterCount==0)
553 2 {
554 3 SetPCF8563(weekAlarm,0x80); //清除AE标志位
555 3 lcd_init();
556 3 lcd_display(0x03,CloseWeekAlarm);
557 3 lcd_display(0x45,AlarmClosed);
558 3 delay(1500);
559 3 lcd_init();
560 3 }
561 2 break;
562 2 case 8: if(EnterCount==1)
563 2 { DataCount++;
564 3 if(DataCount==1)
565 3 {data1=0x08;char_display(0x42,0x38);}
566 3 else if(DataCount==2)
567 3 {data2=0x08;char_display(0x43,0x38);DataCount=0;}
568 3 }
569 2 break;
570 2 case 9: if(EnterCount==1)
571 2 { DataCount++;
572 3 if(DataCount==1)
573 3 {data1=0x09;char_display(0x42,0x39);}
574 3 else if(DataCount==2)
575 3 {data2=0x09;char_display(0x43,0x39);DataCount=0;}
576 3 }
577 2 break;
578 2
579 2 default: break;
580 2
581 2 }
582 1 }
583
584 /********************* 时钟关闭程序**********************/
585 void clkscan(void)
586 {uint key;
587 1 key=getch();
588 1 delay(50);
589 1 switch(key)
590 1 {case 2: lcd_init();
591 2 CloseCount=0;
592 2 break;
593 2 default:break;
594 2 }
595 1 }
596 /********************* 中断服务程序**********************/
597 void ISR_int0(void) interrupt 0 using 0
598 { uint t;
599 1 lcd_init();
600 1 for(t=10;t>=0;t--)
601 1 {lcd_display(0x05,ALARM);
602 2 beep=1;
603 2 light=1;
604 2 delay(100);
605 2 }
606 1 light=0;
607 1 beep=0;
608 1 lcd_init();
609 1 SetPCF8563(ctrl2,0x02);//把AIE设置为1,AF设置为0,清空闹钟标志位
610 1 }
611 //定时器中断服务程序,实现1s的定时
612 /*void timer0(void) interrupt 1 using 1
613 {
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 11
614 TH0 = 0x3C; //定时器赋予初值
615 TL0 = 0xAF;
616 //一秒累加
617 rSecondCount++;//秒计时+1
618 if (40 == rSecondCount) //1sec到,50ms*20
619 {
620 GetPCF8563(minute,6,rbuf);
621 test = 1;
622 rSecondCount = 0;
623 }
624 else
625 {
626 test = 0;
627 }
628 }
629 */
630 //---------------------------------主函数------------------------------------------
631 void main()
632 { IT0=0; //系统开外部0中断
633 1 //ET0 = 1; //允许定时器0中断
634 1 EA=1; //开总中断
635 1
636 1 EX0=1;
637 1 //TMOD = 0x01; //定时器工作方式选择
638 1 //TH0 = 0x3C; //定时器赋予初值
639 1 //TL0 = 0xAF;
640 1 //IE = 0x82; // 使能timer0中断
641 1 //TR0 = 1; //启动定时器
642 1
643 1 lcd_init(); // 初始化LCD
644 1 pcf8563start(); //启动pcf8563
645 1 SetPCF8563(ctrl2,0x02);
646 1 setime(); //出始时间设定
647 1
648 1 while(1)
649 1 {
650 2 switch(CloseCount)
651 2 {case 0:
652 3 GetPCF8563(minute,6,rbuf);
653 3 time_display(rbuf);
654 3 keyscan();
655 3 break;
656 3 case 1:
657 3 lcd_display(0x01,Close);
658 3 clkscan();
659 3 break;
660 3 default:break;
661 3 }
662 2
663 2 }
664 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3418 ----
CONSTANT SIZE = 189 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 17 31
IDATA SIZE = 21 ----
BIT SIZE = ---- 1
END OF MODULE INFORMATION.
C51 COMPILER V7.08 PCF8563 03/23/2009 21:41:05 PAGE 12
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -