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

📄 pcf8563.lst

📁 本源代码是一个51单片机控制pcf8563时钟日历芯片的源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 452   2                          { DataCount++;
 453   3                            if(DataCount==1)
 454   3                                                {data1=0x00;char_display(0x42,0x30);}
 455   3                                                else if(DataCount==2)
 456   3                                                {data2=0x00;char_display(0x43,0x30);DataCount=0;}
 457   3                                              }
 458   2                                              break;
 459   2               case 1:        if(EnterCount==1)
 460   2                          { DataCount++;
 461   3                            if(DataCount==1)
 462   3                                                {data1=0x01;char_display(0x42,0x31);}
 463   3                                                else if(DataCount==2)
 464   3                                                {data2=0x01;char_display(0x43,0x31);DataCount=0;}
 465   3                                              }
 466   2                                              else if(EnterCount==0)
 467   2                                              { lcd_init();
 468   3                                                CloseCount=1;
 469   3                                              }
 470   2                                              break;
 471   2               case 2:        if(EnterCount==1)
 472   2                          { DataCount++;
 473   3                            if(DataCount==1)
 474   3                                                {data1=0x02;char_display(0x42,0x32);}
 475   3                                                else if(DataCount==2)
 476   3                                                {data2=0x02;char_display(0x43,0x32);DataCount=0;}
 477   3                                              }
 478   2                                              break;
 479   2               case 3:        LightCount++;
 480   2                          if(EnterCount==1)
 481   2                          { DataCount++;
 482   3                            if(DataCount==1)
 483   3                                                {data1=0x03;char_display(0x42,0x33);}
 484   3                                                else if(DataCount==2)
 485   3                                                {data2=0x03;char_display(0x43,0x33);DataCount=0;}
 486   3                                              }
 487   2                                              if(LightCount==0)
 488   2                                              light=0;
 489   2                          else if(LightCount==1)
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 9   

 490   2                          light=1;
 491   2                          else 
 492   2                                              light=0;
 493   2                                              break;
 494   2               case 4:        if(EnterCount==1)
 495   2                          { DataCount++;
 496   3                            if(DataCount==1)
 497   3                                                {data1=0x04;char_display(0x42,0x34);}
 498   3                                                else if(DataCount==2)
 499   3                                                {data2=0x04;char_display(0x43,0x34);DataCount=0;}
 500   3                                              }
 501   2                                              else if(EnterCount==0)
 502   2                                              { 
 503   3                                                SetPCF8563(minAlarm,0x80);        //清除AE标志位
 504   3                                                lcd_init();
 505   3                                                lcd_display(0x02,CloseMinAlarm);
 506   3                                                lcd_display(0x45,AlarmClosed);
 507   3                                                delay(1500);
 508   3                                                lcd_init();
 509   3                                              }
 510   2                                              break;
 511   2               case 5:        if(EnterCount==1)
 512   2                          { DataCount++;
 513   3                            if(DataCount==1)
 514   3                                                {data1=0x05;char_display(0x42,0x35);}
 515   3                                                else if(DataCount==2)
 516   3                                                {data2=0x05;char_display(0x43,0x35);DataCount=0;}
 517   3                                              }
 518   2                                              else if(EnterCount==0)
 519   2                                              { 
 520   3                                                SetPCF8563(hourAlarm,0x80);        //清除AE标志位
 521   3                                                lcd_init();
 522   3                                                lcd_display(0x03,CloseHourAlarm);
 523   3                                                lcd_display(0x45,AlarmClosed);
 524   3                                                delay(1500);
 525   3                                                lcd_init();
 526   3                                              }
 527   2                                              break;
 528   2           case 6:        if(EnterCount==1)
 529   2                          { DataCount++;
 530   3                            if(DataCount==1)
 531   3                                                {data1=0x06;char_display(0x42,0x36);}
 532   3                                                else if(DataCount==2)
 533   3                                                {data2=0x06;char_display(0x43,0x36);DataCount=0;}
 534   3                                              }
 535   2                                              else if(EnterCount==0)
 536   2                                              { 
 537   3                                                SetPCF8563(dayAlarm,0x80);        //清除AE标志位
 538   3                                                lcd_init();
 539   3                                                lcd_display(0x03,CloseDayAlarm);
 540   3                                                lcd_display(0x45,AlarmClosed);
 541   3                                                delay(1500);
 542   3                                                lcd_init();
 543   3                                              }
 544   2                                              break;
 545   2               case 7:        if(EnterCount==1)
 546   2                          { DataCount++;
 547   3                            if(DataCount==1)
 548   3                                                {data1=0x07;char_display(0x42,0x37);}
 549   3                                                else if(DataCount==2)
 550   3                                                {data2=0x07;char_display(0x43,0x37);DataCount=0;}
 551   3                                              }
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 10  

 552   2                                              else if(EnterCount==0)
 553   2                                              { 
 554   3                                                SetPCF8563(weekAlarm,0x80);        //清除AE标志位
 555   3                                                lcd_init();
 556   3                                                lcd_display(0x03,CloseWeekAlarm);
 557   3                                                lcd_display(0x45,AlarmClosed);
 558   3                                                delay(1500);
 559   3                                                lcd_init();
 560   3                                              }
 561   2                                              break;
 562   2               case 8:        if(EnterCount==1)
 563   2                          { DataCount++;
 564   3                            if(DataCount==1)
 565   3                                                {data1=0x08;char_display(0x42,0x38);}
 566   3                                                else if(DataCount==2)
 567   3                                                {data2=0x08;char_display(0x43,0x38);DataCount=0;}
 568   3                                              }
 569   2                                              break;
 570   2               case 9:        if(EnterCount==1)
 571   2                          { DataCount++;
 572   3                            if(DataCount==1)
 573   3                                                {data1=0x09;char_display(0x42,0x39);}
 574   3                                                else if(DataCount==2)
 575   3                                                {data2=0x09;char_display(0x43,0x39);DataCount=0;}
 576   3                                              }
 577   2                                              break;
 578   2      
 579   2           default:       break;
 580   2      
 581   2              }
 582   1      }
 583          
 584          /********************* 时钟关闭程序**********************/
 585          void clkscan(void)
 586          {uint key;
 587   1       key=getch();
 588   1       delay(50);
 589   1       switch(key)
 590   1       {case 2: lcd_init();
 591   2                CloseCount=0;
 592   2                        break;
 593   2        default:break;
 594   2       }
 595   1      }
 596          /********************* 中断服务程序**********************/
 597          void ISR_int0(void) interrupt 0 using 0
 598          { uint t;
 599   1        lcd_init();    
 600   1        for(t=10;t>=0;t--)
 601   1        {lcd_display(0x05,ALARM);
 602   2         beep=1;
 603   2         light=1;
 604   2         delay(100);
 605   2        }
 606   1        light=0;
 607   1        beep=0;
 608   1        lcd_init();
 609   1        SetPCF8563(ctrl2,0x02);//把AIE设置为1,AF设置为0,清空闹钟标志位
 610   1      }
 611          //定时器中断服务程序,实现1s的定时
 612          /*void timer0(void) interrupt 1 using 1
 613          {
C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 11  

 614              TH0 = 0x3C;     //定时器赋予初值
 615                  TL0 = 0xAF;   
 616                  //一秒累加 
 617                  rSecondCount++;//秒计时+1 
 618                  if (40 == rSecondCount) //1sec到,50ms*20 
 619                   { 
 620                     GetPCF8563(minute,6,rbuf);
 621                     test = 1;
 622                     rSecondCount = 0;
 623                   } 
 624                   else
 625                   {
 626                    test = 0;
 627                   }
 628          }
 629          */
 630          //---------------------------------主函数------------------------------------------
 631          void main()
 632          {   IT0=0;                      //系统开外部0中断
 633   1              //ET0 = 1;        //允许定时器0中断
 634   1              EA=1;           //开总中断
 635   1      
 636   1          EX0=1;
 637   1              //TMOD = 0x01;    //定时器工作方式选择
 638   1              //TH0 = 0x3C;     //定时器赋予初值
 639   1              //TL0 = 0xAF;   
 640   1              //IE = 0x82;            // 使能timer0中断       
 641   1              //TR0 = 1;        //启动定时器
 642   1          
 643   1              lcd_init();             // 初始化LCD                                    
 644   1              pcf8563start(); //启动pcf8563
 645   1              SetPCF8563(ctrl2,0x02);
 646   1          setime();       //出始时间设定
 647   1              
 648   1              while(1)
 649   1            { 
 650   2                           switch(CloseCount)
 651   2                                       {case 0:
 652   3                                               GetPCF8563(minute,6,rbuf);
 653   3                               time_display(rbuf);
 654   3                                   keyscan();
 655   3                                               break;
 656   3                                       case 1:                                
 657   3                                               lcd_display(0x01,Close);
 658   3                                               clkscan();                                              
 659   3                                               break;
 660   3                      default:break;
 661   3                                }
 662   2      
 663   2         }
 664   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3418    ----
   CONSTANT SIZE    =    189    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      31
   IDATA SIZE       =     21    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.

C51 COMPILER V7.08   PCF8563                                                               03/23/2009 21:41:05 PAGE 12  


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

⌨️ 快捷键说明

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