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

📄 all.lst

📁 ds18b20测温程序,在keilc51调适通过
💻 LST
📖 第 1 页 / 共 4 页
字号:
 468   2              ID[Num][i]=ISP_DATA;    //读一个字节
 469   2         }
 470   1        ISP_CONTR=0x00;           //关ISP功能
 471   1      }
 472                                                                                                                     
 473          /*ISP写DS18B20 ID程序                                           */
 474          /*入口参数:1,DS18b20编号(0-4)                                */
 475          /*全局变量:DS18B20的ID号存储区:ID[5][8]                       */
 476          /*功    能:将某个DS18B20的8字节ID写入某个扇区内(扇区必须为空)*/
 477          void ISP_Write8(unsigned char Num)
 478          {
 479   1        unsigned char i;
 480   1        ISP_CONTR=0x81;                   //允许ISP功能,并配制等待时间
 481   1        ISP_CMD=ISP_WeiteByte ;   //送ISP字节写指令
 482   1        ISP_ADDRH=0x20+Num*0x02;  //送地址高字节
 483   1        for(i=0;i<8;i++)                      //写8字节
 484   1         {
 485   2          ISP_ADDRL=0x00+i;           //送地址低字节,均从每个扇区的起始地址开始
 486   2              ISP_DATA=ID[Num][i];    //送待写入的一个字节
 487   2              ISP_TRIG=0x46;
 488   2              ISP_TRIG=0xB9;                  //触发ISP指令
 489   2              Delay_short(1);                 //短暂延时
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 9   

 490   2         }
 491   1        ISP_CONTR=0x00;           //关ISP功能
 492   1      }
 493          
 494          /*ISP擦除扇区指令                                */
 495          /*入口参数:对应扇区的器件号(0-4)              */
 496          /*全局变量:无                                   */
 497          /*功    能:将某个扇区擦除                       */
 498          void ISP_Eraser(unsigned char Num)
 499          {
 500   1        ISP_CONTR=0x81;                    //允许ISP功能,并配制等待时间
 501   1        ISP_CMD=ISP_Erase ;        //送ISP擦除扇区指令
 502   1        ISP_ADDRH=0x20+Num*0x02;   //送地址高字节
 503   1        ISP_ADDRL=0x00;                    //送地址低字节,均从每个扇区的起始地址开始
 504   1        ISP_TRIG=0x46;
 505   1        ISP_TRIG=0xB9;                        //触发ISP指令
 506   1        Delay_short(1);                       //短暂延时
 507   1        ISP_CONTR=0x00;           //关ISP功能
 508   1      }
 509          
 510          ////////////////////////////////////////////////
 511          /******************程序预定义******************/
 512          ////////////////////////////////////////////////
 513          
 514          void Auto_Mode(void);    //自动模式程序
 515          void Hand_Mode(viod);    //手动模式程序
 516          void ID_Mode(void);          //显示ID模式程序
 517          void Alarm_Set(void);    //报警设置程序
 518          void Menu_Function(void);//菜单处理功能
 519          
 520          /****自动切换温度显示模式程序****/
 521          /*功能:自动从切换显示温度  */
 522          void Auto_Mode()
 523          { unsigned char i;
 524   1        LCD_Initial();         
 525   1        GotoXY(12,1);                                   
 526   1        Print("Auto");
 527   1         while(1)
 528   1       {
 529   2        for(i=0;i<5;i++)
 530   2        {
 531   3          DS_ReadTemp(i);       //循环显示温度和TH,TL
 532   3          TempDisp(i);
 533   3              ThTlDisp(i,2);
 534   3          Alarm();
 535   3              Menu_Function();  //菜单处理
 536   3          Delay_long(200);  //延时
 537   3          Delay_long(200);
 538   3          Delay_long(200);
 539   3          Delay_long(200);
 540   3         }
 541   2       }
 542   1      }       
 543          
 544          /****手动切换温度显示模式程序****/
 545          /*功能:按Down键切换显示    */
 546          void Hand_Mode()
 547          {
 548   1        LCD_Initial();
 549   1        GotoXY(0,1);                                    
 550   1        Print("Hand Mode");
 551   1        GotoXY(9,2);
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 10  

 552   1        Print("S U D Q");
 553   1        while(1)                                        //主菜单循环
 554   1        {
 555   2         unsigned char Key1=Key_scan();                 
 556   2         if(Key1==SET)              //如果按SET键
 557   2          {Delay_long(50);              //延时0.25S等待释放按键
 558   3           if(Key_scan()==0)            //释放后操作
 559   3           {
 560   4            unsigned char i=0;
 561   4                LCD_Initial();
 562   4                GotoXY(12,1);                                                   
 563   4                Print("Hand");                 //显示模式
 564   4                while(1)
 565   4                {
 566   5                  unsigned char Key2=Key_scan();                
 567   5                      DS_ReadTemp(i);
 568   5              TempDisp(i);         //显示NO.i的温度
 569   5                      ThTlDisp(i,2);
 570   5                      Alarm();
 571   5                  if(Key2==DOWN)       //如果按DOWN键
 572   5                   {
 573   6                    Delay_long(50);    //延时0.25S等待释放按键
 574   6                    if(Key_scan()==0)  //按键抬起后执行
 575   6                    {
 576   7                      i=i+1;               //指针加1
 577   7                              if(i>4)
 578   7                               i=0;                                      
 579   7                    }
 580   6                   }
 581   5                      else if(Key2==QUIT)      //按QUIT返回自动模式
 582   5                       {Delay_long(50);                                         
 583   6                         if(Key_scan()==0)                              
 584   6                              {
 585   7                                Auto_Mode();
 586   7                              }
 587   6                       }      
 588   5              } 
 589   4               }
 590   3          }   
 591   2         else if(Key1==DOWN)
 592   2          {Delay_long(50);
 593   3               if(Key_scan()==0)
 594   3                {
 595   4                 ID_Mode();
 596   4                }
 597   3               }
 598   2         else if(Key1==UP)
 599   2          {Delay_long(50);
 600   3               if(Key_scan()==0)
 601   3                {
 602   4                 Alarm_Set();
 603   4                }
 604   3               }
 605   2         else if(Key1==QUIT)
 606   2          {Delay_long(50);            //延时0.25S等待释放按键
 607   3           if(Key_scan()==0)          //释放后操作
 608   3           {
 609   4                Auto_Mode();
 610   4           }
 611   3          }   
 612   2        }
 613   1      } 
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 11  

 614          
 615          /****显示DS18B20序列号模式程序****/
 616          /*功能:显示或替换器件ID         */
 617          void ID_Mode(void)                             
 618          {
 619   1       LCD_Initial();
 620   1       GotoXY(0,1);                                     
 621   1       Print(" ID Mode ");
 622   1       GotoXY(9,2);
 623   1       Print("S U D Q") ;
 624   1       while(1)                                       //主菜单循环
 625   1       {
 626   2        unsigned char Key1=Key_scan();                  
 627   2        if(Key1==SET)             //如果按SET键
 628   2         {Delay_long(50);                 //延时0.25S等待释放按键
 629   3          if(Key_scan()==0)           //释放后操作
 630   3          {
 631   4           unsigned char i=0;
 632   4               LCD_Initial();
 633   4               GotoXY(0,1);
 634   4               Print("Please Press D");
 635   4           GotoXY(10,2);                                                        
 636   4               Print("C D Q ");               //显示有效按键
 637   4                while(1)              //进入二级菜单循环
 638   4                {
 639   5                 unsigned char Key2=Key_scan();                 
 640   5                 if(Key2==DOWN)      //如果按DOWN键
 641   5                  {
 642   6                   Delay_long(50);   //延时0.25S等待释放按键
 643   6                   if(Key_scan()==0) //按键抬起后执行
 644   6                   {
 645   7                        i=i+1;
 646   7                        switch(i)
 647   7                         {
 648   8                               case 1 :Show_ID(0);break;
 649   8                               case 2 :Show_ID(1);break;
 650   8                               case 3 :Show_ID(2);break;
 651   8                               case 4 :Show_ID(3);break;
 652   8                               case 5 :Show_ID(4);break;
 653   8                               case 6 :i=0;break;
 654   8                         }
 655   7                   }
 656   6                  }
 657   5                 else if(Key2==CHANGE)      //如果按CHANGE键
 658   5                      {Delay_long(200);
 659   6                       Delay_long(200);                 //延时两秒
 660   6                       if(Key_scan()==0)
 661   6                        {
 662   7                              DS_ReadID(i-1);
 663   7                              Show_ID(i-1);
 664   7                              ISP_Eraser(i-1);
 665   7                              ISP_Write8(i-1);
 666   7                        }
 667   6                      }
 668   5      
 669   5                  else if(Key2==QUIT) //按QUIT返回自动模式
 670   5                       {Delay_long(50);                                         
 671   6                         if(Key_scan()==0)                              
 672   6                              {
 673   7                               Auto_Mode();
 674   7                              }
 675   6                       }      
C51 COMPILER V7.20   ALL                                                                   01/16/2009 13:29:33 PAGE 12  

 676   5              } 
 677   4           }  
 678   3         }
 679   2         else if(Key1==DOWN)   //按DOWN键切换至报警设置模式
 680   2          {Delay_long(50);
 681   3               if(Key_scan()==0)
 682   3                {
 683   4                 Alarm_Set();
 684   4                }
 685   3               }
 686   2         else if(Key1==UP)     //按DOWN键切换至报警设置模式
 687   2          {Delay_long(50);
 688   3               if(Key_scan()==0)
 689   3                {
 690   4                 Hand_Mode();
 691   4                }
 692   3               }
 693   2         else if(Key1==QUIT)   //按QUIT返回自动模式
 694   2          {Delay_long(50);                                      
 695   3           if(Key_scan()==0)                                    
 696   3           {
 697   4                Auto_Mode();
 698   4           }
 699   3          }   
 700   2       }
 701   1      }
 702          
 703          /*修改器件TH和TL程序         */
 704          /*入口参数:器件序号(0-4)  */

⌨️ 快捷键说明

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