📄 time.lst
字号:
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 12
674 1 if(month==2&&judge1==0)
675 1 {s=28;
676 2 return(s);
677 2 }
678 1 if(month==2&&judge1==1)
679 1 {s=29;
680 2 return(s);
681 2 }
682 1 }
683 /****************星期判断子函数*****************/
684 int date(int year,int month)
685
686 {
687 1 int a,c,d,judge;
688 1 int year1;
689 1 year1=year;
690 1 if(year>2000) for(a=1,year--;year>2000;year--) /*计算除当年外有几个闰年*/
691 1 if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
692 1 a++;
693 1
694 1 if(year<2000) for(a=0,year++;year<2000;year++)
695 1 if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
696 1 a++;
697 1 year=year1;
698 1 if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0)) judge=1;/*判断当年是否为闰年*/
699 1 else judge=0;
700 1 if(month==1) d=0;
701 1 if(month==2) d=31;
702 1 if(month==3) d=59+judge;
703 1 if(month==4) d=90+judge;
704 1 if(month==5) d=120+judge;
705 1 if(month==6) d=151+judge;
706 1 if(month==7) d=181+judge;
707 1 if(month==8) d=212+judge;
708 1 if(month==9) d=243+judge;
709 1 if(month==10) d=273+judge;
710 1 if(month==11) d=304+judge;
711 1 if(month==12) d=334+judge; /*计算月份的天数差*/
712 1 /*计算当月一日是星期几*/
713 1 if(year<2000)
714 1 {
715 2 c=((2000-year)*365+a+judge-d-day)%7;
716 2 switch(c)
717 2 {
718 3 case 0: c=5;break;
719 3 case 1: c=4;break;
720 3 case 2: c=3;break;
721 3 case 3: c=2;break;
722 3 case 4: c=1;break;
723 3 case 5: c=0;break;
724 3 case 6: c=6;break;
725 3 }
726 2 }
727 1 if(year==2000)
728 1 {
729 2 if((month==1)&&(day==1)) c=6;
730 2 else c=(day+d-2)%7;
731 2 }
732 1 if(year>2000) c=((year-2000)*365+a+d+day-2)%7;
733 1 return(c);
734 1 }
735 /****************年的转换子函数*****************/
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 13
736 int yearchange(int year)
737 {
738 1 s1=year/1000;
739 1 s2=(year-s1*1000)/100;
740 1 s3=(year-s1*1000-s2*100)/10;
741 1 s4=year-s1*1000-s2*100-s3*10;
742 1 }
743 /***************定时器t1初始化*******************/
744
745 void init_timer1(void)
746 {
747 1 TMOD=0x11; //time1为定时器,方式1
748 1 TH1=0x3c; //预置计数初值
749 1 TL1=0xb0;
750 1 ET1=1;
751 1 }
752 /***********定时器t0中断子函数**************/
753
754 void timer1(void) interrupt 3 using 3 //定时器1方式1,50ms中断一次
755 {
756 1 TH1=0x3c;
757 1 TL1=0xb0;
758 1 mstcnt1++;
759 1
760 1 if(disturb==1)
761 1 {
762 2 if(ss==0)
763 2 {
764 3
765 3 if(mstcnt1>=100)
766 3 {
767 4 speaker=0; //蜂鸣器关
768 4 mstcnt1=0;
769 4 ss=1;
770 4 }
771 3 }
772 2 if(ss==1)
773 2 {
774 3 if(mstcnt1>=40)
775 3 {
776 4 speaker=1;
777 4 mstcnt1=0;
778 4 ss=2;
779 4 }
780 3 }
781 2 if(ss==2)
782 2 {
783 3
784 3 if(mstcnt1>=100)
785 3 {
786 4 mstcnt1=0;
787 4 speaker=0;
788 4 ss=0;
789 4 TR1=0;
790 4 }
791 3 }
792 2 }
793 1 if(disturb==0)
794 1 { speaker=0; TR1=0;ss=0; }
795 1
796 1 }
797 /***************定时器t0初始化*******************/
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 14
798
799 void init_timer0(void)
800 {
801 1 TMOD=0x01; //time0为定时器,方式1
802 1 TH0=0x3c; //预置计数初值
803 1 TL0=0xb0;
804 1 EA=1;
805 1 ET0=1;
806 1 TR0=1;
807 1 }
808 /***********定时器t0中断子函数**************/
809
810 void timer0(void) interrupt 1 using 0 //定时器0方式1,50ms中断一次
811 {
812 1 TH0=0x3c;
813 1 TL0=0xb0;
814 1 mstcnt0++;
815 1 if(mstcnt0>=20 )
816 1 {
817 2 second++;
818 2 mstcnt0=0;
819 2
820 2 }
821 1 if(second>59)
822 1 {
823 2 minite++;
824 2 second=0;
825 2 for(n=0;n<32;n++)
826 2 {
827 3 if((hourjudge[n]==hour)&&(minitejudge[n]==minite))
828 3 {
829 4 if((clockjudge[n]&dateclock[week1])!=0)
830 4 {
831 5 mstcnt1=0;
832 5 disturb=1;
833 5 TR1=1;
834 5 TH1=0x3c;
835 5 TL1=0xb0;
836 5 speaker=1;
837 5 }
838 4 }
839 3 }
840 2 }
841 1 if(minite>59)
842 1 {
843 2 hour++;
844 2 minite=0;
845 2
846 2 }
847 1 if(hour>23)
848 1 {
849 2 week1++;
850 2 day++;
851 2 view=0;
852 2 hour=0;
853 2 k=dayjudge(year,month);
854 2 if(day>k)
855 2 {
856 3 month++;
857 3 }
858 2 if(month>12)
859 2 {
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 15
860 3 year++;
861 3 month=0;
862 3 }
863 2 }
864 1 }
865
866 /**********主程序*************/
867
868 void main(void)
869 {
870 1 speaker=0;
871 1 P2=0xff; //初始化p1口,全设为1
872 1 week1=date(year,month);
873 1 delay(500); //延时500ms启动
874 1 LCDInit( ); //LCD初始化
875 1 init_timer0( );
876 1 init_timer1(); //时钟定时器0和1初始化
877 1 while (1)
878 1 {
879 2 keyscan();
880 2 }
881 1 }
882 void displaytime(void)
883 {
884 1 if(view==0)
885 1 {
886 2 view=1;
887 2 WriteCommand(0x01);
888 2 DisplayOneChar(7,1,0x3A);
889 2 DisplayOneChar(10,1,0x3A);
890 2 DisplayOneChar(12,0,0x2D);
891 2 DisplayOneChar(9,0,0x2D);
892 2 DisplayListChar(0,1,"Time:");
893 2 DisplayListChar(0,0,"Date:");
894 2 }
895 1 if(set!=0)
896 1 {
897 2 TR0=0;
898 2 }
899 1 if(set>6)
900 1 {
901 2 set=0;
902 2 TR0=1;
903 2 mstcnt0=0;
904 2 week1=date(year,month);
905 2 }
906 1 switch(set) //LCD根据工作模式显示
907 1 {
908 2
909 2 case 0:displaytimejudge();//delay(800); //正常工作显示时间
910 2 break;
911 2 case 1:changehour();//delay(200); //调整分显示
912 2 break;
913 2 case 2:changeminite();//delay(1000); //调整时显示
914 2 break;
915 2 case 3:changesecond();//delay(1000); //调整时显示
916 2 break;
917 2 case 4:changeyear();//delay(1000);
918 2 break;
919 2 case 5:changemonth();//delay(1000);
920 2 break;
921 2 case 6:changeday();//delay(1000);
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 16
922 2 break;
923 2 default:
924 2 break;
925 2 }
926 1 delay(250);
927 1 }
928 void displaydate(void)
929 {
930 1 if(view==0)
931 1 {
932 2 WriteCommand(0x01);
933 2 view=1;
934 2 // DisplayListChar(0,0,"Today is ");
935 2
936 2 for(x=0;x<19;x++)
937 2 {* (string1+x)= * (week[date(year,month)]+x);}
938 2 //for(x=4;x<20;x++)
939 2 //{* (string2+x)= * (string3+x-4); }
940 2 /*
941 2 yearchange(year);
942 2 string2[0]=s1;
943 2 string2[1]=s2;
944 2 string2[2]=s3;
945 2 string2[3]=s4; */
946 2 }
947 1
948 1 // DisplayListChar(1,0,weekx[date(year,month)]);
949 1 if(y==0)
950 1 { y++;
951 2 for(x=0;x<19;x++)
952 2 {WriteCommand(0x81+x);
953 3 WriteData(string1[x]);
954 3 // WriteCommand(0x82+0x40+x);
955 3 // WriteData(string2[x]);
956 3 WriteCommand(0x81+0x40);
957 3 WriteData(s1+0x30);
958 3 WriteCommand(0x82+0x40);
959 3 WriteData(s2+0x30);
960 3 WriteCommand(0x83+0x40);
961 3 WriteData(s3+0x30);
962 3 WriteCommand(0x84+0x40);
963 3 WriteData(s4+0x30);
964 3 if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
965 3 DisplayListChar(6,1,"is a lesp year");
966 3 else DisplayListChar(6,1,"isn't a leap year");
967 3 }
968 2 }
969 1 // if((year%4==0&&year%100!=0)||(year%100==0&&year%400==0))
970 1 // DisplayListChar(2,1,"Lesp year");
971 1 // else DisplayListChar(1,1,"Non-Leap year");
972 1 WriteCommand(0x1f);
973 1 delay(300);
974 1 }
975 void displayclock(void)
976 {
977 1 if(view==0)
978 1 {
979 2 WriteCommand(0x01);
980 2 view=1;
981 2 DisplayListChar(0,0,"Clock :");
982 2 }
983 1
C51 COMPILER V8.02 TIME 08/15/2008 20:57:00 PAGE 17
984 1 DisplayOneChar(11,1,0x3a);
985 1 DisplayOneChar(5,0,(set+1)/10+0x30);
986 1 DisplayOneChar(6,0,(set+1)%10+0x30);
987 1 switch(set1)
988 1 {
989 2 case 0:displayclockjudge();break;
990 2 case 1:displayclockjudge();
991 2 break;
992 2 case 2:displayclockjudge();break;
993 2 case 3:displayclockjudge(); //WriteCommand(0x0f);WriteCommand(0x88+set2); delay(2000);
994 2 break;
995 2 default:
996 2 break;
997 2 }
998 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 4272 ----
CONSTANT SIZE = 202 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 62 23
IDATA SIZE = 147 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -