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

📄 dateandtime.lst

📁 本源程序是基于AT89C51单片机的
💻 LST
📖 第 1 页 / 共 3 页
字号:
 386   2      T_minute_set:LCD_GoToXY(6,2)          ; //定时器分设定
 387   2                         key=Key_Scan()             ; //键盘扫描  
 388   2                     if(key==1) goto T_ON_OFF   ;     //如果按下的是功能键(1号键),退出校正状态
 389   2                         if(key==2) Timer_minute++  ; //如果按下的是加1 键(2号键),分加1
 390   2                         if(Timer_minute==60)         //分上限循环       
 391   2                            Timer_minute=0          ;         
 392   2                         if(key==3) Timer_minute--  ; //如果按下的是减1 键(3号键),分减1
 393   2                         if(Timer_minute==-1)                 //分下限循环
 394   2                            Timer_minute=59         ;
 395   2                         CharToStr(Timer_minute)    ; //将校正后的分数据转换成相对应的ASCII码
 396   2                         Delay1ms(50)               ; //延时100ms 
 397   2                         LCD_Print(DATA)            ; //分显示刷新
 398   2                         goto T_minute_set          ; //分校正循环
 399   2       
 400   2       T_ON_OFF: LCD_GoToXY(9,2)            ; //定时器开/关设定
 401   2                 key=Key_Scan()             ; //键盘扫描  
 402   2                     if(key==1) goto T_song_set ; //如果按下的是功能键(1号键),转定时器分校正
 403   2                         if(key==2||key==3)               
 404   2                         Timer_ON_OFF=!Timer_ON_OFF ; //按下加1键或减1键,定时器开关标志(Timer_ON_OFF),
 405   2                                                                                  //取反,因为它只有开(1)和关(0)两种状态
 406   2                         Delay1ms(50)               ; //延时100ms 
 407   2                         if(Timer_ON_OFF==1) LCD_Print("1");//如果Timer_ON_OFF=1,则显示1,表示定时开
 408   2                     else  LCD_Print("0")       ; //如果Timer_ON_OFF=0,则显示0,表示定时关
 409   2                         
 410   2                         goto T_ON_OFF              ; //定时器开/关设定循环
 411   2      
 412   2      T_song_set:LCD_GoToXY(11,2)           ; //定时器提示铃声设定
 413   2                 key=Key_Scan()             ; //键盘扫描  
 414   2                     if(key==1) goto T_RET      ;     //如果按下的是功能键(1号键),退出定时器设定状态
 415   2                         if(key==2) Timer_Ring++    ; //如果按下的是加1 键(2号键),铃声编号加1
 416   2                         if(Timer_Ring==4)                
 417   2                            Timer_Ring=1            ;         
 418   2                         if(key==3) Timer_Ring--    ; //如果按下的是减1 键(3号键),铃声编号减1
 419   2                         if(Timer_Ring==0)
 420   2                            Timer_Ring=3            ;
 421   2                         CharToStr(Timer_Ring)      ; //将铃声编号转换成相对应的ASCII码
 422   2                         Delay1ms(50)               ; //延时100ms 
 423   2                         LCD_Print(DATA)                ; //铃声编号显示刷新
 424   2                         Ring()                     ;
 425   2                         goto T_song_set            ; //定时器提示铃声设定循环
 426   2      
 427   2          T_RET:Timer_set_sin=0             ; //退出定时器设定状态
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 8   

 428   2                        LCD_ShowMode(LCD_SHOW|LCD_NO_CORSOR|LCD_NO_FLASH); //关光标,光标不闪烁
 429   2                }
 430   1              Timer_Show_sin=0                  ; //退出定时器显示状态                                                              
 431   1       }  
 432          /***主程序**************************************************************************/
 433          void main(void)
 434          { float i=0; unsigned char keys ;
 435   1      Delay1ms(250)                   ; 
 436   1      LCD_Initial()                   ;       //LCD1602初始化
 437   1      Delay1ms(100)                   ;
 438   1      LCD_Print("    Welcome")        ;       //开机画面
 439   1      Delay1ms(50)                    ;
 440   1      LCD_GoToXY(0,2)                 ;
 441   1      LCD_Print("   HangKaiKun")      ;
 442   1      Delay1ms(250)                   ;           //延时250ms
 443   1      Delay1ms(250)                   ;       //延时250ms
 444   1      Delay1ms(250)                   ;           //延时250ms
 445   1      Delay1ms(250)                   ;           //延时250ms
 446   1      Delay1ms(250)                   ;           //延时250ms
 447   1      LCD_Write(LCD_COM,LCD_CLEAR)    ;       //清屏
 448   1      IT1=1                           ;       //置INT1为边沿触发模式
 449   1      IT0=1                           ;       //置INT0为边沿触发模式
 450   1      PX1=1                           ;       //置INT1为高优先级
 451   1      IE=0x84                         ;           //INT1开中
 452   1      while(1)
 453   1      {keys=Key_Scan()                ;       //键盘扫描 
 454   2           if(keys==1)                                        //若为功能键,转校时程序
 455   2              Set_TimeAndDate()       ;     
 456   2               if(keys==2)                                            //若为加1 键,转定是显示程序
 457   2                  Timer_Show_Set()        ;
 458   2               if(keys==4&&!Speak_sin)                        //若为报时键,转语音报时程序
 459   2                  SpeakTime()             ;
 460   2               if(Timer_sin)                                  //判断是否响铃
 461   2                  Ring()                  ;           //是,则转响铃程序
 462   2       
 463   2       while(Temperature_sin)
 464   2            {float i                  ;
 465   3             i=ReadTemperature()      ;       //读取温度值
 466   3             IntToStr(i)              ;       //将温度值转换成相对应的ASCII码
 467   3             LCD_GoToXY(9,2)          ;               //定位到温度显示区
 468   3             LCD_Print(temp)          ;               //显示温度
 469   3             Temperature_sin=0        ;               //表示温度处理完毕
 470   3            } 
 471   2        }
 472   1      }
 473          /***中断1服务程序(用于完成计时和日历转变和刷新,以及判断定时是否已到)***************/
 474          void int1(void) interrupt 2 using 1
 475          {       
 476   1           second++                               ; //秒加1
 477   1               led_on--                               ; //LCD背光时间值减1
 478   1               if((second%2==0)&&!Timer_sin)                    //如果不在定时器显示或设计状态,则每隔
 479   1                        Temperature_sin=1                 ; //两秒启动一次温度检测
 480   1               if(led_on==-1)                                                   //LCD背光灯亮的时间结束,关闭LCD背光灯
 481   1                     led_on=0                         ; 
 482   1               if(second==60)                                                   //若秒满60,则秒置0,分加1
 483   1                 { second=0                           ;
 484   2                   minute++                           ;
 485   2                       if(minute==60)                                   //若分满60,则分置0,时加1
 486   2                         { minute=0                       ;
 487   3                           hour++                         ; 
 488   3                               if(hour==24)                                     //若时满24,则时置0,日和星期加1
 489   3                                 { hour=0                     ;
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 9   

 490   4                                   week++                     ;
 491   4                                       day++                      ;
 492   4                                       if(week==8)                              //若星期满8,则星期置1,
 493   4                                          week=1                  ;            
 494   4                                   if(day==days)                                //若日满28(二月)、29(润年二月、30(月小)
 495   4                                     { day=1                  ; //      31(月大),则日置1,月加1
 496   5                                       month++                ;
 497   5                                               Momth_Days(month)      ; //确定校正后,月的天数
 498   5                                       if(month==13)                    //若月满13,则月置1
 499   5                                             { month=1            ;
 500   6                                               year++             ;
 501   6                                                       Momth_Days(month)  ; //确定校正后,月的天数
 502   6                                                       Leap_Year(year)    ; //判断润年
 503   6                                               if(year==100)            //若年满100,则年置0
 504   6                                                       year=0         ;  
 505   6                                                               Leap_Year(year); //判断润年
 506   6                                                      }
 507   5                                              }
 508   4                                      }
 509   3                              }
 510   2                      }
 511   1               
 512   1           if(~Timer_Show_sin)
 513   1               {
 514   2                 if((Timer_hour==hour)&&(Timer_minute==minute)&&second==0)//判断定时是否已到
 515   2                  if(Timer_ON_OFF) Timer_sin=1;
 516   2                 LCD_GoToXY(0,1)    ;             //年刷新
 517   2                 LCD_Print("20")    ;
 518   2                 CharToStr(year)    ;             //年数据转成ASCII码
 519   2                 LCD_Print(DATA)    ;
 520   2                 LCD_Print("-")     ;             //在年显示后面显示“-”
 521   2                 CharToStr(month)   ;             //月数据转成ASCII码
 522   2                 LCD_Print(DATA)    ;                         //月刷新
 523   2                 LCD_Print("-")     ;             //在月显示后面显示“-” 
 524   2                 CharToStr(day)     ;             //日数据转成ASCII码
 525   2             LCD_Print(DATA)    ;                             //日刷新
 526   2                 WeekToStr(week)    ;             //星期数据转成ASCII码
 527   2                 LCD_GoToXY(12,1)   ;                         //定位到星期显示区
 528   2             LCD_Print(Week_Str);                             //星期刷新
 529   2                 CharToStr(hour)    ;             //时数据转成ASCII码
 530   2                 LCD_GoToXY(0,2)    ;                         //定位到时显示区
 531   2                 LCD_Print(DATA)    ;                         //时刷新
 532   2                 LCD_Print(":")     ;             //在小时显示后显示“:”
 533   2                 CharToStr(minute)  ;             //分数据转成ASCII码
 534   2                 LCD_Print(DATA)    ;                         //分刷新
 535   2                 LCD_Print(":")     ;             //在分显示后显示“:” 
 536   2                 CharToStr(second)  ;             //秒数据转成ASCII码
 537   2                 LCD_Print(DATA)    ;                         //秒刷新
 538   2               }
 539   1      }
 540          /***中断0服务程序(完成发音任务)*****************************************************/
 541          void int0(void) interrupt 0 using 2
 542          {        
 543   1               if(Timer_sin&&!Speak_sin)              //
 544   1                      { Delay1ms(50)          ;       //
 545   2                        Play=0                ;       //放音
 546   2                        Delay1ms(10)          ;       //延时10ms
 547   2                        Play=1                            ;
 548   2                       }                                
 549   1               if(Speak_sin)    
 550   1                 { if(Speak[Number]==0xff)            //报时时,遇到'\0',报时结束
 551   2                    { EX0=0                       ;           //
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 10  

 552   3                          Number=0            ;               //
 553   3                              Speak_sin=0         ;           //
 554   3                         }     
 555   2                   else 
 556   2                         { P1=Speak[Number]   ;               //
 557   3                           Delay1ms(50)       ;               //
 558   3                           Play=0             ;               //放音
 559   3                           Delay1ms(10)       ;       //延时10ms
 560   3                           Play=1             ;               //
 561   3                           Number++           ;               //下一个音
 562   3                              }
 563   2                      } 
 564   1                                 
 565   1      }    
 566                            
*** WARNING C316 IN LINE 566 OF DateAndTime.c: unterminated conditionals


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2314    ----
   CONSTANT SIZE    =     84    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     52      15
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      6       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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