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

📄 w014.lst

📁 W014-多功能数字温度表(DS18B20)
💻 LST
📖 第 1 页 / 共 3 页
字号:
 253   1           
 254   1           return(presence) ; //返回presence
 255   1      }
 256          
 257          /*******************************************************************/
 258          /*                                                                 */
 259          /* 读一个字节数据                                                  */
 260          /*                                                                 */
 261          /*******************************************************************/
 262          ReadOneChar(void)        
 263          {
 264   1        unsigned char i = 0 ;
 265   1        unsigned char dat = 0 ;
 266   1      
 267   1        for (i = 8 ; i > 0 ; i--)
 268   1          {
 269   2            DQ = 0 ;    
 270   2            dat >>= 1 ;
 271   2            DQ = 1 ;    
 272   2      
 273   2            if(DQ)
 274   2              dat |= 0x80 ;
 275   2              Delay(4) ;
 276   2          }
 277   1      
 278   1          return (dat) ;
 279   1      }
 280          
 281          /*******************************************************************/
 282          /*                                                                 */
 283          /* 写一个字节数据                                                  */
 284          /*                                                                 */
 285          /*******************************************************************/
 286          WriteOneChar(unsigned char dat) 
 287          {
 288   1        unsigned char i = 0 ;
 289   1        for (i = 8 ; i > 0 ; i--)
 290   1        {
 291   2          DQ = 0 ;
 292   2          DQ = dat&0x01 ;
 293   2          Delay(5) ;
 294   2      
 295   2          DQ = 1 ;
 296   2          dat>>=1 ;
 297   2        }
 298   1      }
 299          
 300          /*******************************************************************/
 301          /*                                                                 */
 302          /* 读取温度数据                                                    */
