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