📄 1602.lst
字号:
606 3 {
607 4 Write1302(0x8e,0x00); //写入允许
608 4 Write1302(0x80,temp|0x80); //写入新的秒数
609 4 Write1302(0x8e,0x80); //禁止写入
C51 COMPILER V8.02 1602 04/07/2012 10:23:53 PAGE 11
610 4 up_flag=0;
611 4 down_flag=0;
612 4 }
613 3
614 3 hide_sec++; //位闪计数
615 3 if(hide_sec>3)
616 3 hide_sec=0;
617 3 show_time(); //液晶显示数据
618 3 }while(count==2);break;
619 2 case 2:do //count=2,调整分
620 2 {
621 3 hide_sec=0;
622 3 outkey();
623 3 Upkey();
624 3 Downkey();
625 3 if(temp>0x60)
626 3 temp=0;
627 3 if(up_flag==1||down_flag==1)
628 3 {
629 4 Write1302(0x8e,0x00); //写入允许
630 4 Write1302(0x82,temp); //写入新的分数
631 4 Write1302(0x8e,0x80); //禁止写入
632 4 up_flag=0;
633 4 down_flag=0;
634 4 }
635 3 hide_min++;
636 3 if(hide_min>3)
637 3 hide_min=0;
638 3 show_time();
639 3 }while(count==3);break;
640 2 case 3:do //count=3,调整小时
641 2 {
642 3 hide_min=0;
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(0x84,temp); //写入新的小时数
650 4 Write1302(0x8e,0x80); //禁止写入
651 4 up_flag=0;
652 4 down_flag=0;
653 4 }
654 3 hide_hour++;
655 3 if(hide_hour>3)
656 3 hide_hour=0;
657 3 show_time();
658 3 }while(count==4);break;
659 2 case 4:do //count=4,调整星期
660 2 {
661 3 hide_hour=0;
662 3 outkey();
663 3 Upkey();
664 3 Downkey();
665 3 if(up_flag==1||down_flag==1)
666 3 {
667 4 Write1302(0x8e,0x00); //写入允许
668 4 Write1302(0x8a,temp); //写入新的星期数
669 4 Write1302(0x8e,0x80); //禁止写入
670 4 up_flag=0;
671 4 down_flag=0;
C51 COMPILER V8.02 1602 04/07/2012 10:23:53 PAGE 12
672 4 }
673 3 hide_week++;
674 3 if(hide_week>3)
675 3 hide_week=0;
676 3 show_time();
677 3 }while(count==5);break;
678 2 case 5:do //count=5,调整日
679 2 {
680 3 hide_week=0;
681 3 outkey();
682 3 Upkey();
683 3 Downkey();
684 3 if(up_flag==1||down_flag==1)
685 3 {
686 4 Write1302(0x8e,0x00); //写入允许
687 4 Write1302(0x86,temp); //写入新的日数
688 4 Write1302(0x8e,0x80); //禁止写入
689 4 up_flag=0;
690 4 down_flag=0;
691 4 }
692 3 hide_day++;
693 3 if(hide_day>3)
694 3 hide_day=0;
695 3 show_time();
696 3 }while(count==6);break;
697 2 case 6:do //count=6,调整月
698 2 {
699 3 hide_day=0;
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(0x88,temp); //写入新的月数
707 4 Write1302(0x8e,0x80); //禁止写入
708 4 up_flag=0;
709 4 down_flag=0;
710 4 }
711 3 hide_month++;
712 3 if(hide_month>3)
713 3 hide_month=0;
714 3 show_time();
715 3 }while(count==7);break;
716 2 case 7:do //count=7,调整年
717 2 {
718 3 hide_month=0;
719 3 outkey();
720 3 Upkey();
721 3 Downkey();
722 3 if(up_flag==1||down_flag==1)
723 3 {
724 4 Write1302(0x8e,0x00); //写入允许
725 4 Write1302(0x8c,temp); //写入新的年数
726 4 Write1302(0x8e,0x80); //禁止写入
727 4 up_flag=0;
728 4 down_flag=0;
729 4 }
730 3 hide_year++;
731 3 if(hide_year>3)
732 3 hide_year=0;
733 3 show_time();
C51 COMPILER V8.02 1602 04/07/2012 10:23:53 PAGE 13
734 3 }while(count==8);break;
735 2 case 8: count=0;hide_year=0; //count8, 跳出调整模式,返回默认显示状态
736 2 Second=Read1302(DS1302_SECOND);
737 2 Write1302(0x8e,0x00); //写入允许
738 2 Write1302(0x80,Second&0x7f);
739 2 Write1302(0x8E,0x80); //禁止写入
740 2 done=0;
741 2 break; //count=7,开启中断,标志位置0并退出
742 2 default:break;
743 2
744 2 }
745 1
746 1 }
747
748
749 void show_time() //液晶显示程序
750 {
751 1 DS1302_GetTime(&CurrentTime); //获取时钟芯片的时间数据
752 1 TimeToStr(&CurrentTime); //时间数据转换液晶字符
753 1 DateToStr(&CurrentTime); //日期数据转换液晶字符
754 1 ReadTemp(); //开启温度采集程序
755 1 temp_to_str(); //温度数据转换成液晶字符
756 1 GotoXY(12,1); //液晶字符显示位置
757 1 Print(TempBuffer); //显示温度
758 1 GotoXY(0,1);
759 1 Print(CurrentTime.TimeString); //显示时间
760 1 GotoXY(0,0);
761 1 Print(CurrentTime.DateString); //显示日期
762 1 GotoXY(15,0);
763 1 Print(week_value); //显示星期
764 1 GotoXY(11,0);
765 1 Print("Week"); //在液晶上显示 字母 week
766 1 Delay1ms(400); //扫描延时
767 1 }
768
769
770
771 main()
772 {
773 1 flag=1; //时钟停止标志
774 1 LCD_Initial(); //液晶初始化
775 1 Init_DS18B20( ) ; //DS18B20初始化
776 1 Initial_DS1302(); //时钟芯片初始化
777 1 up_flag=0;
778 1 down_flag=0;
779 1 done=0; //进入默认液晶显示
780 1 while(1)
781 1 {
782 2 while(done==1)
783 2 keydone(); //进入调整模式
784 2 while(done==0)
785 2 {
786 3 show_time(); //液晶显示数据
787 3 flag=0;
788 3 Setkey(); //扫描各功能键
789 3 }
790 2 }
791 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2451 ----
C51 COMPILER V8.02 1602 04/07/2012 10:23:53 PAGE 14
CONSTANT SIZE = 5 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 48 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 + -