📄 ds1302.lst
字号:
549 1 write_ds1302(0x84,time[4]); //时
550 1 write_ds1302(0x82,time[5]); //分
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 10
551 1 write_ds1302(0x80,time[6]); //秒
552 1 write_ds1302(0x8e,0x80); //写保护寄存器
553 1 }
554
555 void initial_ds13021()
556 {
557 1 write_ds1302(0x8e,0x00); //写保护寄存器,在对时钟或RAM写前WP一定要为0
558 1 write_ds1302(0x8c,year); //年
559 1 write_ds1302(0x88,month); //月
560 1 write_ds1302(0x86,day); //日
561 1 write_ds1302(0x8A,week); //星期
562 1 write_ds1302(0x84,hour); //时
563 1 write_ds1302(0x82,minute); //分
564 1 write_ds1302(0x80,second); //秒
565 1 write_ds1302(0x8e,0x80); //写保护寄存器
566 1 }
567
568 /*****************************************************************************
569 函数功能:读DS1302时间子程序
570 入口参数:
571 出口参数:全局变量(second,minute,hour,week,day,month,year)
572 *****************************************************************************/
573 void read_time()
574 {
575 1 second=read_ds1302(0x81); //秒寄存器
576 1 minute=read_ds1302(0x83); //分
577 1 hour=read_ds1302(0x85); //时
578 1 week=read_ds1302(0x8B); //星期
579 1 day=read_ds1302(0x87); //日
580 1 month=read_ds1302(0x89); //月
581 1 year=read_ds1302(0x8d); //年
582 1 }
583
584 /*****************************************************************************
585 函数功能:主程序
586 入口参数:
587 出口参数:
588 *****************************************************************************/
589
590
591
592
593
594
595 bit scan_key1()
596 // 扫描按键
597 {
598 1 key_s1 = 0x00;
599 1 key_s1 |= K2; /////////////////////////////////////////////////
600 1
601 1 return(key_s1 ^ key_v1);
602 1 }
603
604
605
606 void proc_key1()
607 // 键处理
608 { // hour=12;
609 1 // displayhour();
610 1 if((key_v1 & 0x01) == 0 )
611 1 { // K2按下second1,minute1,hour1,week1,day1,month1,year1;
612 2 if (keysum==1) year1=year1+1;
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 11
613 2 if (keysum==2) month1=month1+1;
614 2 if (keysum==3) day1=day1+1;
615 2 if (keysum==4) week1=week1+1;
616 2 if (keysum==5) hour1=hour1+1;//时
617 2 if (keysum==6) minute1=minute1+1;//分
618 2 if (keysum==7) second1=second1+1;//分
619 2
620 2 if (year1>20) year1=0;
621 2 if (month1>12) month1=1;
622 2 if (week1>7) week1=1;
623 2 if (month1==1 || month1==3 ||month1==5 ||month1==7 ||month1==8 || month1==10 ||month1==12)
624 2 {
625 3 if (day1>31) day1=1;
626 3 }
627 2 if (month1==4 || month1==6 ||month1==9 ||month1==11 )
628 2 {
629 3 if (day1>30) day1=1;
630 3 }
631 2 if (month1==2)
632 2 {
633 3 // if ((year1/4)==(int(year1/4)))
634 3 // {
635 3 if (day1>29) day1=1;
636 3 // }
637 3 }
638 2 if (day1>31) day1=0;
639 2 if (minute1>59) minute1=0;
640 2 if (hour1>23) hour1=0;
641 2 if (second1>59)second1=0;
642 2
643 2
644 2 }
645 1
646 1 }
647
648
649 bit scan_key()
650 // 扫描按键
651 {
652 1 key_s = 0x00;
653 1 key_s |= K1; /////////////////////////////////////////////////
654 1
655 1 return(key_s ^ key_v);
656 1 }
657
658 void proc_key()
659 // 键处理
660 {
661 1 if((key_v & 0x01) == 0)
662 1 { // K1按下
663 2 // send_str(); 聅econd1,minute1,hour1,week1,day1,month1,year1;
664 2 keysum++;
665 2 if (keysum==1)
666 2 {
667 3 year1=((int)year)/16;
668 3 year1=year1*10+((int)year)%16;
669 3 }
670 2 if (keysum==2)
671 2 {
672 3 month1=((int)month)/16;
673 3 month1=month1*10+((int)month)%16;
674 3 }
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 12
675 2
676 2 if (keysum==3)
677 2 {
678 3 day1=((int)day)/16;
679 3 day1=day1*10+((int)day)%16;
680 3 }
681 2 if (keysum==4)
682 2 {
683 3 week1=week;
684 3
685 3 }
686 2
687 2 if (keysum==5)
688 2 {
689 3 hour1=((int)hour)/16;
690 3 hour1=hour1*10+((int)hour)%16;
691 3 }
692 2
693 2 if (keysum==6)
694 2 {
695 3 minute1=((int)minute)/16;
696 3 minute1=minute1*10+((int)minute)%16;
697 3 // minute1=minute;
698 3 }
699 2 if (keysum==7)
700 2 {
701 3 second1=((int)second)/16;
702 3 second1=second1*10+((int)second)%16;
703 3 // minute1=minute;
704 3 }
705 2
706 2 if (keysum>7)
707 2 {
708 3 keysum=0;
709 3 //,minute1,hour1,week1,day1,month1,year1;
710 3
711 3 year=(year1/10)*16+(year1%10);
712 3 month=(month1/10)*16+(month1%10);
713 3 day=(day1/10)*16+(day1%10);
714 3 week=(week1/10)*16+(week1%10);
715 3 hour=(hour1/10)*16+(hour1%10);
716 3 minute=(minute1/10)*16+(minute1%10);
717 3 second=(second1/10)*16+(second1%10);
718 3 initial_ds13021();
719 3 }
720 2
721 2 }
722 1
723 1 }
724
725 void main(void)
726 {
727 1
728 1 float i;
729 1
730 1 keysum=0;
731 1 // read_ds1302();
732 1 read_time(); //读取时间
733 1 // display();
734 1 display();
735 1 // write_ds1302();
736 1 initial_ds13021(); //初始化DS1302
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 13
737 1
738 1 // read_time(); //读取时间
739 1 // display(); //显示时间
740 1 while(1)
741 1 {
742 2
743 2
744 2
745 2
746 2
747 2
748 2 if(scan_key()) // 扫描按键
749 2 {
750 3 delayms(10); // 延时去抖动
751 3
752 3 if(scan_key()) // 再次扫描
753 3 {
754 4 key_v = key_s; // 保存键值
755 4 proc_key(); // 键处理
756 4 }
757 3 }
758 2
759 2
760 2 if(scan_key1()) // 扫描按键
761 2 {
762 3 delayms(10); // 延时去抖动
763 3 if(scan_key1()) // 再次扫描
764 3 {
765 4 key_v1 = key_s1; // 保存键值
766 4 proc_key1(); // 键处理
767 4 }
768 3 }
769 2
770 2 if (keysum==0 )
771 2 {
772 3 read_time();
773 3 if(second>8)
774 3 {
775 4 //read_time(); //读取时间
776 4 display(); //显示时间
777 4 }
778 3 if(second<5)
779 3 {
780 4 // read_time(); //读取时间
781 4 display1(); //显示时间
782 4 }
783 3 ///
784 3 if (second==5 || second==6 || second==7 ||second==8)
785 3 {
786 4 i=ReadTemperature();
787 4 displayy(i);
788 4 }
789 3 }
790 2
791 2 if (keysum!=0)
792 2 {
793 3 if (keysum==1)displayyear();
794 3 if (keysum==2)displaymonth();
795 3 if (keysum==3)displayday();
796 3 if (keysum==4)displayweek();
797 3 if (keysum==5)displayhour();
798 3 if (keysum==6)displayminuite();
C51 COMPILER V7.06 DS1302 06/27/2008 11:23:52 PAGE 14
799 3 if (keysum==7)displaysecond();
800 3 }
801 2
802 2
803 2 }
804 1 }
805
806
807
808
809
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1973 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 43 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -