📄 ds1302.lst
字号:
558 3 temp=Read1302(DS1302_MONTH); //读取月数
559 3 temp=temp-1; //月数减1
560 3 down_flag=1;
561 3 if(temp==0)
562 3 temp=12;
563 3 break;
564 3 case 7:
565 3 temp=Read1302(DS1302_YEAR); //读取年数
566 3 temp=temp-1; //年数减1
567 3 down_flag=1;
568 3 if(temp==-1)
569 3 temp=0x85;
570 3 break;
571 3 default:break;
572 3 }
573 2
574 2 while(Down==0);
575 2 // while(wireless_3==1);
576 2 }
577 1 }
578
579 void Setkey()//模式选择按键
580 {
581 1 Set=1;
582 1 if(Set==0) //||wireless_4==1
583 1 {
584 2 mdelay(8);
585 2 count=count+1; //Setkey按一次,count就加1
586 2 done=1; //进入调整模式
587 2 while(Set==0);
588 2 // while(wireless_4==1);
589 2 }
590 1
591 1 }
592
593 //以下为键盘处理子程序:
594 uchar getkey(void)
595 {
596 1 uchar x;
597 1 P1=P1|0x07; //I/O1至I/O3写"1"
598 1 x=P1&0x07; //读入I/O1至I/O3并屏蔽其它位
599 1 if(x==10)
600 1 {
601 2 P1=P1|0x07;
602 2 P1=P1&0x0d; //I/O2写"0"
603 2 x=P1&0x07;
604 2 x=(x+1)/2+10; //屏蔽I/O2并转换K10至K12的键值
605 2 if(x==13)
606 2 {
607 3 P1=P1|0x07;
608 3 P1=P1&0xfb; //I/O3写"0"
609 3 x=P1&0x07;
C51 COMPILER V6.12 DS1302 03/12/2009 00:31:59 PAGE 11
610 3 x=x+13; //屏蔽I/O3并转换K13至K15的键值
611 3 }
612 2 }
613 1
614 1 return x;
615 1 }
616
617
618 void keydone()//按键功能执行
619 { uchar Second;
620 1 if(flag==0) //关闭时钟,停止计时
621 1 { Write1302(0x8e,0x00); //写入允许
622 2 temp=Read1302(0x80);
623 2 Write1302(0x80,temp|0x80);
624 2 Write1302(0x8e,0x80); //禁止写入
625 2 flag=1;
626 2 }
627 1 Setkey(); //扫描模式切换按键
628 1 switch(count)
629 1 {case 1:do //count=1,调整秒
630 2 {
631 3 outkey(); //扫描跳出按钮
632 3 Upkey(); //扫描加按钮
633 3 Downkey(); //扫描减按钮
634 3 if(up_flag==1||down_flag==1) //数据更新,重新写入新的数据
635 3 {
636 4 Write1302(0x8e,0x00); //写入允许
637 4 Write1302(0x80,temp|0x80); //写入新的秒数
638 4 Write1302(0x8e,0x80); //禁止写入
639 4 up_flag=0;
640 4 down_flag=0;
641 4 }
642 3
643 3 hide_sec++; //位闪计数
644 3 if(hide_sec>3)
645 3 hide_sec=0;
646 3 show_time(); //液晶显示数据
647 3 }while(count==2);break;
648 2 case 2:do //count=2,调整分
649 2 {
650 3 hide_sec=0;
651 3 outkey();
652 3 Upkey();
653 3 Downkey();
654 3 if(temp>0x60)
655 3 temp=0;
656 3 if(up_flag==1||down_flag==1)
657 3 {
658 4 Write1302(0x8e,0x00); //写入允许
659 4 Write1302(0x82,temp); //写入新的分数
660 4 Write1302(0x8e,0x80); //禁止写入
661 4 up_flag=0;
662 4 down_flag=0;
663 4 }
664 3 hide_min++;
665 3 if(hide_min>3)
666 3 hide_min=0;
667 3 show_time();
668 3 }while(count==3);break;
669 2 case 3:do //count=3,调整小时
670 2 {
671 3 hide_min=0;
C51 COMPILER V6.12 DS1302 03/12/2009 00:31:59 PAGE 12
672 3 outkey();
673 3 Upkey();
674 3 Downkey();
675 3 if(up_flag==1||down_flag==1)
676 3 {
677 4 Write1302(0x8e,0x00); //写入允许
678 4 Write1302(0x84,temp); //写入新的小时数
679 4 Write1302(0x8e,0x80); //禁止写入
680 4 up_flag=0;
681 4 down_flag=0;
682 4 }
683 3 hide_hour++;
684 3 if(hide_hour>3)
685 3 hide_hour=0;
686 3 show_time();
687 3 }while(count==4);break;
688 2 case 4:do //count=4,调整星期
689 2 {
690 3 hide_hour=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(0x8a,temp); //写入新的星期数
698 4 Write1302(0x8e,0x80); //禁止写入
699 4 up_flag=0;
700 4 down_flag=0;
701 4 }
702 3 hide_week++;
703 3 if(hide_week>3)
704 3 hide_week=0;
705 3 show_time();
706 3 }while(count==5);break;
707 2 case 5:do //count=5,调整日
708 2 {
709 3 hide_week=0;
710 3 outkey();
711 3 Upkey();
712 3 Downkey();
713 3 if(up_flag==1||down_flag==1)
714 3 {
715 4 Write1302(0x8e,0x00); //写入允许
716 4 Write1302(0x86,temp); //写入新的日数
717 4 Write1302(0x8e,0x80); //禁止写入
718 4 up_flag=0;
719 4 down_flag=0;
720 4 }
721 3 hide_day++;
722 3 if(hide_day>3)
723 3 hide_day=0;
724 3 show_time();
725 3 }while(count==6);break;
726 2 case 6:do //count=6,调整月
727 2 {
728 3 hide_day=0;
729 3 outkey();
730 3 Upkey();
731 3 Downkey();
732 3 if(up_flag==1||down_flag==1)
733 3 {
C51 COMPILER V6.12 DS1302 03/12/2009 00:31:59 PAGE 13
734 4 Write1302(0x8e,0x00); //写入允许
735 4 Write1302(0x88,temp); //写入新的月数
736 4 Write1302(0x8e,0x80); //禁止写入
737 4 up_flag=0;
738 4 down_flag=0;
739 4 }
740 3 hide_month++;
741 3 if(hide_month>3)
742 3 hide_month=0;
743 3 show_time();
744 3 }while(count==7);break;
745 2 case 7:do //count=7,调整年
746 2 {
747 3 hide_month=0;
748 3 outkey();
749 3 Upkey();
750 3 Downkey();
751 3 if(up_flag==1||down_flag==1)
752 3 {
753 4 Write1302(0x8e,0x00); //写入允许
754 4 Write1302(0x8c,temp); //写入新的年数
755 4 Write1302(0x8e,0x80); //禁止写入
756 4 up_flag=0;
757 4 down_flag=0;
758 4 }
759 3 hide_year++;
760 3 if(hide_year>3)
761 3 hide_year=0;
762 3 show_time();
763 3 }while(count==8);break;
764 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
765 2 Second=Read1302(DS1302_SECOND);
766 2 Write1302(0x8e,0x00); //写入允许
767 2 Write1302(0x80,Second&0x7f);
768 2 Write1302(0x8E,0x80); //禁止写入
769 2 done=0;
770 2 break; //count=7,开启中断,标志位置0并退出
771 2 default:break;
772 2
773 2 }
774 1
775 1 }
776
777
778 void show_time() //液晶显示程序
779 {
780 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
781 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
782 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
783 1 ReadTemp(); //开启温度采集程序
784 1 temp_to_str(); //温度数据转换成液晶字符
785 1 GotoXY(12,1); //液晶字符显示位置
786 1 Print(TempBuffer); //显示温度
787 1 GotoXY(0,1);
788 1 Print(CurrentTime.TimeString); //显示时间
789 1 GotoXY(0,0);
790 1 Print(CurrentTime.DateString); //显示日期
791 1 GotoXY(15,0);
792 1 Print(week_value); //显示星期
793 1 GotoXY(11,0);
794 1 Print("Week"); //在液晶上显示 字母 week
795 1 Delay1ms(400); //扫描延时
C51 COMPILER V6.12 DS1302 03/12/2009 00:31:59 PAGE 14
796 1 }
797
798
799
800 void main()
801 {
802 1 flag=1; //时钟停止标志
803 1 LCD_Initial(); //液晶初始化
804 1 Init_DS18B20( ) ; //DS18B20初始化
805 1 Initial_DS1302(); //时钟芯片初始化
806 1 up_flag=0;
807 1 down_flag=0;
808 1 done=0; //进入默认液晶显示
809 1 // wireless_1=0;
810 1 // wireless_2=0;
811 1 // wireless_3=0;
812 1 // wireless_4=0;
813 1 while(1)
814 1 {
815 2 while(done==1)
816 2 keydone(); //进入调整模式
817 2 while(done==0)
818 2 {
819 3 show_time(); //液晶显示数据
820 3 flag=0;
821 3 Setkey(); //扫描各功能键
822 3 }
823 2 }
824 1 }
825
826
827
828
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2508 ----
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 6
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 + -