C51 COMPILER V8.02   W014                                                                  06/07/2007 21:46:16 PAGE 6   

 303          /*                                                                 */
 304          /*******************************************************************/
 305          ReadTemperature(void)    
 306          {
 307   1           DS18B20_Init() ;
 308   1        
 309   1           WriteOneChar(0xCC) ;  //跳过读序号列号的操作
 310   1           WriteOneChar(0x44) ;  //启动温度转换
 311   1      
 312   1           DS18B20_Init() ;
 313   1           WriteOneChar(0xCC) ;  //跳过读序号列号的操作
 314   1           WriteOneChar(0xBE) ;  //读取温度寄存器
 315   1      
 316   1           temp_data[0] = ReadOneChar() ;   //读温度低8位
 317   1           temp_data[1] = ReadOneChar() ;   //读温度高8位 
 318   1      }
 319          
 320          /*******************************************************************/
 321          /*                                                                 */
 322          /* 温度数据转换和显示                                              */
 323          /*                                                                 */
 324          /*******************************************************************/
 325          TemperatureDisplay()    
 326          {
 327   1        dis_data[4]=temp_data[0]&0x0f ;              //temp_data[0]低4为有效
 328   1        dis_data[3]=ditab[dis_data[4]]+0x30;     //查表得小数位的值
 329   1        
 330   1        dis_data[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 331   1        dis_data[2]=dis_data[4]%10+0x30;                 //个位
 332   1        dis_data[1]=(dis_data[4]/10)%10+0x30;    //十位
 333   1        dis_data[0]=dis_data[4]/100+0x30;                //百位
 334   1      
 335   1          if(dis_data[0]==0x30)        //百位为0,不显示
 336   1         { 
 337   2           dis_data[0]=0x20;
 338   2                             
 339   2           if(dis_data[1]==0x30)       //十位为0,不显示
 340   2             dis_data[1]=0x20 ;
 341   2         }
 342   1      
 343   1           LCD_DisplayPosit(0x48) ;             
 344   1           LCD_WriteDate(dis_data[0]) ;        //百位数显示 
 345   1           LCD_DisplayPosit(0x49) ;             
 346   1           LCD_WriteDate(dis_data[1]) ;        //十位数显示 
 347   1           LCD_DisplayPosit(0x4a) ;             
 348   1           LCD_WriteDate(dis_data[2]) ;        //个位数显示 
 349   1           LCD_DisplayPosit(0x4c) ;             
 350   1           LCD_WriteDate(dis_data[3]) ;        //小数位数显示
 351   1               LCD_WriteMytab() ;                  //自定义字符(度的符号)写入CGRAM
 352   1           Delay(5) ;
 353   1           LCD_DisplayPosit(0x4d) ;
 354   1           LCD_WriteDate(0x00) ;               //显示自定义字符(度的符号)
 355   1      
 356   1      }
 357          
 358          /*******************************************************************/
 359          /*                                                                 */
 360          /* DS18B20 OK 界面显示                                             */
 361          /*                                                                 */
 362          /*******************************************************************/
 363          void  DS18B20_OkMenu ()   
 364          { 
C51 COMPILER V8.02   W014                                                                  06/07/2007 21:46:16 PAGE 7   

 365   1           LCD_DisplayLine(dis_code1,dis_code2); 
 366   1      }
 367          
 368          /*******************************************************************/
 369          /*                                                                 */
 370          /* DS18B20 ERROR 界面显示                                          */
 371          /*                                                                 */
 372          /*******************************************************************/
 373          void  DS18B20_ErrorMenu () 
 374          {
 375   1           LCD_DisplayLine(dis_code3,dis_code4);
 376   1      }
 377          
 378          
 379          /*******************************************************************/
 380          /*                                                                 */
 381          /* 蜂鸣器响一声                                                    */
 382          /*                                                                 */
 383          /*******************************************************************/
 384          void Beep()
 385            {
 386   1          unsigned char y ;
 387   1          for (y=0 ;y<100 ;y++)
 388   1          {
 389   2            Delay(60) ;
 390   2            BEEP=!BEEP ;      //BEEP取反
 391   2          } 
 392   1          BEEP=1 ;            //关闭蜂鸣器
 393   1          Delayms(20) ;
 394   1        }
 395          
 396          
 397          /*******************************************************************/
 398          /*                                                                 */
 399          /* 温度高于上限时显示                                              */
 400          /*                                                                 */
 401          /*******************************************************************/
 402          
 403          void DisplayTHMenu()
 404          {
 405   1           uchar code  dis_code5[ ] = {"  TEMP>TH     C "} ;
 406   1               uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;
 407   1      
 408   1           LCD_DisplayLine(dis_code5,dis_code6);
 409   1      
 410   1               LCD_WriteMytab() ;        //自定义字符写入CGRAM
 411   1           Delay(5) ;                            //显示自定义字符
 412   1           LCD_DisplayPosit(0x0D) ;
 413   1           LCD_WriteDate(0x00) ;
 414   1           Delay(5) ;
 415   1           LCD_DisplayPosit(0x4d) ;
 416   1           LCD_WriteDate(0x00) ; 
 417   1      
 418   1               display_TH[0] = TH/10+0x30;
 419   1           display_TH[1] = TH%10+0x30;
 420   1      
 421   1               LCD_DisplayPosit(0x0B) ;             
 422   1           LCD_WriteDate(display_TH[0]) ;
 423   1               LCD_DisplayPosit(0x0C) ;             
 424   1           LCD_WriteDate(display_TH[1]) ;
 425   1      }
 426          
C51 COMPILER V8.02   W014                                                                  06/07/2007 21:46:16 PAGE 8   

 427          /*******************************************************************/
 428          /*                                                                 */
 429          /* 温度低于下限时显示                                              */
 430          /*                                                                 */
 431          /*******************************************************************/
 432          
 433          void DisplayTLMenu()
 434          {
 435   1           uchar code  dis_code5[ ] = {"  TEMP<TL     C "} ;
 436   1               uchar code  dis_code6[ ] = {"  TEMP:    .  C "} ;
 437   1      
 438   1           LCD_DisplayLine(dis_code5,dis_code6);
 439   1      
 440   1               LCD_WriteMytab() ;        //自定义字符写入CGRAM
 441   1           Delay(5) ;                            //显示自定义字符
 442   1           LCD_DisplayPosit(0x0D) ;
 443   1           LCD_WriteDate(0x00) ;
 444   1           Delay(5) ;
 445   1           LCD_DisplayPosit(0x4d) ;
 446   1           LCD_WriteDate(0x00) ;          
 447   1      
 448   1               display_TL[0] = TL/10+0x30;
 449   1           display_TL[1] = TL%10+0x30;
 450   1      
 451   1               LCD_DisplayPosit(0x0B) ;             
 452   1           LCD_WriteDate(display_TL[0]) ;
 453   1               LCD_DisplayPosit(0x0C) ;             
 454   1           LCD_WriteDate(display_TL[1]) ;
 455   1      
 456   1      
 457   1      }
 458          
 459          /*******************************************************************/
 460          /*                                                                 */
 461          /* 扫描设置键                                                      */
 462          /*                                                                 */
 463          /*******************************************************************/
 464          void SetKeyScan()
 465          {
 466   1        if(S1==0)
 467   1        {     
 468   2          Delay(1000);
 469   2              if(S1==0)
 470   2              {
 471   3                Keyset_Flag = 1;
 472   3                Delay(200);
 473   3              }
 474   2        }
 475   1      }
 476          
 477          /*******************************************************************/
 478          /*                                                                 */
 479          /* 扫描处理键                                                      */
 480          /*                                                                 */
 481          /*******************************************************************/
 482          unsigned char KeyworthScan()
 483          {
 484   1              unsigned char key_s;
 485   1              key_s = 0x00;
 486   1              key_s |= S1;
 487   1              key_s <<= 1;
 488   1              key_s |= S2;
C51 COMPILER V8.02   W014                                                                  06/07/2007 21:46:16 PAGE 9   

 489   1              key_s <<= 1;
 490   1              key_s |= S3;
 491   1              return key_s;           
 492   1      }
 493          
 494          /*******************************************************************/
 495          /*                                                                 */
 496          /* 温度上限设置界面上限值显示                                      */
 497          /*                                                                 */
 498          /*******************************************************************/
 499          void DisplayTH()
 500          {
 501   1         display_TH[0] = TH/10+0x30;
 502   1         display_TH[1] = TH%10+0x30;
 503   1      
 504   1           LCD_DisplayPosit(0x4b) ;             
 505   1           LCD_WriteDate(display_TH[0]) ;
 506   1               LCD_DisplayPosit(0x4c) ;             
 507   1           LCD_WriteDate(display_TH[1]) ;
 508   1      }
 509          
 510          /*******************************************************************/
 511          /*                                                                 */
 512          /* 温度上限设置界面显示                                            */
 513          /*                                                                 */
 514          /*******************************************************************/

⌨️ 快捷键说明

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