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

📄 clock.lst

📁 电子中开发程序 有图
💻 LST
📖 第 1 页 / 共 3 页
字号:
 374   6                                                                                      alarm_wk^=0x1<<cur_alarm_set;   //周末标志位切换
 375   6                                                                                      break;
 376   6                                                              case 0xfe: if(show_status==0)
 377   6                                                                                      alarm_en^=0x1<<cur_alarm_set;   //启用标志位切换
 378   6                                                       }
 379   5                                              return;
 380   5                                               }
 381   4                                              if(keytmp==4)  //第三个按钮
 382   4                                              {
 383   5                                                      switch(attr)
 384   5                                                              { 
 385   6                                                                      case 0xff: if(show_status==1 || show_status==2) 
 386   6                                                                      led_on=~led_on;        //打开或关闭数码管显示
 387   6                                                                      break; 
 388   6                                                                      case 0x3f: if(show_status==0)         //如果正在设置闹钟
 389   6                                                                      { 
 390   7                                                                              if(cur_alarm_set==0)  cur_alarm_set=7; 
 391   7                                                                              else cur_alarm_set--;
 392   7                                                                      }
 393   6                                                                      else if(show_status==3)     //当前日期的"年"减1
 394   6                                                                      { 
 395   7                                                                              if(year==0)  
 396   7                                                                              year=49;  
 397   7                                                                              else year--; 
 398   7                                                                      }
 399   6                                                                              else if(show_status==4)     //当前时间的"时"减1
 400   6                                                                              { 
 401   7                                                                                      tmp=hour-1; 
 402   7                                                                                       if(tmp<0) hour=23;  
 403   7                                                                                       else  hour=tmp;  
 404   7                                                                              }
 405   6                                                                              break;
 406   6                                                                      case 0xcf: if(show_status==0)          //闹钟设置的"时"减1
 407   6                                                                                              { 
 408   7                                                                                                      tmp=alarm[cur_alarm_set].h-1;
 409   7                                                                                                      if(tmp<0)   
 410   7                                                                                                  alarm[cur_alarm_set].h=23;
 411   7                                                                                                      else   alarm[cur_alarm_set].h=tmp;
 412   7                                                                                              }
 413   6                                                                                              else if(show_status==3)  
 414   6                                                                                                      {
 415   7                                                                                                               month--;             //当前日期的"月"减1
 416   7                                                                                                               if(month==0)  
 417   7                                                                                                               month=12;
 418   7                                                                                                       }
 419   6                                                                                              else if(show_status==4) 
 420   6                                                                                                      { 
 421   7                                                                                                              tmp=min-1;           //当前时间的"分"减1
 422   7                                                                                                              if(tmp<0)
 423   7                                                                                                              min=59;   
 424   7                                                                                                              else  min=tmp;   }
 425   6                                                                                              break;
 426   6                                                                      case 0xf3: if(show_status==0)          //闹钟设置的"分钟"减1
 427   6                                                                                              { 
C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 8   

 428   7                                                                                                      tmp=alarm[cur_alarm_set].m-1;
 429   7                                                                                                      if(tmp<0)    alarm[cur_alarm_set].m=59;
 430   7                                                                                                      else         alarm[cur_alarm_set].m=tmp;
 431   7                                                                                              }
 432   6                                                                                              else if(show_status==3) 
 433   6                                                                                                       {
 434   7                                                                                                               day--;                 //当前日期的"日"减1
 435   7                                                                                                               if(day==0)  
 436   7                                                                                                               day=31; 
 437   7                                                                                                       }
 438   6                                                                                              else if(show_status==4) 
 439   6                                                                                                      { 
 440   7                                                                                                              tmp=sec-1;             //当前时间的"秒"减1
 441   7                                                                                                              count_down=4000;
 442   7                                                                                                              if(tmp<0) 
 443   7                                                                                                              sec=59;   
 444   7                                                                                                              else  sec=tmp;
 445   7                                                                                                       }
 446   6                                                                                              break;
 447   6                                                                      case 0xfd: if(show_status==0)     //切换周末标志
 448   6                                                                                              alarm_wk^=0x1<<cur_alarm_set;
 449   6                                                                                              break;
 450   6                                                                      case 0xfe: if(show_status==0)     //切换启用标志
 451   6                                                                                              alarm_en^=0x1<<cur_alarm_set;
 452   6                                                              }
 453   5                                              return;
 454   5                                              }
 455   4                                              if(keytmp==8 & led_on)    //第四个按钮,仅当数码管打开时有效
 456   4                                                      {
 457   5                                                              switch(attr)
 458   5                                                              {
 459   6                                                                      case 0xff: if(show_status==1)   //如果当前显示日期
 460   6                                                                                              show_status=3;       //切换到调准日期状态
 461   6                                                                                              else if(show_status==2)  //如果当前显示时间
 462   6                                                                                              show_status=4;      //切换到调准时间状态
 463   6                                                                                              attr=0x3f; break;   //第一?二个数码管闪烁
 464   6                                                                      case 0x3f: attr=0xcf; break;  //第三?四个数码管闪烁
 465   6                                                                      case 0xcf: attr=0xf3; break;  //第五?六个数码管闪烁case 0xf3: if(show_status==0) 
 466   6                                                                      case 0xf3: if(show_status==0) attr=0xfd;   //第七个数码管闪烁
 467   6                                                                                      else if(show_status==3) 
 468   6                                                                                              { 
 469   7                                                                                                      show_status=1; 
 470   7                                                                                                      attr=0xff; 
 471   7                                                                                              }  //恢复正常显示日期
 472   6                                                                                              else if(show_status==4) 
 473   6                                                                                                      { 
 474   7                                                                                                              show_status=2; 
 475   7                                                                                                              attr=0xff; 
 476   7                                                                                                      }  //恢复正常显示时间
 477   6                                                                                                              break;
 478   6                                                                      case 0xfd: if(show_status==0) attr=0xfe;     //第八个数码管闪烁
 479   6                                                                      break;
 480   6                                                                      case 0xfe: if(show_status==0) attr=0x3f;     //第一?二个数码管闪烁
 481   6                                                              }
 482   5                                                      }    // end of if(keytmp==4)
 483   4                                              }       // end of if(kp==0)
 484   3                                      }         // end of if(km==0)
 485   2                              }             // end of if(keytmp!=0)
 486   1      }
 487          
 488          
 489          //以下是主函数
