📄 ds1302.lst
字号:
701 3
702 3 hide_sec++; //位闪计数
703 3 if(hide_sec>3) //corrected
704 3 hide_sec=0;
705 3 if(done==1)
706 3 {
707 4 show_time(); //液晶显示数据
708 4 }else{
709 4 show_tick_time();
710 4 }
711 3
712 3 }while(count==2);break;
713 2 case 2:do //count=2,调整分
714 2 {
715 3 hide_sec=0;
716 3 outkey();
717 3 Upkey();
718 3 Downkey();
719 3 if(temp>0x60)
720 3 temp=0;
721 3 if(up_flag==1||down_flag==1)
722 3 {
723 4 Write1302(0x8e,0x00); //写入允许
724 4 Write1302(0x82,temp); //写入新的分数
725 4 Write1302(0x8e,0x80); //禁止写入
726 4 up_flag=0;
727 4 down_flag=0;
728 4 }
729 3 hide_min++;
730 3 if(hide_min>3)
731 3 hide_min=0;
732 3 if(done==1)
733 3 {
C51 COMPILER V8.02 DS1302 07/12/2008 21:49:01 PAGE 13
734 4 show_time(); //液晶显示数据
735 4 }else{
736 4 show_tick_time();
737 4 }
738 3 }while(count==3);break;
739 2 case 3:do //count=3,调整小时
740 2 {
741 3 hide_min=0;
742 3 outkey();
743 3 Upkey();
744 3 Downkey();
745 3 if(up_flag==1||down_flag==1)
746 3 {
747 4 Write1302(0x8e,0x00); //写入允许
748 4 Write1302(0x84,temp); //写入新的小时数
749 4 Write1302(0x8e,0x80); //禁止写入
750 4 up_flag=0;
751 4 down_flag=0;
752 4 }
753 3 hide_hour++;
754 3 if(hide_hour>3)
755 3 hide_hour=0;
756 3 if(done==1)
757 3 {
758 4 show_time(); //液晶显示数据
759 4 }else{
760 4 show_tick_time();
761 4 }
762 3 }while(count==4);break;
763 2 case 4:do //count=4,调整星期
764 2 {
765 3 hide_hour=0;
766 3 outkey();
767 3 Upkey();
768 3 Downkey();
769 3 if(up_flag==1||down_flag==1)
770 3 {
771 4 Write1302(0x8e,0x00); //写入允许
772 4 Write1302(0x8a,temp); //写入新的星期数
773 4 Write1302(0x8e,0x80); //禁止写入
774 4 up_flag=0;
775 4 down_flag=0;
776 4 }
777 3 hide_week++;
778 3 if(hide_week>3)
779 3 hide_week=0;
780 3 show_time();
781 3 }while(count==5);break;
782 2 case 5:do //count=5,调整日
783 2 {
784 3 hide_week=0;
785 3 outkey();
786 3 Upkey();
787 3 Downkey();
788 3 if(up_flag==1||down_flag==1)
789 3 {
790 4 Write1302(0x8e,0x00); //写入允许
791 4 Write1302(0x86,temp); //写入新的日数
792 4 Write1302(0x8e,0x80); //禁止写入
793 4 up_flag=0;
794 4 down_flag=0;
795 4 }
C51 COMPILER V8.02 DS1302 07/12/2008 21:49:01 PAGE 14
796 3 hide_day++;
797 3 if(hide_day>3)
798 3 hide_day=0;
799 3 show_time();
800 3 }while(count==6);break;
801 2 case 6:do //count=6,调整月
802 2 {
803 3 hide_day=0;
804 3 outkey();
805 3 Upkey();
806 3 Downkey();
807 3 if(up_flag==1||down_flag==1)
808 3 {
809 4 Write1302(0x8e,0x00); //写入允许
810 4 Write1302(0x88,temp); //写入新的月数
811 4 Write1302(0x8e,0x80); //禁止写入
812 4 up_flag=0;
813 4 down_flag=0;
814 4 }
815 3 hide_month++;
816 3 if(hide_month>3)
817 3 hide_month=0;
818 3 show_time();
819 3 }while(count==7);break;
820 2 case 7:do //count=7,调整年
821 2 {
822 3 hide_month=0;
823 3 outkey();
824 3 Upkey();
825 3 Downkey();
826 3 if(up_flag==1||down_flag==1)
827 3 {
828 4 Write1302(0x8e,0x00); //写入允许
829 4 Write1302(0x8c,temp); //写入新的年数
830 4 Write1302(0x8e,0x80); //禁止写入
831 4 up_flag=0;
832 4 down_flag=0;
833 4 }
834 3 hide_year++;
835 3 if(hide_year>3)
836 3 hide_year=0;
837 3 show_time();
838 3 }while(count==8);break;
839 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
840 2 Second=Read1302(DS1302_SECOND);
841 2 Write1302(0x8e,0x00); //写入允许
842 2 Write1302(0x80,Second&0x7f);
843 2 Write1302(0x8E,0x80); //禁止写入
844 2 done=0;
845 2 break; //count=7,开启中断,标志位置0并退出
846 2 default:break;
847 2
848 2 }
849 1
850 1
851 1 }
852
853
854 void show_time() //液晶显示程序
855 {
856 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
857 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
C51 COMPILER V8.02 DS1302 07/12/2008 21:49:01 PAGE 15
858 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
859 1 ReadTemp(); //开启温度采集程序
860 1 temp_to_str(); //温度数据转换成液晶字符
861 1 GotoXY(12,1); //液晶字符显示位置
862 1 Print(TempBuffer); //显示温度
863 1 GotoXY(0,1);
864 1 Print(CurrentTime.TimeString); //显示时间
865 1 GotoXY(0,0);
866 1 Print(CurrentTime.DateString); //显示日期
867 1 GotoXY(15,0);
868 1 Print(week_value); //显示星期
869 1 GotoXY(11,0);
870 1 Print("Week"); //在液晶上显示 字母 week
871 1 Delay1ms(400); //扫描延时
872 1 }
873 void show_tick_time()
874 {
875 1 TimeToStr(&TickTime);
876 1 GotoXY(0,1);
877 1 Print(TickTime.TimeString); //显示时间
878 1
879 1 Delay1ms(400); //扫描延时
880 1
881 1 }
882
883
884
885 main()
886 {
887 1 flag=1; //时钟停止标志
888 1 LCD_Initial(); //液晶初始化
889 1 Init_DS18B20( ) ; //DS18B20初始化
890 1 Initial_DS1302(); //时钟芯片初始化
891 1 up_flag=0;
892 1 down_flag=0;
893 1 done=0; //进入默认液晶显示
894 1 while(1)
895 1 {
896 2 Setkey();
897 2 while(done==1)
898 2 {
899 3 keydone(); //进入调整模式
900 3 }
901 2
902 2 while(adjusttick==1&&done==0)
903 2 {
904 3 keydone(); //进入调整闹钟模式
905 3 show_tick_time();
906 3 }
907 2 while(done==0&&adjusttick==0)
908 2 {
909 3 show_time(); //液晶显示数据
910 3 flag=0;
911 3 Setkey(); //扫描各功能键
912 3 }
913 2
914 2 }
915 1 }
916
917
918
919
C51 COMPILER V8.02 DS1302 07/12/2008 21:49:01 PAGE 16
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2627 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 76 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 + -