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