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