⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 time.lst

📁 个人做的电子钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
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 + -