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

📄 ds1302.lst

📁 用单片机驱动驱动液晶显示器
💻 LST
📖 第 1 页 / 共 4 页
字号:
 465   4                              temp=temp+1;  //秒数加1
 466   4                              up_flag=1;    //数据调整后更新标志
 467   4                              if((temp&0x7f)>0x59)   //超过59秒,清零
 468   4                                      temp=0;                         
 469   4                      }else
 470   3                      {
 471   4                              TickTime.Second=TickTime.Second+1;
 472   4                              if (TickTime.Second==59)
 473   4                              {
 474   5                                      TickTime.Second=0;
 475   5                              }
 476   4                      }
 477   3                                                
 478   3                      break;
 479   3                      case 2:
 480   3                              if (done==1)
 481   3                              {
 482   4                                      temp=Read1302(DS1302_MINUTE);  //读取分数
 483   4                                      temp=temp+1;  //分数加1
 484   4                                      up_flag=1;
 485   4                                      if(temp>0x59)          //超过59分,清零
 486   4                                              temp=0;
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 9   

 487   4                              }else
 488   3                              {
 489   4                                      TickTime.Minute=TickTime.Minute+1;
 490   4                                              if(TickTime.Minute==59)
 491   4                                                      TickTime.Minute=0;
 492   4                              }
 493   3                              
 494   3                              break;
 495   3                      case 3:
 496   3                              if (done==1)
 497   3                              {
 498   4                                      temp=Read1302(DS1302_HOUR);  //读取小时数
 499   4                                      temp=temp+1;  //小时数加1
 500   4                                      up_flag=1;
 501   4                                      if(temp>0x23)   //超过23小时,清零
 502   4                                              temp=0;
 503   4                              }else
 504   3                              {
 505   4                                      TickTime.Hour=TickTime.Hour+1;
 506   4                                      if (TickTime.Hour==23)
 507   4                                      {
 508   5                                              TickTime.Hour=0;
 509   5                                      }
 510   4                                      
 511   4                              }
 512   3                              break;
 513   3                      case 4:
 514   3                              temp=Read1302(DS1302_WEEK);  //读取星期数
 515   3                              temp=temp+1;  //星期数加1
 516   3                              up_flag=1;
 517   3                              if(temp>0x7)  
 518   3                                      temp=1;
 519   3                              break;
 520   3                      case 5:
 521   3                              temp=Read1302(DS1302_DAY);  //读取日数
 522   3                              temp=temp+1;  //日数加1
 523   3                              up_flag=1;
 524   3                              if(temp>0x31)
 525   3                                      temp=1;
 526   3                              break;
 527   3                      case 6:
 528   3                              temp=Read1302(DS1302_MONTH);  //读取月数
 529   3                              temp=temp+1;  //月数加1
 530   3                              up_flag=1;
 531   3                              if(temp>0x12)
 532   3                                      temp=1;
 533   3                              break;
 534   3                      case 7:
 535   3                              temp=Read1302(DS1302_YEAR);  //读取年数
 536   3                              temp=temp+1;  //年数加1
 537   3                              up_flag=1;
 538   3                              if(temp>0x85)
 539   3                                      temp=0;
 540   3                              break;
 541   3                      default:break;
 542   3                      }
 543   2      
 544   2                      while(Up==0);
 545   2      
 546   2              }
 547   1      }
 548          
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 10  

 549          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 550          void Downkey()//降序按键
 551          {           
 552   1              Down=1;
 553   1              if(Down==0)
 554   1              {
 555   2                      mdelay(8);
 556   2                      switch(count)
 557   2                      {case 1:
 558   3                      if(done==1)
 559   3                      {
 560   4                      temp=Read1302(DS1302_SECOND);  //读取秒数
 561   4                      temp=temp-1;                                                //秒数减1
 562   4                      down_flag=1;       //数据调整后更新标志
 563   4                      if(temp==0x7f)     //小于0秒,返回59秒
 564   4                              temp=0x59;
 565   4                              } else{
 566   4                              if(TickTime.Second==0)
 567   4                              {
 568   5                                      TickTime.Second=59;
 569   5                              } else{
 570   5                                      TickTime.Second=TickTime.Second-1;
 571   5                                      }
 572   4                      }
 573   3                      break;
 574   3                      case 2:
 575   3                      if(     done==1)
 576   3                      {
 577   4                              temp=Read1302(DS1302_MINUTE);  //读取分数
 578   4                              temp=temp-1;  //分数减1
 579   4                              down_flag=1;
 580   4                              if(temp==-1)
 581   4                                      temp=0x59;      //小于0秒,返回59秒
 582   4                      } else{
 583   4                              if(TickTime.Minute==0)
 584   4                              {
 585   5                                      TickTime.Minute=59;
 586   5                              } else{
 587   5                                      TickTime.Minute=TickTime.Minute-1;
 588   5                                      }
 589   4      
 590   4                      }
 591   3                              break;
 592   3                      case 3:
 593   3                      if(done==1)
 594   3                      {
 595   4                              temp=Read1302(DS1302_HOUR);  //读取小时数
 596   4                              temp=temp-1;  //小时数减1
 597   4                              down_flag=1;
 598   4                              if(temp==-1)
 599   4                                      temp=0x23;
 600   4                      }else{
 601   4                              if(TickTime.Hour==0)
 602   4                              {
 603   5                                      TickTime.Hour=23;
 604   5                              } else{
 605   5                                      TickTime.Second=TickTime.Second-1;
 606   5                                      }
 607   4      
 608   4                      }
 609   3                              break;
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 11  

 610   3                      case 4:
 611   3                              temp=Read1302(DS1302_WEEK);  //读取星期数
 612   3                              temp=temp-1;  //星期数减1
 613   3                              down_flag=1;
 614   3                              if(temp==0)
 615   3                                      temp=0x7;;
 616   3                              break;
 617   3                      case 5:
 618   3                              temp=Read1302(DS1302_DAY);  //读取日数
 619   3                              temp=temp-1;  //日数减1
 620   3                              down_flag=1;
 621   3                              if(temp==0)
 622   3                                      temp=31;
 623   3                              break;
 624   3                      case 6:
 625   3                              temp=Read1302(DS1302_MONTH);  //读取月数
 626   3                              temp=temp-1;  //月数减1
 627   3                              down_flag=1;
 628   3                              if(temp==0)
 629   3                                      temp=12;
 630   3                              break;
 631   3                      case 7:
 632   3                              temp=Read1302(DS1302_YEAR);  //读取年数
 633   3                              temp=temp-1;  //年数减1
 634   3                              down_flag=1;
 635   3                              if(temp==-1)
 636   3                                      temp=0x85;
 637   3                              break;
 638   3                      default:break;
 639   3                      }
 640   2      
 641   2                      while(Down==0);
 642   2      
 643   2              }
 644   1      }
 645          
 646          void Setkey()//模式选择按键
 647          {
 648   1              Set=1;
 649   1              SetTick=1;
 650   1              if(Set==0)
 651   1              {
 652   2                      mdelay(8);
 653   2                      count=count+1;   //Setkey按一次,count就加1
 654   2                      done=1;                  //进入调整模式
 655   2                      while(Set==0);
 656   2              }
 657   1              if (SetTick==0)
 658   1              {
 659   2                      mdelay(8);
 660   2                      count=count+1;   //Setkey按一次,count就加1
 661   2                      if(count>3)
 662   2                      {
 663   3                              count=1;
 664   3                      }
 665   2                      adjusttick=1;            //进入调整闹钟模式
 666   2                      while(SetTick==0);
 667   2      
 668   2              }
 669   1      
 670   1      }
 671          
