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

📄 pcf8563.lst

📁 本源代码是一个51单片机控制pcf8563时钟日历芯片的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 223   3                                                        SetPCF8563(day,rbuf[2]);
 224   3                                              }
 225   2                                              else if(count==5)
 226   2                                              {    
 227   3                                                   rbuf[1]=rbuf[1]&0x3f;
 228   3                                                       if(rbuf[1]==0x09)
 229   3                                                       rbuf[1]=0x10;
 230   3                                                       else if(rbuf[1]==0x19)
 231   3                                                       rbuf[1]=0x20;
 232   3                                                       else if(rbuf[1]==0x23)
 233   3                                                       rbuf[1]=0x0;
 234   3                                                       else 
 235   3                                                       rbuf[1]+=1;
 236   3                                                       SetPCF8563(hour,rbuf[1]);
 237   3                                              }
 238   2                          else if(count==6)
 239   2                                              {
 240   3                                                      rbuf[0]=rbuf[0]&0x7f;
 241   3                                                      gw=rbuf[0]&0x0f;
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 5   

 242   3                              sw=(rbuf[0]>>4)&0x0f;
 243   3                                                      if(gw==0x09)
 244   3                                                      { if(sw==0x05)
 245   4                                                        {sw=0;
 246   5                                                         gw=0;
 247   5                                                        }
 248   4                                                        else
 249   4                                                        {gw=0;
 250   5                                                         sw+=1;                                                 
 251   5                                                        }
 252   4                              }
 253   3                                                      else
 254   3                                                      gw+=1;
 255   3                                                      rbuf[0]=(sw<<4)+gw;
 256   3                                                      SetPCF8563(minute,rbuf[0]);                        
 257   3                                              }
 258   2                                              else 
 259   2                                              break;
 260   2                                              break;
 261   2      
 262   2          case 13:        if(count==1)                      //相减键,相减键为1是调节年寄存器中的数值!
 263   2                                               {    
 264   3                                                        gw=rbuf[5]&0x0f;             //年的个位十位分离
 265   3                                sw=(rbuf[5]>>4)&0x0f;
 266   3                                                        if(gw==0x0)                 //判断个位和十位是否为0
 267   3                                                        {
 268   4                                                           if(sw==0x0)
 269   4                                                               {gw=9;
 270   5                                                                sw=9;
 271   5                                                               }
 272   4                                                               else
 273   4                                                               {  gw=9;
 274   5                                                                  sw-=1;
 275   5                                                               }
 276   4                                                        }               
 277   3                                                    else
 278   3                                                        gw-=1;
 279   3                                                        
 280   3                                                        rbuf[5]=(sw<<4)+gw;
 281   3                                                        SetPCF8563(year,rbuf[5]);
 282   3                                              }
 283   2                                              else if(count==2)                         //调节月寄存器中的数值!
 284   2                                              {    
 285   3                                                   rbuf[4]=rbuf[4]&0x1f;
 286   3                                                       if(rbuf[4]==0x10)
 287   3                                                       rbuf[4]=0x9;
 288   3                                                       else if(rbuf[4]==0x01)
 289   3                                                       rbuf[4]=0x12;
 290   3                                                       else
 291   3                                                       rbuf[4]-=1;
 292   3                                                       SetPCF8563(month,rbuf[4]);
 293   3                                              }
 294   2                                              else if(count==4)
 295   2                                              {    
 296   3                                                   rbuf[3]=rbuf[3]&0x07;
 297   3                                                       if(rbuf[3]==0x0)
 298   3                                                       rbuf[3]=0x06;
 299   3                                                       else
 300   3                                                       rbuf[3]=rbuf[3]-1;
 301   3                                                       SetPCF8563(week,rbuf[3]);
 302   3                                              }
 303   2                                              else if(count==3)
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 6   

 304   2                                              {   
 305   3                                           rbuf[2]=rbuf[2]&0x3f;
 306   3                                                       gw=rbuf[2]&0x0f;
 307   3                               sw=(rbuf[2]>>4)&0x0f;
 308   3                                                   if(rbuf[2]==0x01)                 //判断个位和十位是否为1
 309   3                                                        {gw=1;
 310   4                                                         sw=3;
 311   4                                                        }       
 312   3                                                   else if(gw==0x0)
 313   3                                                        {gw=9;
 314   4                                                         sw-=1;
 315   4                                                        }      
 316   3                                                       else 
 317   3                                                         gw-=1;
 318   3                                                        rbuf[2]=(sw<<4)+gw;
 319   3                                                        SetPCF8563(day,rbuf[2]);
 320   3                                              }
 321   2                                              else if(count==5)
 322   2                                              {    
 323   3                                                   rbuf[1]=rbuf[1]&0x3f;
 324   3                                                       if(rbuf[1]==0x10)
 325   3                                                       rbuf[1]=0x9;
 326   3                                                       else if(rbuf[1]==0x20)
 327   3                                                       rbuf[1]=0x19;
 328   3                                                       else if(rbuf[1]==0x0)
 329   3                                                       rbuf[1]=0x23;
 330   3                                                       else 
 331   3                                                       rbuf[1]-=1;
 332   3                                                       SetPCF8563(hour,rbuf[1]);
 333   3                                              }
 334   2                          else if(count==6)
 335   2                                              {
 336   3                                                      rbuf[0]=rbuf[0]&0x7f;
 337   3                                                      gw=rbuf[0]&0x0f;
 338   3                              sw=(rbuf[0]>>4)&0x0f;
 339   3                                                      if(gw==0x0)
 340   3                                                      { if(sw==0x0)
 341   4                                                        {sw=5;
 342   5                                                         gw=9;
 343   5                                                        }
 344   4                                                        else
 345   4                                                        {gw=9;
 346   5                                                         sw-=1;                                                 
 347   5                                                        }
 348   4                              }
 349   3                                                      else
 350   3                                                      gw-=1;
 351   3                                                      rbuf[0]=(sw<<4)+gw;
 352   3                                                      SetPCF8563(minute,rbuf[0]);                        
 353   3                                              }
 354   2                                              else 
 355   2                                              break;
 356   2                                              break;
 357   2               case 10:       EnterCount=0;
 358   2                                              lcd_init();
 359   2                                              switch(AlarmCount)
 360   2                                              {case 0:lcd_display(0x40,AlarmMinute);break;
 361   3                                               case 1:lcd_display(0x40,AlarmHour);break;
 362   3                                               case 2:lcd_display(0x40,AlarmDay); break;     
 363   3                                           case 3:lcd_display(0x40,AlarmWeek);break;
 364   3                                               default:break; 
 365   3                                              }
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 7   

 366   2                                              AlarmCount+=1;
 367   2                                              if(AlarmCount>4)
 368   2                                              AlarmCount=0;
 369   2                                              break;
 370   2               case 11:       EnterCount++;             //确认键,按下1次表示确定设定类型
 371   2                                              lcd_init();
 372   2                                              if(EnterCount==1)
 373   2                                              {
 374   3                                               AlarmCount--;
 375   3                                               if(AlarmCount<0)
 376   3                                               AlarmCount=0;
 377   3                                               if(AlarmCount==0)
 378   3                                               lcd_display(0x40,TimeM);
 379   3                                               else if(AlarmCount==1)
 380   3                                               lcd_display(0x40,TimeH);
 381   3                                               else if(AlarmCount==2)
 382   3                                               lcd_display(0x40,TimeD);
 383   3                                               else
 384   3                                               {AlarmCount=3;
 385   4                                               lcd_display(0x40,TimeW);
 386   4                                               }
 387   3                                               GetPCF8563(minAlarm,4,abuf);//把相应寄存器中的报警数据读出
 388   3                                               alarm_display(abuf);
 389   3                                              }
 390   2                                              else if(EnterCount==2)    //按下第二次表示发送报警数据
 391   2                                              {
 392   3                                               ddata=(data1<<4)+data2;
 393   3                                               if(AlarmCount==0)
 394   3                                                 {if((ddata>0x59)||(ddata<0x00))
 395   4                                                        {
 396   5                                                    lcd_display(0x40,Error);
 397   5                                                        EnterCount=0;
 398   5                                                        }
 399   4                                                 else
 400   4                                                    {
 401   5                                                     lcd_display(0x40,TestOk);
 402   5                                                        }
 403   4                                             }
 404   3                                               else if(AlarmCount==1)
 405   3                                                 {if(ddata>0x23||ddata<0x00)
 406   4                                                        {
 407   5                                                    lcd_display(0x40,Error);
 408   5                                                        EnterCount=0;
 409   5                                                        }
 410   4                                                 else
 411   4                                                    {
 412   5                                                     lcd_display(0x40,TestOk);
 413   5                                                        }
 414   4                                                 }
 415   3                                               else if(AlarmCount==2)
 416   3                                                 {if(ddata>0x31||ddata<0x01)
 417   4                                                        {
 418   5                                                    lcd_display(0x40,Error);
 419   5                                                        EnterCount=0;
 420   5                                                        }
 421   4                                                 else
 422   4                                                    {
 423   5                                                     lcd_display(0x40,TestOk);
 424   5                                                        }
 425   4                                                 }
 426   3                                               else
 427   3                                               { AlarmCount=3;
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 8   

 428   4                                                 if(ddata>0x6||ddata<0x00)
 429   4                                                        {
 430   5                                                    lcd_display(0x40,Error);
 431   5                                                        EnterCount=0;
 432   5                                                        }
 433   4                                                 else
 434   4                                                    {
 435   5                                                     lcd_display(0x40,TestOk);
 436   5                                                        }
 437   4                                               }
 438   3                                              }
 439   2                                              else if(EnterCount==3)    //按下第3次表示发送报警数据
 440   2                                              {EnterCount=0;
 441   3                                               SetPCF8563(ctrl2,0x02);  //把AIE设置为1,AF设置为0
 442   3                                               abuf[AlarmCount]=(ddata&0x7f);//把AE设定为0
 443   3                                               SetPCF8563(minAlarm+AlarmCount,abuf[AlarmCount]);//报警设置完毕
 444   3                                               lcd_display(0x40,AlarmFinish);
 445   3                                               //显示闹钟符号
 446   3                                              }
 447   2                                              else
 448   2                                              EnterCount=0;
 449   2                                              break;
 450   2                                              break;
 451   2               case 0:        if(EnterCount==1)

⌨️ 快捷键说明

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