C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 9   

 490          main()
 491          {
 492   1              unsigned char i;hour=23;  min=59;  sec=30;  year=8;  month=4;  day=2;
 493   1              count_down=4000;
 494   1              flash=0;  attr=0xff;   led_on=1;
 495   1              km=0; kp=0;  show_status=2;     //加电后显示当前时间
 496   1              new_alarm_info=0;  sound=0;   alarm_stop=0;   
 497   1              for(i=0;i<8;i++)           //从EEPROM中读入8个闹钟设置
 498   1                { 
 499   2      
 500   2                 alarm[2].h=0;//zm
 501   2                 alarm[2].m=0;//zm
 502   2      
 503   2      
 504   2                      alarm[i].h=myread(i*2);  
 505   2                      alarm[i].m=myread(i*2+1);
 506   2                }  
 507   1                  alarm_en=myread(i*2); 
 508   1                  alarm_wk=myread(i*2+1);
 509   1                  IE=0;  
 510   1                      IP=0;                  //禁止所有中断
 511   1                      TMOD=0x12;             //定时器0为模式2,定时器1为模式1
 512   1                      TH0=6;    
 513   1                      TL0=6;                 //定时器0为0.125ms
 514   1                      TH1=0x15; 
 515   1                      TL1=0xa0;              //定时器1为30ms
 516   1                      TR0=1;    TR1=1;       //启动定时器0和定时器1
 517   1                      ET0=1;  
 518   1                      ET1=1;    
 519   1                      EA=1;                              //开定时器0中断?定时器1中断和总中断
 520   1              while(1)
 521   1              {
 522   2                      if(led_on)
 523   2                      for(i=0;i<8;i++)
 524   2                      { 
 525   3                              //P2=0;
 526   3                              P2=0xff;//zm
 527   3                      if(flash || attr&(0x80>>i)) 
 528   3                              
 529   3                              { 
 530   4                                      P0=display[i];  //zm原无[i] ,显示不正常,均为0                  //
 531   4                                      P2=~(0x80>>i); DelayX1ms(1); 
 532   4                                      
 533   4                              } 
 534   3                      }
 535   2                      else  P2=0xff;//zmP2=0; 
 536   2                      if(new_alarm_info)
 537   2                      { 
 538   3                              P2=0;                      //暂时关闭数码管
 539   3                              new_alarm_info=0;          //写入EEPROM
 540   3                              for(i=0;i<8;i++)
 541   3                              {
 542   4                               mywrite(i*2,alarm[i].h); 
 543   4                               mywrite(i*2+1,alarm[i].m);
 544   4                          }  
 545   3                              mywrite(i*2,alarm_en);   
 546   3                              mywrite(i*2+1,alarm_wk);
 547   3                      }
 548   2              } 
 549   1      }


C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 10  

MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2217    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     39       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -