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

📄 clock.lst

📁 电子中开发程序 有图
💻 LST
📖 第 1 页 / 共 3 页
字号:
 183   3                      if(year%4==0) tmp_days=tmp_days+29;
 184   3                      else   tmp_days=tmp_days+28;
 185   3              }
 186   2              tmp_days=tmp_days+day-1; 
 187   2              weekday=(weekday+tmp_days%7)%7+1;
 188   2              return;
 189   2      }
 190   1      
 191   1       /***  查询是否有闹钟时间项符合触发条件 ***/
 192   1      if(count_down==2500)
 193   1      {
 194   2              if((alarm_stop || sound) && alarm[cur_alarm_active].m!=min)  //触发后1分钟
 195   2              {
 196   3                      alarm_stop=0; 
 197   3                      sound=0;
 198   3          }       //自动关蜂鸣器
 199   2              if(sound==0 && alarm_stop==0)           //没有已触发的闹钟项
 200   2              for(tmp=0;tmp<8;tmp++)                              //则查询8个闹钟项内是否有符合条件的
 201   2              {
 202   3              if(((alarm_en>>tmp)&1)==0) continue;   //该闹钟项不启用
 203   3              if(((alarm_wk>>tmp)&1)==1)              //该闹钟项周末有效
 204   3              {
 205   4                      if(weekday!=6 && weekday!=7) continue;
 206   4              }//不是星期六或星期天
 207   3              else
 208   3              { 
 209   4                      if(weekday==6 || weekday==7) continue;
 210   4              }
 211   3              if(alarm[tmp].h==hour && alarm[tmp].m==min) //比较当前时间
 212   3              { 
 213   4                      sound=1;  cur_alarm_active=tmp; break; 
 214   4              }  //与该闹钟项的时间
 215   3       }
 216   2       return;
 217   2      }
 218   1              if(count_down==0)      //过了一秒钟
 219   1              { 
 220   2                      count_down=4000;
 221   2                      sec++;
 222   2                      if(sec==60)
 223   2                      {
 224   3                              sec=0;
 225   3                              min++;
 226   3                              if(min==60)
 227   3                              {
 228   4                                      min=0; hour++;
 229   4                                      if(hour==24)
 230   4                                      {
 231   5                                              hour=0; 
 232   5                                              day++;
 233   5                                              switch(day)
 234   5                                              {
 235   6                                                      case 29: if(month==2 && year%4)    
 236   6                                                                       { 
 237   7                                                                              day=1; 
 238   7                                                                              month=3; 
 239   7                                                                        } break; 
 240   6                                                      case 30: if(month==2 && year%4==0) 
 241   6                                                               { 
C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 5   

 242   7                                                                              day=1; 
 243   7                                                                              month=3; 
 244   7                                                                       } break; 
 245   6                                                      case 31:if(month==4 || month==6 || month==9 || month==11)  
 246   6                                                                       { 
 247   7                                                                              day=1; 
 248   7                                                                              month++; 
 249   7                                                                       } break; 
 250   6                                                      case 32: day=1;   month++;
 251   6                                                                      if(month==13) 
 252   6                                                                      { 
 253   7                                                                              month=1; 
 254   7                                                                              year++; 
 255   7                                                                      }
 256   6                                              }
 257   5                                      }
 258   4                              }
 259   3                      }
 260   2              }
 261   1      }
 262          
 263          
 264          //以下是定时器2中断,用于按键扫描
 265          void Timer1ISR(void) interrupt 3 using 2 
 266          {
 267   1              unsigned char keytmp;
 268   1              char tmp;
 269   1              TH1=0x15; TL1=0xa0;      // 每30ms中断一次
 270   1      /***  当前显示的内容 ***/
 271   1              if(show_status==0)   //当前正在设置闹钟项
 272   1              {
 273   2                      display[0]=cur_alarm_set;
 274   2                      display[1]=0xf;
 275   2                      display[2]=alarm[cur_alarm_set].h/10;
 276   2                      display[3]=alarm[cur_alarm_set].h%10;
 277   2                      display[4]=alarm[cur_alarm_set].m/10;
 278   2                      display[5]=alarm[cur_alarm_set].m%10;
 279   2                      display[6]=(alarm_wk>>cur_alarm_set)&1; 
 280   2                      display[7]=(alarm_en>>cur_alarm_set)&1;
 281   2              }
 282   1              if(show_status==1 || show_status==3)         //当前显示或设置日期
 283   1              {
 284   2                      display[0]=year/10;
 285   2                      display[1]=year%10; 
 286   2                      display[2]=month/10;   
 287   2                      display[3]=month%10; 
 288   2                      display[4]=day/10;
 289   2                      display[5]=day%10;
 290   2                      display[6]=0xf; 
 291   2                      display[7]=weekday;
 292   2              }
 293   1               if(show_status==2 || show_status==4)         //当前显示或设置时间
 294   1              {
 295   2                      display[0]=hour/10;
 296   2                      display[1]=hour%10;
 297   2                      display[2]=min/10;
 298   2                      display[3]=min%10;
 299   2                      display[4]=sec/10;
 300   2                      display[5]=sec%10;
 301   2                      display[6]=0xf;
 302   2                      display[7]=0xf;
 303   2              }   //最后两后无显示
C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 6   

 304   1      
 305   1       /***  按键扫描及处理  ***/
 306   1      
 307   1              keytmp=~(P1) & 0x0f;
 308   1              if(keytmp==0)  //zm无按键
 309   1               { 
 310   2                       km=0; 
 311   2                       kp=0;
 312   2               }  
 313   1              else { 
 314   2                              if(km==0)  
 315   2                               km=1;
 316   2                              else{ 
 317   3                                      if(kp==0)
 318   3                                      {
 319   4                                              kp=1;
 320   4                                              if(keytmp==1)   //第一个按钮
 321   4                                              { 
 322   5                                                      if(sound) 
 323   5                                                      { 
 324   6                                                              alarm_stop=1; sound=0;
 325   6                                                      }  //如果闹钟正响,按此键停止
 326   5                                                      else if((show_status==1 || show_status==2) && led_on)  //正显示日期或时间
 327   5                                                      {
 328   6                                                              show_status=0;  cur_alarm_set=0;  attr=0x3f;
 329   6                                                  }  //进入闹钟设置
 330   5                                                      else if(show_status==0)                //如正在设置闹钟时间项
 331   5                                                      {
 332   6                                                               show_status=2;  new_alarm_info=1; attr=0xff; 
 333   6                                                  }  //返回当前时间显示
 334   5                                              return;
 335   5                                              }
 336   4                                              if(keytmp==2 && led_on)    //第二个按钮,仅当数码管打开时有效
 337   4                                              {
 338   5                                                      switch(attr)
 339   5                                                      { 
 340   6                                                              case 0xff: if(show_status==1) show_status=2;   //在显示时间与日期间切换
 341   6                                                                                 else if(show_status==2) show_status=1;   break;  
 342   6                                                              case 0x3f: if(show_status==0) cur_alarm_set=(cur_alarm_set+1)%8;
 343   6                                                                                 else if(show_status==3) 
 344   6                                                                                 year=(year+1)%50;       //当前日期的"年"加1,到50时归零。
 345   6                                                                                 else if(show_status==4) 
 346   6                                                                                 hour=(hour+1)%24;       //当前时间的"时"加1,到24时归零。
 347   6                                                                                 break;  
 348   6                                                              case 0xcf: if(show_status==0)     //闹钟设置的"时"加1
 349   6                                                                                 alarm[cur_alarm_set].h=(alarm[cur_alarm_set].h+1)%24;
 350   6                                                                                 else if(show_status==3) 
 351   6                                                                              { 
 352   7                                                                                              month++;           //当前日期的"月"加1
 353   7                                                                                              if(month==13)
 354   7                                                                                          month=1; 
 355   7                                                                                      } 
 356   6                                                                                 else if(show_status==4) 
 357   6                                                                                      min=(min+1)%60;    //当前时间的"分"加1
 358   6                                                                                          break;  
 359   6                                                              case 0xf3: if(show_status==0) 
 360   6                                                                                 alarm[cur_alarm_set].m=(alarm[cur_alarm_set].m+1)%60;
 361   6                                                                                 else if(show_status==3) 
 362   6                                                                                              {
 363   7                                                                                                      day++;         //当前日期的"日"加1
 364   7                                                                                                      if(day==32) 
 365   7                                                                                                      day=1;
C51 COMPILER V8.06   CLOCK                                                                 04/02/2008 17:44:13 PAGE 7   

 366   7                                                                                           }
 367   6                                                                                              else if(show_status==4) 
 368   6                                                                                              {
 369   7                                                                                                      count_down=8000; 
 370   7                                                                                                      sec=(sec+1)%60; 
 371   7                                                                                              }        //当前时间的"秒"加1
 372   6                                                                                                      break; 
 373   6                                                              case 0xfd: if(show_status==0)

⌨️ 快捷键说明

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