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

📄 dateandtime.lst

📁 本源程序是基于AT89C51单片机的
💻 LST
📖 第 1 页 / 共 3 页
字号:
 189   2                  }
 190   1               if((a!=0&&a!=1)&&b!=0)             //number的个位不为0,十位不为0和1时的读音
 191   1                  {Voice[0]=VoiceTab[a];          //
 192   2                       Voice[1]=0x28       ;          //
 193   2                       Voice[2]=VoiceTab[b];          //
 194   2                       Voice[3]=0xff       ;          //
 195   2                       } 
 196   1      }
 197          /***语音报时************************************************************************/
 198          void SpeakTime(void)                    //语音报时函数
 199          {
 200   1           unsigned char j,i=0     ;
 201   1               Speak[i]=0x3c           ;          //报时前凑音
 202   1               i++                     ; 
 203   1               Speak[i]=0x2c           ;          //“现在时刻”
 204   1               NumberToVoice(hour)     ;          //“小时”
 205   1               for(j=0;j<5;j++)
 206   1                  { i++                                ;
 207   2                        if(Voice[j]==0xff) 
 208   2                          { Speak[i]=0x34  ;          //“点”
 209   3                                break;
 210   3                              } 
 211   2                          Speak[i]=Voice[j];
 212   2                      }                                        
 213   1               NumberToVoice(minute)   ;         //“分钟”
 214   1               for(j=0;j<5;j++)               
 215   1                  { i++                ;
 216   2                        if(Voice[j]==0xff) 
 217   2                              { Speak[i]=0x38  ;                  //“分”
 218   3                                break          ;
 219   3                               }                
 220   2                        Speak[i]=Voice[j]  ;
 221   2                       }
 222   1               i++                     ;
 223   1               Speak[i]=0xff           ;          //报时结束标志     
 224   1               EX0=1                   ;          //INT0开中
 225   1               IE0=1                   ;          //启动报时
 226   1               Speak_sin=1             ;          //报时标志置1
 227   1      }
 228          /***闹铃****************************************************************************/
 229          void Ring(void)            
 230          {        
 231   1               if(Timer_Ring==1)                                      //铃声1
 232   1                  P1=0x44              ;
 233   1               if(Timer_Ring==2)                          //铃声2
 234   1                  P1=0x58              ;
 235   1               if(Timer_Ring==3)                          //铃声3
 236   1                  P1=0x70              ;
 237   1               Timer_sin=1             ;          //表示进入闹铃状态
 238   1               EX0=1                   ;                      //INT0开中
 239   1               IE0=1                   ;                      //启动闹铃
 240   1      }
 241          /***日历和时间调整******************************************************************/
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 5   

 242          void Set_TimeAndDate(void)
 243          { 
 244   1                         unsigned char key; 
 245   1                     EX1=0;                                       //关闭INT1中断,停止计时
 246   1                 LCD_ShowMode(LCD_SHOW|LCD_CORSOR|LCD_FLASH); //开光标,光标闪烁
 247   1       Year_set: LCD_GoToXY(2,1)            ; //年校正  
 248   1                         key=Key_Scan()             ; //键盘扫描   
 249   1                     if(key==1) goto Month_set  ;     //如果按下的是功能键(1号键),转月校正
 250   1                         if(key==2) year++          ; //如果按下的是加1 键(2号键),年加1
 251   1                         if(year==100)                //年上限循环
 252   1                            year=0                  ;         
 253   1                         if(key==3) year--          ; //如果按下的是减1 键(3号键),年减1
 254   1                         if(year==-1)                             //年下限循环
 255   1                            year=99                 ;
 256   1                         Leap_Year(year)                        ; //判断润年
 257   1                         LCD_GoToXY(2,1)            ;
 258   1                         CharToStr(year)            ; //将校正后的年数据转换成相对应的ASCII码
 259   1                         Delay1ms(50)               ; //延时100ms
 260   1                         LCD_Print(DATA)            ; //年显示刷新
 261   1                         goto Year_set              ; //年校正循环
 262   1      
 263   1      Month_set: LCD_GoToXY(5,1)            ; //月校正
 264   1                     key=Key_Scan()             ; //键盘扫描  
 265   1                     if(key==1) goto Day_set    ; //如果按下的是功能键(1号键),转日校正
 266   1                         if(key==2) month++         ; //如果按下的是加1 键(2号键),月加1
 267   1                         if(month==13)                //月上限循环
 268   1                            month=1                 ;         
 269   1                         if(key==3) month--         ; //如果按下的是减1 键(3号键),月减1
 270   1                         if(month==0)                                 //月下限循环
 271   1                            month=12                ;
 272   1                         CharToStr(month)           ; //将校正后的月数据转换成相对应的ASCII码
 273   1                         Delay1ms(50)              ;  //延时100ms
 274   1                         LCD_Print(DATA)            ; //月显示刷新
 275   1                         Momth_Days(month)          ; //确定校正后,月的天数
 276   1                         goto Month_set             ; //月校正循环
 277   1      
 278   1        Day_set: LCD_GoToXY(8,1)                        ; //日校正
 279   1                         key=Key_Scan()             ; //键盘扫描  
 280   1                     if(key==1) goto Week_set   ;     //如果按下的是功能键(1号键),转时校正
 281   1                         if(key==2) day++           ; //如果按下的是加1 键(2号键),日加1         
 282   1                         if(day==days)                //日上限循环
 283   1                            day=1                   ;
 284   1                         if(key==3) day--           ; //如果按下的是减1 键(3号键),日减1
 285   1                         if(day==0)                               //日下限循环
 286   1                            day=days-1              ;
 287   1                         CharToStr(day)             ; //将校正后的日数据转换成相对应的ASCII码
 288   1                         Delay1ms(50)               ; //延时100ms  
 289   1                         LCD_Print(DATA)            ; //日显示刷新
 290   1                         goto Day_set               ; //日校正循环
 291   1      
 292   1       Week_set: LCD_GoToXY(12,1)               ; //星期调整
 293   1                         key=Key_Scan()             ; //键盘扫描  
 294   1                     if(key==1) goto Hour_set   ;     //如果按下的是功能键(1号键),转时校正
 295   1                         if(key==2) week++          ; //如果按下的是加1 键(2号键),星期加1         
 296   1                         if(week==8)                  //星期上限循环
 297   1                            week=1                  ;         
 298   1                         if(key==3) week--          ; //如果按下的是减1 键(3号键),星期减1
 299   1                         if(week==0)                              //星期下限循环
 300   1                            week=7                  ; 
 301   1                         WeekToStr(week)            ; //将校正后的星期数据转换成相对应的ASCII码
 302   1                         Delay1ms(50)               ; //延时100ms 
 303   1                         LCD_GoToXY(12,1)           ; //定位到星期在LCD屏上的显示位置
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 6   

 304   1                         LCD_Print(Week_Str)        ; //星期显示刷新
 305   1                         goto Week_set              ; //日和星期校正循环
 306   1      
 307   1       Hour_set: LCD_GoToXY(0,2)            ; //时校正
 308   1                 key=Key_Scan()             ; //键盘扫描  
 309   1                     if(key==1) goto Minute_set ;     //如果按下的是功能键(1号键),转分校正
 310   1                         if(key==2) hour++          ; //如果按下的是加1 键(2号键),时加1
 311   1                         if(hour==24)                 //时上限循环
 312   1                            hour=0                  ;         
 313   1                         if(key==3) hour--          ; //如果按下的是减1 键(3号键),时减1
 314   1                         if(hour==-1)                             //时下限循环
 315   1                            hour=23                 ;
 316   1                         CharToStr(hour)            ; //将校正后的时数据转换成相对应的ASCII码
 317   1                         Delay1ms(50)               ; //延时100ms
 318   1                         LCD_Print(DATA)            ; //时显示刷新
 319   1                         goto Hour_set              ; //时校正循环
 320   1      
 321   1      Minute_set:LCD_GoToXY(3,2)            ; //分校正
 322   1                 key=Key_Scan()             ; //键盘扫描  
 323   1                     if(key==1) goto RET        ;     //如果按下的是功能键(1号键),退出校正状态
 324   1                         if(key==2) minute++        ; //如果按下的是加1 键(2号键),分加1
 325   1                         if(minute==60)               //分上限循环 
 326   1                            minute=0                ;         
 327   1                         if(key==3) minute--        ; //如果按下的是减1 键(3号键),分减1
 328   1                         if(minute==-1)                           //分下限循环
 329   1                            minute=59               ;
 330   1                         CharToStr(minute)          ; //将校正后的分数据转换成相对应的ASCII码
 331   1                         Delay1ms(50)               ; //延时100ms 
 332   1                         LCD_Print(DATA)            ; //分显示刷新
 333   1                         goto Minute_set            ; //分校正循环
 334   1      
 335   1                RET: EX1=1                      ; //开INT1中断,开始计时
 336   1                 LCD_ShowMode(LCD_SHOW|LCD_NO_CORSOR|LCD_NO_FLASH); //关光标,光标不闪烁                 
 337   1      }          
 338          /***定时器显示或设定****************************************************************/
 339          void Timer_Show_Set(void)
 340          {
 341   1           unsigned char key                ;
 342   1               unsigned char w=10               ;
 343   1           bit Timer_set_sin=0              ; //定时器设定标志,为1表示正处于定时器设定状态
 344   1               Timer_Show_sin=1                 ; //表示现在已处于定时器显示状态
 345   1               LCD_Write(LCD_COM,LCD_CLEAR)     ; //清屏
 346   1               Delay1ms(50);
 347   1               LCD_Print("     Timer")          ; //在显示屏的第一行中间显示“Timer"
 348   1               CharToStr(Timer_hour)                    ;
 349   1               LCD_GoToXY(3,2)                  ; //定位到显示屏的第二行第四个字符
 350   1               LCD_Print(DATA)                  ; //显示定时器的时钟 
 351   1               LCD_Print(":")                   ; //在定时器的时钟后显示“:”
 352   1               CharToStr(Timer_minute)          ;
 353   1               LCD_Print(DATA)                  ; //显示定时器的分钟
 354   1               LCD_Print(" ")                   ; //在定时器的分钟后空一格
 355   1               if(Timer_ON_OFF==1) LCD_Print("1");//如果Timer_ON_OFF=1,则显示1,表示定时开
 356   1               else
 357   1                  LCD_Print("0")                ; //如果Timer_ON_OFF!=1,则显示0,表示定时关
 358   1               LCD_Print(" ")                   ; //空一格
 359   1               CharToStr(Timer_Ring)            ; //将歌曲编号转换成相对应的ASCII码
 360   1               LCD_Print(DATA)                  ; //显示歌曲编号
 361   1               while(--w)                         //在定时器显示状态下,大约在2s内没有按下
 362   1                  {                               //功能键,就返回正常显示状态
 363   2                        Delay1ms(100)               ; 
 364   2                        key=Key_Scan()              ;
 365   2                        if(key==1) 
C51 COMPILER V7.50   DATEANDTIME                                                           11/16/2008 10:58:45 PAGE 7   

 366   2                        {Timer_set_sin=1;break;}
 367   2                       }
 368   1      
 369   1           if(Timer_set_sin)                  //如果Timer_set_sim为1,则进入定时器设定状态 
 370   1                 {  LCD_ShowMode(LCD_SHOW|LCD_CORSOR|LCD_FLASH);      //开光标,光标闪烁
 371   2      T_hour_set:LCD_GoToXY(3,2)            ; //定时器时设定
 372   2                         key=Key_Scan()             ; //键盘扫描  
 373   2                     if(key==1) goto T_minute_set ;//如果按下的是功能键(1号键),转定时器分设定
 374   2                         if(key==2) Timer_hour++    ; //如果按下的是加1 键(2号键),定时器时加1
 375   2                         if(Timer_hour==24)           //时上限循环     
 376   2                            Timer_hour=0            ;         
 377   2                         if(key==3) Timer_hour--    ; //如果按下的是减1 键(3号键),定时器时减1
 378   2                         if(Timer_hour==-1)                   //时下限循环
 379   2                            Timer_hour=23           ;
 380   2                         LCD_GoToXY(3,2)            ;
 381   2                         CharToStr(Timer_hour)      ; //将校正后的定时器时数据转换成相对应的ASCII码
 382   2                         Delay1ms(50)               ; //延时100ms
 383   2                         LCD_Print(DATA)            ; //定时器时显示刷新
 384   2                         goto T_hour_set            ; //定时器时设定循环
 385   2                                  

⌨️ 快捷键说明

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