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

📄 51

📁 51单片机大量源码
💻
📖 第 1 页 / 共 4 页
字号:
 472   1        TempBuffer[8]='\0';
 473   1      }
 474          //**********************************************
 475          //延时子程序模块
 476          //**********************************************
 477          void mdelay(uint delay)
 478          {       uint i;
 479   1              for(;delay>0;delay--)
 480   1                      {for(i=0;i<80;i++) //1ms延时.
 481   2                      {;}
 482   2                      }
 483   1      }
 484          
 485          //************************************************
 486          //按键设置程序模块
 487          //************************************************
C51 COMPILER V8.02   DS1302                                                                07/24/2009 15:01:33 PAGE 9   

 488          
 489          //************************************
 490          //跳出调整模式,返回默认显示
 491          //************************************
 492          void outkey()                    
 493          { uchar Second;
 494   1        if(out==0)         
 495   1        { mdelay(5); 
 496   2              count=0;
 497   2              hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 498   2              Second=Read1302(DS1302_SECOND);
 499   2          Write1302(0x8e,0x00); //写入允许
 500   2              Write1302(0x80,Second&0x7f);
 501   2              Write1302(0x8E,0x80);          //禁止写入
 502   2              done=0;           
 503   2        }
 504   1      }
 505          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 506          //*************************
 507          //升序按键
 508          //*************************
 509          void Upkey()
 510          {          
 511   1                      Up=1;
 512   1                          if(Up==0)
 513   1                                {
 514   2                                         mdelay(5);
 515   2                                             switch(count)
 516   2                                                {case 1:
 517   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 518   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 519   3                                                                        temp=temp+1;  //秒数加1
 520   3                                        up_flag=1;    //数据调整后更新标志
 521   3                                                                        if((temp)>59)   //超过59秒,清零
 522   3                                        temp=0;       
 523   3                                                                        temp=temp/10*16+temp%10;
 524   3                                                                        break;
 525   3                                                 case 2:
 526   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 527   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 528   3                                                                        temp=temp+1;  //分数加1
 529   3                                        up_flag=1;
 530   3                                                                        if(temp>59)          //超过59分,清零
 531   3                                                                        temp=0;
 532   3                                                                        temp=temp/10*16+temp%10;
 533   3                                                                        break;
 534   3                                                 case 3:
 535   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 536   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 537   3                                                                        temp=temp+1;  //小时数加1
 538   3                                        up_flag=1;
 539   3                                                                        if(temp>23)   //超过23小时,清零
 540   3                                                                        temp=0;
 541   3                                                                        temp=temp/10*16+temp%10;
 542   3                                                                        break;
 543   3                                                 case 4:
 544   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 545   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 546   3                                                                        temp=temp+1;  //星期数加1
 547   3                                        up_flag=1;
 548   3                                                                        if(temp>7)  
C51 COMPILER V8.02   DS1302                                                                07/24/2009 15:01:33 PAGE 10  

 549   3                                                                        temp=1;
 550   3                                                                        temp=temp/10*16+temp%10;
 551   3                                                                        break;
 552   3                                                 case 5:
 553   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 554   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 555   3                                                                        temp=temp+1;  //日数加1
 556   3                                        up_flag=1;
 557   3                                                                        if(temp>31)
 558   3                                                                        temp=1;
 559   3                                                                        temp=temp/10*16+temp%10;
 560   3                                                                        break;
 561   3                                                 case 6:
 562   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 563   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 564   3                                                                        temp=temp+1;  //月数加1
 565   3                                        up_flag=1;
 566   3                                                                        if(temp>12)
 567   3                                                                        temp=1;
 568   3                                                                        temp=temp/10*16+temp%10;
 569   3                                                                        break;
 570   3                                                 case 7:
 571   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 572   3                                                                        temp=((temp&0xf0)>>4)*10 + (temp&0x0F);
 573   3                                                                        temp=temp+1;  //年数加1
 574   3                                        up_flag=1;
 575   3                                                                        if(temp>99)
 576   3                                                                        temp=0;
 577   3                                                                        temp=temp/10*16+temp%10;
 578   3                                                                        break;
 579   3                                                     default:break;
 580   3                                                }
 581   2                                                
 582   2                                       //  while(Up==0);
 583   2                                        }
 584   1      }
 585          
 586          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 587          //************************
 588          //降序按键
 589          //************************
 590          void Downkey()
 591          {           
 592   1                      Down=1;
 593   1                  if(Down==0)
 594   1                                {
 595   2                                         mdelay(5);
 596   2                                           switch(count)
 597   2                                                {case 1:
 598   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 599   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 600   3                                                                        temp=temp-1;                                              //秒数减1
 601   3                                        down_flag=1;       //数据调整后更新标志
 602   3                                                                        if(temp==-1)     //小于0秒,返回59秒
 603   3                                                                        temp=59;
 604   3                                                                        temp=temp/10*16+temp%10;
 605   3                                                                        break;
 606   3                                                 case 2:
 607   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 608   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 609   3                                                                        temp=temp-1;  //分数减1
C51 COMPILER V8.02   DS1302                                                                07/24/2009 15:01:33 PAGE 11  

 610   3                                        down_flag=1;
 611   3                                                                        if(temp==-1)
 612   3                                                                        temp=59;      //小于0秒,返回59秒
 613   3                                                                        temp=temp/10*16+temp%10;
 614   3                                                                        break;
 615   3                                                 case 3:
 616   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 617   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 618   3                                                                        temp=temp-1;  //小时数减1
 619   3                                        down_flag=1;
 620   3                                                                        if(temp==-1)
 621   3                                                                        temp=23;
 622   3                                                                        temp=temp/10*16+temp%10;
 623   3                                                                        break;
 624   3                                                 case 4:
 625   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数;
 626   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 627   3                                                                        temp=temp-1;  //星期数减1
 628   3                                        down_flag=1;
 629   3                                                                        if(temp==0)
 630   3                                                                        temp=7;
 631   3                                                                        temp=temp/10*16+temp%10;
 632   3                                                                        break;
 633   3                                                 case 5:
 634   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 635   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 636   3                                                                        temp=temp-1;  //日数减1
 637   3                                        down_flag=1;
 638   3                                                                        if(temp==0)
 639   3                                                                        temp=31;
 640   3                                                                        temp=temp/10*16+temp%10;
 641   3                                                                        break;
 642   3                                                 case 6:
 643   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 644   3                                                                        temp=((temp&0x70)>>4)*10 + (temp&0x0F);
 645   3                                                                        temp=temp-1;  //月数减1
 646   3                                        down_flag=1;
 647   3                                                                        if(temp==0)
 648   3                                                                        temp=12;
 649   3                                                                        temp=temp/10*16+temp%10;
 650   3                                                                        break;
 651   3                                                 case 7:
 652   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 653   3                                                                        temp=((temp&0xf0)>>4)*10 + (temp&0x0F);
 654   3                                                                        temp=temp-1;  //年数减1
 655   3                                        down_flag=1;
 656   3                                                                        if(temp==-1)
 657   3                                                                        temp=99;
 658   3                                                                        temp=temp/10*16+temp%10;
 659   3                                                                        break;
 660   3                                                    default:break;
 661   3                                               }
 662   2                                               
 663   2                                       //  while(Down==0);
 664   2                                        }
 665   1      }
 666          
 667          //**************************
 668          //模式选择按键
 669          //**************************
 670          void Setkey()
 671          {
C51 COMPILER V8.02   DS1302                                                                07/24/2009 15:01:33 PAGE 12  

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

⌨️ 快捷键说明

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