?? ds1302.lst
字號:
596 1 { Write1302(0x8e,0x00); //寫入允許
597 2 temp=Read1302(0x80);
598 2 Write1302(0x80,temp|0x80);
599 2 Write1302(0x8e,0x80); //禁止寫入
600 2 flag=1;
601 2 }
602 1 Setkey(); //掃描模式切換按鍵
603 1 switch(count)
604 1 {case 1:do //count=1,調(diào)整秒
605 2 {
606 3 outkey(); //掃描跳出按鈕
607 3 Upkey(); //掃描加按鈕
608 3 Downkey(); //掃描減按鈕
609 3 if(up_flag==1||down_flag==1) //數(shù)據(jù)更新,重新寫入新的數(shù)據(jù)
610 3 {
611 4 Write1302(0x8e,0x00); //寫入允許
612 4 Write1302(0x80,temp|0x80); //寫入新的秒數(shù)
613 4 Write1302(0x8e,0x80); //禁止寫入
614 4 up_flag=0;
615 4 down_flag=0;
616 4 }
617 3
618 3 hide_sec++; //位閃計數(shù)
619 3 if(hide_sec>3)
620 3 hide_sec=0;
621 3 show_time(); //液晶顯示數(shù)據(jù)
622 3 }while(count==2);break;
623 2 case 2:do //count=2,調(diào)整分
624 2 {
625 3 hide_sec=0;
626 3 outkey();
627 3 Upkey();
628 3 Downkey();
629 3 if(temp>0x60)
630 3 temp=0;
631 3 if(up_flag==1||down_flag==1)
632 3 {
633 4 Write1302(0x8e,0x00); //寫入允許
634 4 Write1302(0x82,temp); //寫入新的分數(shù)
635 4 Write1302(0x8e,0x80); //禁止寫入
636 4 up_flag=0;
637 4 down_flag=0;
638 4 }
639 3 hide_min++;
640 3 if(hide_min>3)
641 3 hide_min=0;
642 3 show_time();
643 3 }while(count==3);break;
644 2 case 3:do //count=3,調(diào)整小時
645 2 {
C51 COMPILER V8.02 DS1302 04/09/2008 00:26:08 PAGE 12
646 3 hide_min=0;
647 3 outkey();
648 3 Upkey();
649 3 Downkey();
650 3 if(up_flag==1||down_flag==1)
651 3 {
652 4 Write1302(0x8e,0x00); //寫入允許
653 4 Write1302(0x84,temp); //寫入新的小時數(shù)
654 4 Write1302(0x8e,0x80); //禁止寫入
655 4 up_flag=0;
656 4 down_flag=0;
657 4 }
658 3 hide_hour++;
659 3 if(hide_hour>3)
660 3 hide_hour=0;
661 3 show_time();
662 3 }while(count==4);break;
663 2 case 4:do //count=4,調(diào)整星期
664 2 {
665 3 hide_hour=0;
666 3 outkey();
667 3 Upkey();
668 3 Downkey();
669 3 if(up_flag==1||down_flag==1)
670 3 {
671 4 Write1302(0x8e,0x00); //寫入允許
672 4 Write1302(0x8a,temp); //寫入新的星期數(shù)
673 4 Write1302(0x8e,0x80); //禁止寫入
674 4 up_flag=0;
675 4 down_flag=0;
676 4 }
677 3 hide_week++;
678 3 if(hide_week>3)
679 3 hide_week=0;
680 3 show_time();
681 3 }while(count==5);break;
682 2 case 5:do //count=5,調(diào)整日
683 2 {
684 3 hide_week=0;
685 3 outkey();
686 3 Upkey();
687 3 Downkey();
688 3 if(up_flag==1||down_flag==1)
689 3 {
690 4 Write1302(0x8e,0x00); //寫入允許
691 4 Write1302(0x86,temp); //寫入新的日數(shù)
692 4 Write1302(0x8e,0x80); //禁止寫入
693 4 up_flag=0;
694 4 down_flag=0;
695 4 }
696 3 hide_day++;
697 3 if(hide_day>3)
698 3 hide_day=0;
699 3 show_time();
700 3 }while(count==6);break;
701 2 case 6:do //count=6,調(diào)整月
702 2 {
703 3 hide_day=0;
704 3 outkey();
705 3 Upkey();
706 3 Downkey();
707 3 if(up_flag==1||down_flag==1)
C51 COMPILER V8.02 DS1302 04/09/2008 00:26:08 PAGE 13
708 3 {
709 4 Write1302(0x8e,0x00); //寫入允許
710 4 Write1302(0x88,temp); //寫入新的月數(shù)
711 4 Write1302(0x8e,0x80); //禁止寫入
712 4 up_flag=0;
713 4 down_flag=0;
714 4 }
715 3 hide_month++;
716 3 if(hide_month>3)
717 3 hide_month=0;
718 3 show_time();
719 3 }while(count==7);break;
720 2 case 7:do //count=7,調(diào)整年
721 2 {
722 3 hide_month=0;
723 3 outkey();
724 3 Upkey();
725 3 Downkey();
726 3 if(up_flag==1||down_flag==1)
727 3 {
728 4 Write1302(0x8e,0x00); //寫入允許
729 4 Write1302(0x8c,temp); //寫入新的年數(shù)
730 4 Write1302(0x8e,0x80); //禁止寫入
731 4 up_flag=0;
732 4 down_flag=0;
733 4 }
734 3 hide_year++;
735 3 if(hide_year>3)
736 3 hide_year=0;
737 3 show_time();
738 3 }while(count==8);break;
739 2 case 8: count=0;hide_year=0; //count8, 跳出調(diào)整模式,返回默認顯示狀態(tài)
740 2 Second=Read1302(DS1302_SECOND);
741 2 Write1302(0x8e,0x00); //寫入允許
742 2 Write1302(0x80,Second&0x7f);
743 2 Write1302(0x8E,0x80); //禁止寫入
744 2 done=0;
745 2 break; //count=7,開啟中斷,標志位置0并退出
746 2 default:break;
747 2
748 2 }
749 1
750 1 }
751
752
753 void show_time() //液晶顯示程序
754 {
755 1 DS1302_GetTime(&CurrentTime); //獲取時鐘芯片的時間數(shù)據(jù)
756 1 TimeToStr(&CurrentTime); //時間數(shù)據(jù)轉(zhuǎn)換液晶字符
757 1 DateToStr(&CurrentTime); //日期數(shù)據(jù)轉(zhuǎn)換液晶字符
758 1 ReadTemp(); //開啟溫度采集程序
759 1 temp_to_str(); //溫度數(shù)據(jù)轉(zhuǎn)換成液晶字符
760 1 GotoXY(12,1); //液晶字符顯示位置
761 1 Print(TempBuffer); //顯示溫度
762 1 GotoXY(0,1);
763 1 Print(CurrentTime.TimeString); //顯示時間
764 1 GotoXY(0,0);
765 1 Print(CurrentTime.DateString); //顯示日期
766 1 GotoXY(15,0);
767 1 Print(week_value); //顯示星期
768 1 GotoXY(11,0);
769 1 Print("Week"); //在液晶上顯示 字母 week
C51 COMPILER V8.02 DS1302 04/09/2008 00:26:08 PAGE 14
770 1 Delay1ms(400); //掃描延時
771 1 }
772
773
774
775 main()
776 {
777 1 flag=1; //時鐘停止標志
778 1 LCD_Initial(); //液晶初始化
779 1 Init_DS18B20( ) ; //DS18B20初始化
780 1 Initial_DS1302(); //時鐘芯片初始化
781 1 up_flag=0;
782 1 down_flag=0;
783 1 done=0; //進入默認液晶顯示
784 1 wireless_1=0;
785 1 wireless_2=0;
786 1 wireless_3=0;
787 1 wireless_4=0;
788 1 while(1)
789 1 {
790 2 while(done==1)
791 2 keydone(); //進入調(diào)整模式
792 2 while(done==0)
793 2 {
794 3 show_time(); //液晶顯示數(shù)據(jù)
795 3 flag=0;
796 3 Setkey(); //掃描各功能鍵
797 3 }
798 2 }
799 1 }
800
801
802
803
C51 COMPILATION COMPLETE. 0 WARNING(S), 26 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -