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

📄 ds1302.lst

📁 DS1302时钟+DS18B20+无线遥控应用程序 还有仿真
💻 LST
📖 第 1 页 / 共 4 页
字号:
 408   1      }
 409          void temp_to_str()   //温度数据转换成液晶字符显示
 410          {
 411   1        TempBuffer[0]=temp_value/10+'0';  //十位
 412   1        TempBuffer[1]=temp_value%10+'0';  //个位
 413   1        TempBuffer[2]=0xdf;   //温度符号
 414   1        TempBuffer[3]='C';
 415   1        TempBuffer[4]='\0';
 416   1      }
 417          void Delay1ms(unsigned int count)
 418          {
 419   1              unsigned int i,j;
 420   1              for(i=0;i<count;i++)
 421   1              for(j=0;j<120;j++);
 422   1      }
 423          
 424          /*延时子程序*/
 425          void mdelay(uint delay)
C51 COMPILER V7.20   DS1302                                                                09/12/2007 14:29:53 PAGE 8   

 426          {       uint i;
 427   1              for(;delay>0;delay--)
 428   1                      {for(i=0;i<62;i++) //1ms延时.
 429   2                      {;}
 430   2                      }
 431   1      }
 432          
 433          
 434          void outkey()                    //跳出调整模式,返回默认显示
 435          { uchar Second;
 436   1        if(out==0||wireless_1==1)         
 437   1        { mdelay(8); 
 438   2              count=0;
 439   2              hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 440   2              Second=Read1302(DS1302_SECOND);
 441   2          Write1302(0x8e,0x00); //写入允许
 442   2              Write1302(0x80,Second&0x7f);
 443   2              Write1302(0x8E,0x80);          //禁止写入
 444   2              done=0;           
 445   2              while(out==0);
 446   2              while(wireless_1==1);
 447   2        }
 448   1      }
 449          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 450          void Upkey()//升序按键
 451          {          
 452   1                      Up=1;
 453   1                      if(Up==0||wireless_2==1)
 454   1                                {
 455   2                                         mdelay(8);
 456   2                                             switch(count)
 457   2                                                {case 1:
 458   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 459   3                                                                        temp=temp+1;  //秒数加1
 460   3                                        up_flag=1;    //数据调整后更新标志
 461   3                                                                        if((temp&0x7f)>0x59)   //超过59秒,清零
 462   3                                        temp=0;                                                                 
 463   3                                                                        break;
 464   3                                                 case 2:
 465   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 466   3                                                                        temp=temp+1;  //分数加1
 467   3                                        up_flag=1;
 468   3                                                                        if(temp>0x59)          //超过59分,清零
 469   3                                                                        temp=0;
 470   3                                                                        break;
 471   3                                                 case 3:
 472   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 473   3                                                                        temp=temp+1;  //小时数加1
 474   3                                        up_flag=1;
 475   3                                                                        if(temp>0x23)   //超过23小时,清零
 476   3                                                                        temp=0;
 477   3                                                                        break;
 478   3                                                 case 4:
 479   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 480   3                                                                        temp=temp+1;  //星期数加1
 481   3                                        up_flag=1;
 482   3                                                                        if(temp>0x7)  
 483   3                                                                        temp=1;
 484   3                                                                        break;
 485   3                                                 case 5:
 486   3                                        temp=Read1302(DS1302_DAY);  //读取日数
C51 COMPILER V7.20   DS1302                                                                09/12/2007 14:29:53 PAGE 9   

 487   3                                                                        temp=temp+1;  //日数加1
 488   3                                        up_flag=1;
 489   3                                                                        if(temp>0x31)
 490   3                                                                        temp=1;
 491   3                                                                        break;
 492   3                                                 case 6:
 493   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 494   3                                                                        temp=temp+1;  //月数加1
 495   3                                        up_flag=1;
 496   3                                                                        if(temp>0x12)
 497   3                                                                        temp=1;
 498   3                                                                        break;
 499   3                                                 case 7:
 500   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 501   3                                                                        temp=temp+1;  //年数加1
 502   3                                        up_flag=1;
 503   3                                                                        if(temp>0x85)
 504   3                                                                        temp=0;
 505   3                                                                        break;
 506   3                                                     default:break;
 507   3                                                }
 508   2                                                
 509   2                                         while(Up==0);
 510   2                             while(wireless_2==1);
 511   2                                        }
 512   1      }
 513          
 514          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 515          void Downkey()//降序按键
 516          {           
 517   1                      Down=1;
 518   1                  if(Down==0||wireless_3==1)
 519   1                                {
 520   2                                         mdelay(8);
 521   2                                           switch(count)
 522   2                                                {case 1:
 523   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 524   3                                                                        temp=temp-1;                                              //秒数减1
 525   3                                        down_flag=1;       //数据调整后更新标志
 526   3                                                                        if(temp==0x7f)     //小于0秒,返回59秒
 527   3                                                                        temp=0x59;
 528   3                                                                        break;
 529   3                                                 case 2:
 530   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 531   3                                                                        temp=temp-1;  //分数减1
 532   3                                        down_flag=1;
 533   3                                                                        if(temp==-1)
 534   3                                                                        temp=0x59;      //小于0秒,返回59秒
 535   3                                                                        break;
 536   3                                                 case 3:
 537   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 538   3                                                                        temp=temp-1;  //小时数减1
 539   3                                        down_flag=1;
 540   3                                                                        if(temp==-1)
 541   3                                                                        temp=0x23;
 542   3                                                                        break;
 543   3                                                 case 4:
 544   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 545   3                                                                        temp=temp-1;  //星期数减1
 546   3                                        down_flag=1;
 547   3                                                                        if(temp==0)
C51 COMPILER V7.20   DS1302                                                                09/12/2007 14:29:53 PAGE 10  

 548   3                                                                        temp=0x7;;
 549   3                                                                        break;
 550   3                                                 case 5:
 551   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 552   3                                                                        temp=temp-1;  //日数减1
 553   3                                        down_flag=1;
 554   3                                                                        if(temp==0)
 555   3                                                                        temp=31;
 556   3                                                                        break;
 557   3                                                 case 6:
 558   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 559   3                                                                        temp=temp-1;  //月数减1
 560   3                                        down_flag=1;
 561   3                                                                        if(temp==0)
 562   3                                                                        temp=12;
 563   3                                                                        break;
 564   3                                                 case 7:
 565   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 566   3                                                                        temp=temp-1;  //年数减1
 567   3                                        down_flag=1;
 568   3                                                                        if(temp==-1)
 569   3                                                                        temp=0x85;
 570   3                                                                        break;
 571   3                                                    default:break;
 572   3                                               }
 573   2                                               
 574   2                                         while(Down==0);
 575   2                                         while(wireless_3==1);
 576   2                                        }
 577   1      }
 578          
 579          void Setkey()//模式选择按键
 580          {
 581   1                      Set=1;
 582   1                      if(Set==0||wireless_4==1)
 583   1                  {
 584   2                 mdelay(8);
 585   2                 count=count+1;        //Setkey按一次,count就加1
 586   2                         done=1;                       //进入调整模式
 587   2                 while(Set==0);
 588   2                 while(wireless_4==1);
 589   2                       }
 590   1      
 591   1      }
 592          
 593          void keydone()//按键功能执行
 594          {        uchar Second;
 595   1                       if(flag==0)    //关闭时钟,停止计时
 596   1               { Write1302(0x8e,0x00); //写入允许
 597   2                 temp=Read1302(0x80);
 598   2                 Write1302(0x80,temp|0x80);
 599   2                     Write1302(0x8e,0x80); //禁止写入
 600   2                 flag=1;
 601   2               }
 602   1               Setkey();                                          //扫描模式切换按键
 603   1                       switch(count)
 604   1                       {case 1:do                                             //count=1,调整秒
 605   2                                {
 606   3                         outkey();                       //扫描跳出按钮
 607   3                                         Upkey();                //扫描加按钮
 608   3                                         Downkey();              //扫描减按钮
 609   3                                         if(up_flag==1||down_flag==1)  //数据更新,重新写入新的数据
C51 COMPILER V7.20   DS1302                                                                09/12/2007 14:29:53 PAGE 11  

 610   3                                         {
 611   4                                         Write1302(0x8e,0x00); //写入允许
 612   4                                         Write1302(0x80,temp|0x80); //写入新的秒数

⌨️ 快捷键说明

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