📄 ds1302.lst
字号:
613 4 Write1302(0x8e,0x80); //禁止写入
614 4 up_flag=0;
615 4 down_flag=0;
616 4 }
617 3
618 3 hide_sec++; //位闪计数
619 3 if(hide_sec>3)
620 3 hide_sec=0;
621 3 show_time(); //液晶显示数据
622 3 }while(count==2);break;
623 2 case 2:do //count=2,调整分
624 2 {
625 3 hide_sec=0;
626 3 outkey();
627 3 Upkey();
628 3 Downkey();
629 3 if(temp>0x60)
630 3 temp=0;
631 3 if(up_flag==1||down_flag==1)
632 3 {
633 4 Write1302(0x8e,0x00); //写入允许
634 4 Write1302(0x82,temp); //写入新的分数
635 4 Write1302(0x8e,0x80); //禁止写入
636 4 up_flag=0;
637 4 down_flag=0;
638 4 }
639 3 hide_min++;
640 3 if(hide_min>3)
641 3 hide_min=0;
642 3 show_time();
643 3 }while(count==3);break;
644 2 case 3:do //count=3,调整小时
645 2 {
646 3 hide_min=0;
647 3 outkey();
648 3 Upkey();
649 3 Downkey();
650 3 if(up_flag==1||down_flag==1)
651 3 {
652 4 Write1302(0x8e,0x00); //写入允许
653 4 Write1302(0x84,temp); //写入新的小时数
654 4 Write1302(0x8e,0x80); //禁止写入
655 4 up_flag=0;
656 4 down_flag=0;
657 4 }
658 3 hide_hour++;
659 3 if(hide_hour>3)
660 3 hide_hour=0;
661 3 show_time();
662 3 }while(count==4);break;
663 2 case 4:do //count=4,调整星期
664 2 {
665 3 hide_hour=0;
666 3 outkey();
667 3 Upkey();
668 3 Downkey();
669 3 if(up_flag==1||down_flag==1)
670 3 {
671 4 Write1302(0x8e,0x00); //写入允许
C51 COMPILER V7.20 DS1302 09/12/2007 14:29:53 PAGE 12
672 4 Write1302(0x8a,temp); //写入新的星期数
673 4 Write1302(0x8e,0x80); //禁止写入
674 4 up_flag=0;
675 4 down_flag=0;
676 4 }
677 3 hide_week++;
678 3 if(hide_week>3)
679 3 hide_week=0;
680 3 show_time();
681 3 }while(count==5);break;
682 2 case 5:do //count=5,调整日
683 2 {
684 3 hide_week=0;
685 3 outkey();
686 3 Upkey();
687 3 Downkey();
688 3 if(up_flag==1||down_flag==1)
689 3 {
690 4 Write1302(0x8e,0x00); //写入允许
691 4 Write1302(0x86,temp); //写入新的日数
692 4 Write1302(0x8e,0x80); //禁止写入
693 4 up_flag=0;
694 4 down_flag=0;
695 4 }
696 3 hide_day++;
697 3 if(hide_day>3)
698 3 hide_day=0;
699 3 show_time();
700 3 }while(count==6);break;
701 2 case 6:do //count=6,调整月
702 2 {
703 3 hide_day=0;
704 3 outkey();
705 3 Upkey();
706 3 Downkey();
707 3 if(up_flag==1||down_flag==1)
708 3 {
709 4 Write1302(0x8e,0x00); //写入允许
710 4 Write1302(0x88,temp); //写入新的月数
711 4 Write1302(0x8e,0x80); //禁止写入
712 4 up_flag=0;
713 4 down_flag=0;
714 4 }
715 3 hide_month++;
716 3 if(hide_month>3)
717 3 hide_month=0;
718 3 show_time();
719 3 }while(count==7);break;
720 2 case 7:do //count=7,调整年
721 2 {
722 3 hide_month=0;
723 3 outkey();
724 3 Upkey();
725 3 Downkey();
726 3 if(up_flag==1||down_flag==1)
727 3 {
728 4 Write1302(0x8e,0x00); //写入允许
729 4 Write1302(0x8c,temp); //写入新的年数
730 4 Write1302(0x8e,0x80); //禁止写入
731 4 up_flag=0;
732 4 down_flag=0;
733 4 }
C51 COMPILER V7.20 DS1302 09/12/2007 14:29:53 PAGE 13
734 3 hide_year++;
735 3 if(hide_year>3)
736 3 hide_year=0;
737 3 show_time();
738 3 }while(count==8);break;
739 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
740 2 Second=Read1302(DS1302_SECOND);
741 2 Write1302(0x8e,0x00); //写入允许
742 2 Write1302(0x80,Second&0x7f);
743 2 Write1302(0x8E,0x80); //禁止写入
744 2 done=0;
745 2 break; //count=7,开启中断,标志位置0并退出
746 2 default:break;
747 2
748 2 }
749 1
750 1 }
751
752
753 void show_time() //液晶显示程序
754 {
755 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
756 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
757 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
758 1 ReadTemp(); //开启温度采集程序
759 1 temp_to_str(); //温度数据转换成液晶字符
760 1 GotoXY(12,1); //液晶字符显示位置
761 1 Print(TempBuffer); //显示温度
762 1 GotoXY(0,1);
763 1 Print(CurrentTime.TimeString); //显示时间
764 1 GotoXY(0,0);
765 1 Print(CurrentTime.DateString); //显示日期
766 1 GotoXY(15,0);
767 1 Print(week_value); //显示星期
768 1 GotoXY(11,0);
769 1 Print("Week"); //在液晶上显示 字母 week
770 1 Delay1ms(400); //扫描延时
771 1 }
772
773
774
775 main()
776 {
777 1 flag=1; //时钟停止标志
778 1 LCD_Initial(); //液晶初始化
779 1 Init_DS18B20( ) ; //DS18B20初始化
780 1 Initial_DS1302(); //时钟芯片初始化
781 1 up_flag=0;
782 1 down_flag=0;
783 1 done=0; //进入默认液晶显示
784 1 wireless_1=0;
785 1 wireless_2=0;
786 1 wireless_3=0;
787 1 wireless_4=0;
788 1 while(1)
789 1 {
790 2 while(done==1)
791 2 keydone(); //进入调整模式
792 2 while(done==0)
793 2 {
794 3 show_time(); //液晶显示数据
795 3 flag=0;
C51 COMPILER V7.20 DS1302 09/12/2007 14:29:53 PAGE 14
796 3 Setkey(); //扫描各功能键
797 3 }
798 2 }
799 1 }
800
801
802
803
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2424 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 2
IDATA SIZE = ---- ----
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 + -