ht1380_time3.lst

来自「自己的平时一些制作 现在整理一下 与大家一起分享」· LST 代码 · 共 430 行 · 第 1/2 页

LST
430
字号
 200          //第一个按键用于调整到较时状态并且可以切换要修改的位,第二个按键用于加1..
 201          //..第三个按键用于减,第四个按键用于确认回到正常显示状态。
 202          //这里就不调整年月日了.大家可以考虑一下如何调整
 203          
 204          void main (void)
 205          {
 206   1       unsigned char keyboard,keyboard1;         //键值变量
 207   1       unsigned char state=0,b;          //状态指示 =1较时状蹋   b显为后来beep延时用
 208   1       unsigned char i,distem,w=3;                //变量
 209   1       year=07;month=03;day=0x05;hour=0x07;minute=0x16;second=13; //软件预设时间参数
 210   1        callhour=27,callminute=0,callsecond=0;
 211   1       beep=1;
 212   1       ht1380_rest=0;ht1380_sclk=0;   //选中时钟芯片
 213   1       read_time();                    //设置时间
 214   1       Init_Timer();                  //初始化定时器及全局变量
 215   1       number=0;                      
 216   1       distime=1;                    //冒号显示                  
 217   1       while(1)
 218   1           {  
 219   2                      distime=~distime;  // 闪动冒号    
 220   2                      read_time();      //读时间
 221   2                      if(state==0)      //state=0 正常显示状态
 222   2              {
 223   3                 read_time();
 224   3                 d[0]=hour/16;
 225   3                 d[1]=hour %16;
 226   3                 d[2]=minute/16;
 227   3                 d[3]=minute %16;
 228   3              }
 229   2              else               //较时状态。让需要较时的位闪动
 230   2              {  set_time();
 231   3                 distem=d[w];
 232   3                 d[w]=10;
 233   3                 for(i=0;i<250;i++)              
 234   3                     delay(250);
 235   3                 d[w]=distem;
 236   3                 for(i=0;i<250;i++)
 237   3                     delay(250);
 238   3              }
 239   2                      keyboard=getkey(); //读按键;
 240   2                       
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:50:54 PAGE 5   

 241   2             while(flag==1)                 //判断第一个按键长按
 242   2            
 243   2                       {  
 244   3                      
 245   3                               distime=1;
 246   3                   state=1;
 247   3                       /* set_time();*/
 248   3                  distem=d[w];
 249   3                   d[w]=10;
 250   3                 for(i=0;i<250;i++)
 251   3                     delay(250);
 252   3                 d[w]=distem;
 253   3                 for(i=0;i<250;i++)
 254   3                     delay(250);
 255   3                         
 256   3                  keyboard1=getkey();
 257   3                
 258   3              
 259   3                  if(keyboard1==1) 
 260   3                    {   state=1;       // ..按键后会同时向后退到下一位
 261   4                         w++;
 262   4                         if(w>3) w=0; 
 263   4                     } 
 264   3                  else if(keyboard1==2)
 265   3                     {   d[w]++;
 266   4                         if(d[0]>2) d[0]=0;
 267   4                                     if(d[0]==2&&d[1]>3) d[1]=0;
 268   4                                      if(d[2]>5) d[2]=0;
 269   4                         else if(w>=1&&d[w]>9) d[w]=0;
 270   4                      }
 271   3                  else if(keyboard1==3)
 272   3                     {   if(d[w]>0) d[w]--; }
 273   3                  else     if(keyboard1==4)
 274   3                     {   callhour=d[0]*16+d[1];           
 275   4                         callminute=d[2]*16+d[3];
 276   4                         callsecond=0;
 277   4                            read_time();              
 278   4                      d[0]=hour/16;
 279   4                      d[1]=hour %16;
 280   4                      d[2]=minute/16;
 281   4                      d[3]=minute %16;
 282   4                              state=0;
 283   4                      flag=0   
 284   4      
 285   4                           ;
 286   4                          
 287   4                      }
 288   3                               
 289   3              
 290   3                 } 
 291   2      
 292   2      
 293   2      
 294   2      
 295   2      
 296   2      
 297   2      
 298   2      
 299   2      
 300   2      
 301   2       while(flag2==1)                      //判断第二个按键长按
 302   2            
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:50:54 PAGE 6   

 303   2                       {  
 304   3                      
 305   3                               distime=1;
 306   3                   state=1;
 307   3                       /* set_time();*/
 308   3                  distem=d[w];
 309   3                   d[w]=10;
 310   3                 for(i=0;i<250;i++)
 311   3                     delay(250);
 312   3                 d[w]=distem;
 313   3                 for(i=0;i<250;i++)
 314   3                     delay(250);
 315   3                         
 316   3                  keyboard1=getkey();
 317   3                
 318   3              
 319   3                  if(keyboard1==1) 
 320   3                    {   state=1;       // ..按键后会同时向后退到下一位
 321   4                         w++;
 322   4                         if(w>3) w=0; 
 323   4                     } 
 324   3                  else if(keyboard1==2)
 325   3                     {   d[w]++;
 326   4                         if(d[0]>2) d[0]=0;
 327   4                                     if(d[0]==2&&d[1]>3) d[1]=0;
 328   4                                      if(d[2]>5) d[2]=0;
 329   4                         else if(w>=1&&d[w]>9) d[w]=0;
 330   4                      }
 331   3                  else if(keyboard1==3)
 332   3                     {   if(d[w]>0) d[w]--; }
 333   3                  else     if(keyboard1==4)
 334   3                     {   callhour2=d[0]*16+d[1];                 //将当前显示的值附值给一个变量
 335   4                         callminute2=d[2]*16+d[3];               
 336   4                         callsecond2=0;
 337   4                            read_time();                        //恢复原来的时间
 338   4                      d[0]=hour/16;                               
 339   4                      d[1]=hour %16;                         //送显示
 340   4                      d[2]=minute/16;
 341   4                      d[3]=minute %16;
 342   4                              state=0;                                  //关闭闪动
 343   4                      flag2=0 ;                                //关闭长按标志                
 344   4      
 345   4                           
 346   4                          
 347   4                      }
 348   3                               
 349   3              
 350   3                 } 
 351   2      
 352   2      
 353   2      
 354   2      
 355   2      
 356   2            
 357   2       
 358   2             if(keyboard==1)    // keyboard=1时,切换转态到较时并且多次..
 359   2              {   state=1;       // ..按键后会同时向后退到下一位
 360   3                  w++;
 361   3                  if(w>3) w=0; 
 362   3              }
 363   2              else if(keyboard==2)
 364   2              {   d[w]++;
C51 COMPILER V7.01  HT1380_TIME3                                                           07/14/2007 22:50:54 PAGE 7   

 365   3                  if(d[0]>2) d[0]=0;
 366   3                              if(d[0]==2&&d[1]>3) d[1]=0;
 367   3                              if(d[2]>5) d[2]=0;
 368   3                  else if(w>=1&&d[w]>9) d[w]=0;
 369   3              }
 370   2              else if(keyboard==3)
 371   2              {   if(d[w]>0) d[w]--; }
 372   2              else if(keyboard==4)
 373   2              {    hour=d[0]*16+d[1];
 374   3                   minute=d[2]*16+d[3];
 375   3                  
 376   3                           set_time();
 377   3                   state=0;
 378   3              }
 379   2                      
 380   2              if(hour==callhour&&minute==callminute&&(second>=0&&second<=9))            //判断条件1
 381   2                      {for(b=0;b<25;b++)
 382   3               beep=0;
 383   3               beep=1;
 384   3               }
 385   2                      else beep=1;
 386   2              if(hour==callhour2&&minute==callminute2&&(second>=0&&second<=9))           //判断条件2
 387   2               beep=0;
 388   2              else beep=1;
 389   2                
 390   2           }
 391   1      
 392   1      }
 393          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1237    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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