C51 COMPILER V8.02   DS1302                                                                07/12/2008 21:49:01 PAGE 12  

 672          void keydone()//按键功能执行
 673          {
 674   1                
 675   1                      
 676   1              
 677   1                      uchar Second;
 678   1      
 679   1                      if(flag==0)    //关闭时钟,停止计时
 680   1                      { Write1302(0x8e,0x00); //写入允许
 681   2                      temp=Read1302(0x80);
 682   2                      Write1302(0x80,temp|0x80);
 683   2                      Write1302(0x8e,0x80); //禁止写入
 684   2                      flag=1;
 685   2                      }
 686   1                      Setkey();                                           //扫描模式切换按键
 687   1                      switch(count)
 688   1                      {case 1:do                                              //count=1,调整秒
 689   2                      {
 690   3                              outkey();                          //扫描跳出按钮
 691   3                              Upkey();                //扫描加按钮
 692   3                              Downkey();              //扫描减按钮
 693   3                              if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据
 694   3                              {
 695   4                                      Write1302(0x8e,0x00); //写入允许
 696   4                                      Write1302(0x80,temp|0x80); //写入新的秒数
 697   4                                      Write1302(0x8e,0x80); //禁止写入
 698   4                                      up_flag=0;
 699   4                                      down_flag=0;
 700   4                              }

⌨️ 快捷键说明

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