📄 ds1302.lst
字号:
707 4 Write1302(0x80,temp); //写入新的秒数
708 4 Write1302(0x8e,0x80); //禁止写入
709 4 up_flag=0;
710 4 down_flag=0;
711 4 }
712 3 if(Down!=0&&Up!=0)
713 3 {
714 4 hide_sec++;
715 4 if(hide_sec>3)
716 4 hide_sec=0;
717 4 }
718 3 else hide_sec=0;
719 3 show_time(); //液晶显示数据
720 3 }while(count==2);break;
721 2 case 2:do //count=2,调整分
722 2 {
723 3 hide_sec=0;
724 3 Upkey();
725 3 Downkey();
726 3 if(temp>0x60)
727 3 temp=0;
728 3 if(up_flag==1||down_flag==1)
729 3 {
730 4 Write1302(0x8e,0x00); //写入允许
731 4 Write1302(0x82,temp); //写入新的分数
732 4 Write1302(0x8e,0x80); //禁止写入
733 4 up_flag=0;
C51 COMPILER V7.06 DS1302 02/28/2009 00:12:56 PAGE 13
734 4 down_flag=0;
735 4 }
736 3 if(Down!=0&&Up!=0)
737 3 {
738 4 hide_min++;
739 4 if(hide_min>3)
740 4 hide_min=0;
741 4 }
742 3 else hide_min=0;
743 3 show_time();
744 3 }while(count==3);break;
745 2 case 3:do //count=3,调整小时
746 2 {
747 3 hide_min=0;
748 3 Upkey();
749 3 Downkey();
750 3 if(up_flag==1||down_flag==1)
751 3 {
752 4 Write1302(0x8e,0x00); //写入允许
753 4 Write1302(0x84,temp); //写入新的小时数
754 4 Write1302(0x8e,0x80); //禁止写入
755 4 up_flag=0;
756 4 down_flag=0;
757 4 }
758 3 if(Down!=0&&Up!=0)
759 3 {
760 4 hide_hour++;
761 4 if(hide_hour>3)
762 4 hide_hour=0;
763 4 }
764 3 else hide_hour=0;
765 3 show_time();
766 3 }while(count==4);break;
767 2 case 4:do //count=4,调整星期
768 2 {
769 3 hide_hour=0;
770 3 Upkey();
771 3 Downkey();
772 3 if(up_flag==1||down_flag==1)
773 3 {
774 4 Write1302(0x8e,0x00); //写入允许
775 4 Write1302(0x8a,temp); //写入新的星期数
776 4 Write1302(0x8e,0x80); //禁止写入
777 4 up_flag=0;
778 4 down_flag=0;
779 4 }
780 3 if(Down!=0&&Up!=0)
781 3 {
782 4 hide_week++;
783 4 if(hide_week>3)
784 4 hide_week=0;
785 4 }
786 3 else hide_week=0;
787 3 show_time();
788 3 }while(count==5);break;
789 2 case 5:do //count=5,调整日
790 2 {
791 3 hide_week=0;
792 3 Upkey();
793 3 Downkey();
794 3 if(up_flag==1||down_flag==1)
795 3 {
C51 COMPILER V7.06 DS1302 02/28/2009 00:12:56 PAGE 14
796 4 Write1302(0x8e,0x00); //写入允许
797 4 Write1302(0x86,temp); //写入新的日数
798 4 Write1302(0x8e,0x80); //禁止写入
799 4 up_flag=0;
800 4 down_flag=0;
801 4 }
802 3 if(Down!=0&&Up!=0)
803 3 {
804 4 hide_day++;
805 4 if(hide_day>3)
806 4 hide_day=0;
807 4 }
808 3 else hide_day=0;
809 3 show_time();
810 3 }while(count==6);break;
811 2 case 6:do //count=6,调整月
812 2 {
813 3 hide_day=0;
814 3 Upkey();
815 3 Downkey();
816 3 if(up_flag==1||down_flag==1)
817 3 {
818 4 Write1302(0x8e,0x00); //写入允许
819 4 Write1302(0x88,temp); //写入新的月数
820 4 Write1302(0x8e,0x80); //禁止写入
821 4 up_flag=0;
822 4 down_flag=0;
823 4 }
824 3 if(Down!=0&&Up!=0)
825 3 {
826 4 hide_month++;
827 4 if(hide_month>3)
828 4 hide_month=0;
829 4 }
830 3 else hide_month=0;
831 3 show_time();
832 3 }while(count==7);break;
833 2 case 7:do //count=7,调整年
834 2 {
835 3 hide_month=0;
836 3 Upkey();
837 3 Downkey();
838 3 if(up_flag==1||down_flag==1)
839 3 {
840 4 Write1302(0x8e,0x00); //写入允许
841 4 Write1302(0x8c,temp); //写入新的年数
842 4 Write1302(0x8e,0x80); //禁止写入
843 4 up_flag=0;
844 4 down_flag=0;
845 4 }
846 3 if(Down!=0&&Up!=0)
847 3 {
848 4 hide_year++;
849 4 if(hide_year>3)
850 4 hide_year=0;
851 4 }
852 3 else hide_year=0;
853 3 show_time();
854 3 }while(count==8);break;
855 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
856 2 Second=Read1302(DS1302_SECOND);
857 2 Write1302(0x8e,0x00); //写入允许
C51 COMPILER V7.06 DS1302 02/28/2009 00:12:56 PAGE 15
858 2 Write1302(0x80,Second&0x7f);
859 2 Write1302(0x8E,0x80); //禁止写入
860 2 done=0;
861 2 break; //count=7,开启中断,标志位置0并退出
862 2 default:break;
863 2
864 2 }
865 1
866 1 }
867
868
869 //***************************************
870 //液晶显示主程序模块
871 //***************************************
872 void show_time()
873 {
874 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
875 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
876 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
877 1 ReadTemp(); //开启温度采集程序
878 1 temp_to_str(); //温度数据转换成液晶字符
879 1 gotoxy(4,0);
880 1 print("温度");
881 1 gotoxy(4,2); //液晶字符显示位置
882 1 print(TempBuffer); //显示温度
883 1 gotoxy(4,6);
884 1 print("℃");
885 1 gotoxy(3,0);
886 1 print("时间:");
887 1 gotoxy(3,3);
888 1 print(CurrentTime.TimeString); //显示时间
889 1 gotoxy(2,3);
890 1 print(CurrentTime.DateString); //显示日期
891 1 gotoxy(2,0);
892 1 print("星期");
893 1 gotoxy(2,2);
894 1 print(week_value); //显示星期
895 1 gotoxy(1,1);
896 1 print("RF-X1 开发板");
897 1 mdelay(500); //扫描延时
898 1 }
899
900
901 //************************************
902 //主程序
903 //*************************************
904 main()
905 {
906 1 // flag=1; //时钟停止标志
907 1 init_lcd();
908 1 clrram_lcd();
909 1 Init_DS18B20( ) ; //DS18B20初始化
910 1 Initial_DS1302(); //时钟芯片初始化
911 1 up_flag=0;
912 1 down_flag=0;
913 1 done=0; //进入默认液晶显示
914 1 while(1)
915 1 {
916 2 while(done==1)
917 2 keydone(); //进入调整模式
918 2 while(done==0)
919 2 {
C51 COMPILER V7.06 DS1302 02/28/2009 00:12:56 PAGE 16
920 3 show_time(); //液晶显示数据
921 3 // flag=0;
922 3 Setkey(); //扫描各功能键
923 3 }
924 2 }
925 1 }
926
927
928
929
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2955 ----
CONSTANT SIZE = 46 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 52 24
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -