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