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

📄 ds1302.lst

📁 1302是用来输出北京时间的,18b20用来检测温度,输出在ds1302上显示,有仿真文件
💻 LST
📖 第 1 页 / 共 4 页
字号:
 456   2                        if(DQ)
 457   2                        dat|=0x80;
 458   2                        delay_18B20(4);
 459   2               }
 460   1              return(dat);
 461   1      }
 462          
 463          /*************ds18b20写一个字节****************/  
 464          
 465          void WriteOneChar(uchar dat)
 466          {
 467   1              unsigned char i=0;
 468   1              for (i=8; i>0; i--)
 469   1              {
 470   2                      DQ = 0;
 471   2                      DQ = dat&0x01;
 472   2              delay_18B20(5);
 473   2                      DQ = 1;
 474   2              dat>>=1;
 475   2       }
 476   1      }
 477          
 478          /**************读取ds18b20当前温度************/
 479          
 480          void ReadTemp(void)
 481          {
 482   1              unsigned char a=0;
 483   1              unsigned char b=0;
 484   1              unsigned char t=0;
 485   1      
 486   1              Init_DS18B20();
 487   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 9   

 488   1              WriteOneChar(0x44);     // 启动温度转换
 489   1      
 490   1              delay_18B20(100);       // this message is wery important
 491   1      
 492   1              Init_DS18B20();
 493   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 494   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 495   1      
 496   1              delay_18B20(100);
 497   1      
 498   1              a=ReadOneChar();        //读取温度值低位
 499   1              b=ReadOneChar();                //读取温度值高位
 500   1              temp_value=b<<4;
 501   1              temp_value+=(a&0xf0)>>4;               
 502   1      }
 503          void temp_to_str()   //温度数据转换成液晶字符显示
 504          {
 505   1        TempBuffer[0]=temp_value/10+'0';  //十位
 506   1        TempBuffer[1]=temp_value%10+'0';  //个位
 507   1        TempBuffer[2]=0xdf;   //温度符号
 508   1        TempBuffer[3]='C';
 509   1        TempBuffer[4]='\0';
 510   1      }
 511          void Delay1ms(unsigned int count)
 512          {
 513   1              unsigned int i,j;
 514   1              for(i=0;i<count;i++)
 515   1              for(j=0;j<120;j++);
 516   1      }
 517          
 518          /*延时子程序*/
 519          void mdelay(uint delay)
 520          {       uint i;
 521   1              for(;delay>0;delay--)
 522   1                      {for(i=0;i<62;i++) //1ms延时.
 523   2                      {;}
 524   2                      }
 525   1      }
 526          
 527          
 528          void outkey()                    //跳出调整模式,返回默认显示
 529          { uchar Second;
 530   1        if(out==0||wireless_1==1)         
 531   1        { mdelay(8); 
 532   2              count=0;
 533   2              hide_sec=0,hide_min=0,hide_hour=0,hide_day=0,hide_week=0,hide_month=0,hide_year=0;
 534   2              Second=Read1302(DS1302_SECOND);
 535   2          Write1302(0x8e,0x00); //写入允许
 536   2              Write1302(0x80,Second&0x7f);
 537   2              Write1302(0x8E,0x80);          //禁止写入
 538   2              done=0;           
 539   2              while(out==0);
 540   2              while(wireless_1==1);
 541   2        }
 542   1      }
 543          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 544          void Upkey()//升序按键
 545          {          
 546   1                      Up=1;
 547   1                      if(Up==0||wireless_2==1)
 548   1                                {
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 10  

 549   2                                         mdelay(8);
 550   2                                             switch(count)
 551   2                                                {case 1:
 552   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 553   3                                                                        temp=temp+1;  //秒数加1
 554   3                                        up_flag=1;    //数据调整后更新标志
 555   3                                                                        if((temp&0x7f)>0x59)   //超过59秒,清零
 556   3                                        temp=0;                                                                 
 557   3                                                                        break;
 558   3                                                 case 2:
 559   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 560   3                                                                        temp=temp+1;  //分数加1
 561   3                                        up_flag=1;
 562   3                                                                        if(temp>0x59)          //超过59分,清零
 563   3                                                                        temp=0;
 564   3                                                                        break;
 565   3                                                 case 3:
 566   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 567   3                                                                        temp=temp+1;  //小时数加1
 568   3                                        up_flag=1;
 569   3                                                                        if(temp>0x23)   //超过23小时,清零
 570   3                                                                        temp=0;
 571   3                                                                        break;
 572   3                                                 case 4:
 573   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 574   3                                                                        temp=temp+1;  //星期数加1
 575   3                                        up_flag=1;
 576   3                                                                        if(temp>0x7)  
 577   3                                                                        temp=1;
 578   3                                                                        break;
 579   3                                                 case 5:
 580   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 581   3                                                                        temp=temp+1;  //日数加1
 582   3                                        up_flag=1;
 583   3                                                                        if(temp>0x31)
 584   3                                                                        temp=1;
 585   3                                                                        break;
 586   3                                                 case 6:
 587   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 588   3                                                                        temp=temp+1;  //月数加1
 589   3                                        up_flag=1;
 590   3                                                                        if(temp>0x12)
 591   3                                                                        temp=1;
 592   3                                                                        break;
 593   3                                                 case 7:
 594   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 595   3                                                                        temp=temp+1;  //年数加1
 596   3                                        up_flag=1;
 597   3                                                                        if(temp>0x85)
 598   3                                                                        temp=0;
 599   3                                                                        break;
 600   3                                                     default:break;
 601   3                                                }
 602   2                                                
 603   2                                         while(Up==0);
 604   2                             while(wireless_2==1);
 605   2                                        }
 606   1      }
 607          
 608          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 609          void Downkey()//降序按键
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 11  

 610          {           
 611   1                      Down=1;
 612   1                  if(Down==0||wireless_3==1)
 613   1                                {
 614   2                                         mdelay(8);
 615   2                                           switch(count)
 616   2                                                {case 1:
 617   3                                        temp=Read1302(DS1302_SECOND);  //读取秒数
 618   3                                                                        temp=temp-1;                                              //秒数减1
 619   3                                        down_flag=1;       //数据调整后更新标志
 620   3                                                                        if(temp==0x7f)     //小于0秒,返回59秒
 621   3                                                                        temp=0x59;
 622   3                                                                        break;
 623   3                                                 case 2:
 624   3                                        temp=Read1302(DS1302_MINUTE);  //读取分数
 625   3                                                                        temp=temp-1;  //分数减1
 626   3                                        down_flag=1;
 627   3                                                                        if(temp==-1)
 628   3                                                                        temp=0x59;      //小于0秒,返回59秒
 629   3                                                                        break;
 630   3                                                 case 3:
 631   3                                        temp=Read1302(DS1302_HOUR);  //读取小时数
 632   3                                                                        temp=temp-1;  //小时数减1
 633   3                                        down_flag=1;
 634   3                                                                        if(temp==-1)
 635   3                                                                        temp=0x23;
 636   3                                                                        break;
 637   3                                                 case 4:
 638   3                                        temp=Read1302(DS1302_WEEK);  //读取星期数
 639   3                                                                        temp=temp-1;  //星期数减1
 640   3                                        down_flag=1;
 641   3                                                                        if(temp==0)
 642   3                                                                        temp=0x7;;
 643   3                                                                        break;
 644   3                                                 case 5:
 645   3                                        temp=Read1302(DS1302_DAY);  //读取日数
 646   3                                                                        temp=temp-1;  //日数减1
 647   3                                        down_flag=1;
 648   3                                                                        if(temp==0)
 649   3                                                                        temp=31;
 650   3                                                                        break;
 651   3                                                 case 6:
 652   3                                        temp=Read1302(DS1302_MONTH);  //读取月数
 653   3                                                                        temp=temp-1;  //月数减1
 654   3                                        down_flag=1;
 655   3                                                                        if(temp==0)
 656   3                                                                        temp=12;
 657   3                                                                        break;
 658   3                                                 case 7:
 659   3                                        temp=Read1302(DS1302_YEAR);  //读取年数
 660   3                                                                        temp=temp-1;  //年数减1
 661   3                                        down_flag=1;
 662   3                                                                        if(temp==-1)
 663   3                                                                        temp=0x85;
 664   3                                                                        break;
 665   3                                                    default:break;
 666   3                                               }
 667   2                                               
 668   2                                         while(Down==0);
 669   2                                         while(wireless_3==1);
 670   2                                        }
 671   1      }
C51 COMPILER V7.50   DS1302                                                                04/30/2008 22:40:42 PAGE 12  

 672          
 673          void Setkey()//模式选择按键
 674          {
 675   1                      Set=1;
 676   1                      if(Set==0||wireless_4==1)
 677   1                  {
 678   2                 mdelay(8);
 679   2                 count=count+1;        //Setkey按一次,count就加1
 680   2                         done=1;                       //进入调整模式
 681   2                 while(Set==0);
 682   2                 while(wireless_4==1);
 683   2                       }
 684   1      
 685   1      }

⌨️ 快捷键说明

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