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

📄 2051.lst

📁 基于STC89C2051单片机的电子钟
💻 LST
📖 第 1 页 / 共 3 页
字号:
 360   1              {
 361   2                      //第1次按键
 362   2                      case 1:
 363   2                              KeyTimeOutFlag=1;                               //启动按键超时计数
 364   2                              TimingSetFlag=1;
 365   2                              break;
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 7   

 366   2                      //第2次按键
 367   2                      case 2:
 368   2                              TimingDisSelectFlag=1;                  //显示第2定时时间
 369   2                              TimingFunFlag=1;
 370   2                              break;
 371   2                      //第3次按键进入闹铃模式 
 372   2                      case 3:
 373   2                              KeyTimeOutFlag=0;                               //关闭按键超时计数
 374   2                              TimingSetFlag=1;                                //进入闹铃设置模式
 375   2                              TimingDisSelectFlag=0;
 376   2                              UnpressKeyTimeFlag=1;                   //启动无按键计时
 377   2                              SetModeFlag=1;
 378   2                              break;                  
 379   2                      //第4次按键时数跳变(闹铃模式)
 380   2                      case 4:
 381   2                              UnpressKeyTimeFlag=0;
 382   2                              j=&TimeData[Hour_n1];   //指针指向时间单元
 383   2                              ChangeData(j);                          //调用增量函数改变时间值
 384   2                              break;
 385   2                      //第5次按键分数跳变(闹铃模式)
 386   2                      case 5:
 387   2                              j=&TimeData[Minute_n1];
 388   2                              ChangeData(j);
 389   2                              break;
 390   2                      //第6次按键等待确认
 391   2                      case 6:
 392   2                              UnpressKeyTimeFlag=1;                   //启动无按键计时
 393   2                              break;
 394   2                      //第7次按进入第2定时时间设置
 395   2                      case 7:
 396   2                              TimingDisSelectFlag=1;
 397   2                              break;
 398   2                      //
 399   2                      case 8:
 400   2                              UnpressKeyTimeFlag=0;
 401   2                              j=&TimeData[Hour_n2];   //指针指向时间单元
 402   2                              ChangeData(j);                          //调用增量函数改变时间值
 403   2                              break;
 404   2                      //第9次按键分数跳变(闹铃模式)
 405   2                      case 9:
 406   2                              j=&TimeData[Minute_n2];
 407   2                              ChangeData(j);
 408   2                              break;
 409   2                      //
 410   2                      case 10:
 411   2                              UnpressKeyTimeFlag=1;           //启动无按键计时
 412   2                              break;                  
 413   2                      //第11次按键完成并返回正常模式  
 414   2                      case 11:
 415   2                              ClearFlag();                                    
 416   2                              break;
 417   2                      //      
 418   2                      case 12:                                
 419   2                              break;
 420   2                      //长按键后键值=13进入校时模式
 421   2                      case 13:
 422   2                              SetModeFlag=1;                          
 423   2                              break;                                  
 424   2                      //校时模式第1次按键时数跳变                                                                     
 425   2                      case 14:
 426   2                              j=&TimeData[Hour];
 427   2                              ChangeData(j);
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 8   

 428   2                              break;
 429   2                      //校时模式第2次按键分数跳变
 430   2                      case 15:
 431   2                              j=&TimeData[Minute];
 432   2                              ChangeData(j);
 433   2                              break;
 434   2                      //校时模式第3次按键等待对时
 435   2                      case 16:
 436   2                              TimeData[Second]=0;
 437   2                              break;                  
 438   2                      //校时模式第4次按键完成并返回正常模式
 439   2                      case 17:
 440   2                              TimeSetFlag=0;
 441   2                              SetModeFlag=0;
 442   2                              KeyVal=0;
 443   2                              break;                                          
 444   2                      default:
 445   2                              break;                                          
 446   2              }
 447   1      }
 448          
 449          //函数功能:设置模式时自动增量改变所设项目
 450          void ChangeData(uchar *x)
 451          {               
 452   1              uchar i;
 453   1      
 454   1              i=*x;                                                   //取出数据
 455   1                                      
 456   1              if(AddFlag)                                             //检测半秒增量标志位
 457   1              {
 458   2                      AddFlag=0;
 459   2                      if((KeyVal==4)||(KeyVal==8)||(KeyVal==14))
 460   2                      {
 461   3                              if(++i>=24)                             //时数增加
 462   3                                      i=0;
 463   3                      }
 464   2                      else if(++i>=60)                //分数增加
 465   2                              i=0;                            
 466   2              }
 467   1              *x=i;                                                   //保存数据
 468   1      }       
 469          
 470          //函数功能:清各个相关控制位返回正常模式
 471          void ClearFlag(void)
 472          {
 473   1              UnpressKeyTimeFlag=0;
 474   1              KeyTimeOutFlag=0;
 475   1              SetModeFlag=0;
 476   1              TimingSetFlag=0;
 477   1              TimingDisSelectFlag=0;
 478   1              KeyVal=0;                                                       //返回正常模式  
 479   1      }
 480                  
 481                  
 482          //函数功能:T0中断服务子程序(产生秒脉冲等)
 483          
 484          void T0_intermit(void) interrupt 1 
 485          {
 486   1              uint TimeT0;
 487   1      
 488   1              TH0=(-CYCLE0)/256;
 489   1              TL0=(-CYCLE0)%256;
C51 COMPILER V9.01   2051                                                                  09/19/2012 10:47:35 PAGE 9   

 490   1              
 491   1              TimeT0++;
 492   1                      
 493   1              if(TimeT0%10==0)
 494   1              {
 495   2                      AddFlag=1;                              //设置模式的增量标志位置1
 496   2                      if(!TimeSetFlag)
 497   2                              SecondFlashFlag=!SecondFlashFlag;       //秒闪脉冲
 498   2              }
 499   1                      
 500   1              if(TimeT0>=20)                  //累计20次为1秒
 501   1              {
 502   2                      TimeT0=0;
 503   2                      if(!TimeSetFlag)
 504   2                              SecondFlag=1;           //秒位置1
 505   2              }
 506   1      }
 507          //函数功能:T1中断服务子程序(产生闹铃声响)
 508          //产生宽度为100ms和600ms的方波
 509          void T1_intermit(void) interrupt 3 
 510          {
 511   1              uchar TimeT1;
 512   1                                      
 513   1              TH1=(-CYCLE1)/256;
 514   1              TL1=(-CYCLE1)%256;
 515   1              
 516   1              TimeT1++;
 517   1              
 518   1              if(TimeT1%5==0)
 519   1                      BeeMusicFlag=!BeeMusicFlag;             //100ms
 520   1                      
 521   1              if(TimeT1>=30)
 522   1              {
 523   2                      TimeT1=0;
 524   2                      BeeSpaceFlag=!BeeSpaceFlag;             //600ms
 525   2              }               
 526   1      }
 527          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    884    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =     14    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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