📄 ds1302.lst
字号:
588 3 temp=temp-1; //月数减1
589 3 down_flag=1;
590 3 if(temp==0)
591 3 temp=12;
592 3 temp=temp/10*16+temp%10;
593 3 break;
594 3 case 7:
595 3 temp=Read1302(DS1302_YEAR); //读取年数
596 3 temp=((temp&0xf0)>>4)*10 + (temp&0x0F);
597 3 temp=temp-1; //年数减1
598 3 down_flag=1;
599 3 if(temp==-1)
600 3 temp=99;
601 3 temp=temp/10*16+temp%10;
602 3 break;
603 3 default:break;
604 3 }
605 2
606 2 // while(Down==0);
607 2 }
608 1 }
609
C51 COMPILER V6.12 DS1302 09/29/2007 14:54:24 PAGE 11
610 //**************************
611 //模式选择按键
612 //**************************
613 void Setkey()
614 {
615 1 Set=1;
616 1 if(Set==0)
617 1 {
618 2 mdelay(5);
619 2 count=count+1; //Setkey按一次,count就加1
620 2 done=1; //进入调整模式
621 2 while(Set==0);
622 2 }
623 1
624 1 }
625
626 //*************************
627 //按键功能执行
628 //*************************
629 void keydone()
630 { uchar Second;
631 1 /* if(flag==0) //关闭时钟,停止计时
632 1 { Write1302(0x8e,0x00); //写入允许
633 1 temp=Read1302(0x80);
634 1 Write1302(0x80,temp|0x80);
635 1 Write1302(0x8e,0x80); //禁止写入
636 1 flag=1;
637 1 }*/
638 1 Setkey(); //扫描模式切换按键
639 1 switch(count)
640 1 {case 1:do //count=1,调整秒
641 2 {
642 3
643 3 outkey(); //扫描跳出按钮
644 3 Upkey(); //扫描加按钮
645 3 Downkey(); //扫描减按钮
646 3 if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据
647 3 {
648 4 Write1302(0x8e,0x00); //写入允许
649 4 Write1302(0x80,temp); //写入新的秒数
650 4 Write1302(0x8e,0x80); //禁止写入
651 4 up_flag=0;
652 4 down_flag=0;
653 4 }
654 3 if(Down!=0&&Up!=0)
655 3 {
656 4 hide_sec++;
657 4 if(hide_sec>3)
658 4 hide_sec=0;
659 4 }
660 3 else hide_sec=0;
661 3 show_time(); //液晶显示数据
662 3 }while(count==2);break;
663 2 case 2:do //count=2,调整分
664 2 {
665 3 hide_sec=0;
666 3 outkey();
667 3 Upkey();
668 3 Downkey();
669 3 if(temp>0x60)
670 3 temp=0;
671 3 if(up_flag==1||down_flag==1)
C51 COMPILER V6.12 DS1302 09/29/2007 14:54:24 PAGE 12
672 3 {
673 4 Write1302(0x8e,0x00); //写入允许
674 4 Write1302(0x82,temp); //写入新的分数
675 4 Write1302(0x8e,0x80); //禁止写入
676 4 up_flag=0;
677 4 down_flag=0;
678 4 }
679 3 if(Down!=0&&Up!=0)
680 3 {
681 4 hide_min++;
682 4 if(hide_min>3)
683 4 hide_min=0;
684 4 }
685 3 else hide_min=0;
686 3 show_time();
687 3 }while(count==3);break;
688 2 case 3:do //count=3,调整小时
689 2 {
690 3 hide_min=0;
691 3 outkey();
692 3 Upkey();
693 3 Downkey();
694 3 if(up_flag==1||down_flag==1)
695 3 {
696 4 Write1302(0x8e,0x00); //写入允许
697 4 Write1302(0x84,temp); //写入新的小时数
698 4 Write1302(0x8e,0x80); //禁止写入
699 4 up_flag=0;
700 4 down_flag=0;
701 4 }
702 3 if(Down!=0&&Up!=0)
703 3 {
704 4 hide_hour++;
705 4 if(hide_hour>3)
706 4 hide_hour=0;
707 4 }
708 3 else hide_hour=0;
709 3 show_time();
710 3 }while(count==4);break;
711 2 case 4:do //count=4,调整星期
712 2 {
713 3 hide_hour=0;
714 3 outkey();
715 3 Upkey();
716 3 Downkey();
717 3 if(up_flag==1||down_flag==1)
718 3 {
719 4 Write1302(0x8e,0x00); //写入允许
720 4 Write1302(0x8a,temp); //写入新的星期数
721 4 Write1302(0x8e,0x80); //禁止写入
722 4 up_flag=0;
723 4 down_flag=0;
724 4 }
725 3 if(Down!=0&&Up!=0)
726 3 {
727 4 hide_week++;
728 4 if(hide_week>3)
729 4 hide_week=0;
730 4 }
731 3 else hide_week=0;
732 3 show_time();
733 3 }while(count==5);break;
C51 COMPILER V6.12 DS1302 09/29/2007 14:54:24 PAGE 13
734 2 case 5:do //count=5,调整日
735 2 {
736 3 hide_week=0;
737 3 outkey();
738 3 Upkey();
739 3 Downkey();
740 3 if(up_flag==1||down_flag==1)
741 3 {
742 4 Write1302(0x8e,0x00); //写入允许
743 4 Write1302(0x86,temp); //写入新的日数
744 4 Write1302(0x8e,0x80); //禁止写入
745 4 up_flag=0;
746 4 down_flag=0;
747 4 }
748 3 if(Down!=0&&Up!=0)
749 3 {
750 4 hide_day++;
751 4 if(hide_day>3)
752 4 hide_day=0;
753 4 }
754 3 else hide_day=0;
755 3 show_time();
756 3 }while(count==6);break;
757 2 case 6:do //count=6,调整月
758 2 {
759 3 hide_day=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(0x88,temp); //写入新的月数
767 4 Write1302(0x8e,0x80); //禁止写入
768 4 up_flag=0;
769 4 down_flag=0;
770 4 }
771 3 if(Down!=0&&Up!=0)
772 3 {
773 4 hide_month++;
774 4 if(hide_month>3)
775 4 hide_month=0;
776 4 }
777 3 else hide_month=0;
778 3 show_time();
779 3 }while(count==7);break;
780 2 case 7:do //count=7,调整年
781 2 {
782 3 hide_month=0;
783 3 outkey();
784 3 Upkey();
785 3 Downkey();
786 3 if(up_flag==1||down_flag==1)
787 3 {
788 4 Write1302(0x8e,0x00); //写入允许
789 4 Write1302(0x8c,temp); //写入新的年数
790 4 Write1302(0x8e,0x80); //禁止写入
791 4 up_flag=0;
792 4 down_flag=0;
793 4 }
794 3 if(Down!=0&&Up!=0)
795 3 {
C51 COMPILER V6.12 DS1302 09/29/2007 14:54:24 PAGE 14
796 4 hide_year++;
797 4 if(hide_year>3)
798 4 hide_year=0;
799 4 }
800 3 else hide_year=0;
801 3 show_time();
802 3 }while(count==8);break;
803 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
804 2 Second=Read1302(DS1302_SECOND);
805 2 Write1302(0x8e,0x00); //写入允许
806 2 Write1302(0x80,Second&0x7f);
807 2 Write1302(0x8E,0x80); //禁止写入
808 2 done=0;
809 2 break; //count=7,开启中断,标志位置0并退出
810 2 default:break;
811 2
812 2 }
813 1
814 1 }
815
816
817
818
819
820 void show_time() //液晶显示程序
821 {
822 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
823 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
824 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
825 1 ReadTemp(); //开启温度采集程序
826 1 temp_to_str(); //温度数据转换成液晶字符
827 1 GotoXY(10,1); //液晶字符显示位置
828 1 Print(TempBuffer); //显示温度
829 1 GotoXY(0,1);
830 1 Print(CurrentTime.TimeString); //显示时间
831 1 GotoXY(0,0);
832 1 Print(CurrentTime.DateString); //显示日期
833 1 GotoXY(15,0);
834 1 Print(week_value); //显示星期
835 1 GotoXY(11,0);
836 1 Print("Week"); //在液晶上显示 字母 week
837 1 mdelay(400); //扫描延时
838 1 }
839
840
841
842 main()
843 {
844 1 flag=1; //时钟停止标志
845 1 LCD_Initial(); //液晶初始化
846 1 Init_DS18B20( ) ; //DS18B20初始化
847 1 Initial_DS1302(); //时钟芯片初始化
848 1 up_flag=0;
849 1 down_flag=0;
850 1 done=0; //进入默认液晶显示
851 1 // wireless_1=0;
852 1 // wireless_2=0;
853 1 // wireless_3=0;
854 1 // wireless_4=0;
855 1 while(1)
856 1 {
857 2 while(done==1)
C51 COMPILER V6.12 DS1302 09/29/2007 14:54:24 PAGE 15
858 2 keydone(); //进入调整模式
859 2 while(done==0)
860 2 {
861 3 show_time(); //液晶显示数据
862 3 flag=0;
863 3 Setkey(); //扫描各功能键
864 3 }
865 2 }
866 1 }
867
868
869
870
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 3189 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 49 5
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 + -