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

📄 ds18b20-lcd1602-c51.lst

📁 ds18b20温度显示程序 C语言编写的程序 1602 液晶显示
💻 LST
📖 第 1 页 / 共 3 页
字号:
 464   1          if(crc==0)                 //CRC效验正确
 465   1          {
 466   2                Disp_RomCode(2);             //显示64位序列码
 467   2          }
 468   1      }
 469          
 470          /*******************************************************************/
 471          /*                                                                 */
 472          /* DS18B20 ERROR 显示菜单                                          */
 473          /*                                                                 */
 474          /*******************************************************************/
 475          void  Error_Menu ()
 476          {
 477   1           uchar  m;
 478   1           lcd_init();                //初始化LCD 
 479   1              
 480   1               lcd_pos(0);                //设置显示位置为第一行的第1个字符
 481   1           for(m=0;m<16;m++) 
 482   1           lcd_wdat(cdis3[m]);        //显示字符
 483   1          
 484   1           lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 485   1           for(m=0;m<16;m++) 
 486   1           lcd_wdat(cdis4[m]);        //显示字符
 487   1      }
 488          
 489          /*******************************************************************/
C51 COMPILER V8.08   DS18B20_LCD1602_C51                                                   03/21/2009 19:07:17 PAGE 9   

 490          /*                                                                 */
 491          /* DS18B20 正常显示菜单                                            */
 492          /*                                                                 */
 493          /*******************************************************************/
 494          void  Natural_Menu ()
 495          {
 496   1         uchar  m;
 497   1         lcd_init();                //初始化LCD 
 498   1      
 499   1         lcd_pos(0);                //设置显示位置为第一行的第1个字符
 500   1         for(m=0;m<16;m++) 
 501   1         lcd_wdat(cdis5[m]);        //显示字符
 502   1      
 503   1         lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 504   1         for(m=0;m<16;m++) 
 505   1         lcd_wdat(cdis6[m]);        //显示字符
 506   1      
 507   1         Read_Temperature();
 508   1         Disp_Temp_alarm(0x43,0);   //显示TH值
 509   1         Disp_Temp_alarm(0x4b,1);   //显示TL值
 510   1         Disp_Temperature();        //显示实时温度值
 511   1      }
 512          
 513          
 514          /*********************************************************/
 515          // 显示报警温度
 516          /*********************************************************/
 517          void Disp_Temp_alarm(uchar addr,uchar num)
 518          {   //0=TH,1=TL
 519   1         display1[2]=temp_alarm[num]/100+0x30;
 520   1         display1[0]=temp_alarm[num]%100;
 521   1         display1[1]=display1[0]/10+0x30;
 522   1         display1[0]=display1[0]%10+0x30;
 523   1      
 524   1          if(display1[2]==0x30)        //高位为0,不显示
 525   1          { 
 526   2            display1[2]=0x20;              
 527   2            if(display1[1]==0x30)      //次高位为0,不显示
 528   2            display1[1]=0x20;
 529   2          }
 530   1      
 531   1          lcd_pos(addr);
 532   1          lcd_wdat(display1[2]);        //百位数显示             
 533   1          lcd_wdat(display1[1]);        //十位数显示              
 534   1          lcd_wdat(display1[0]);        //个位数显示
 535   1      }    
 536          
 537          /**********************************************************/
 538          // Time0中断函数
 539          /**********************************************************/
 540          void Time0(void) interrupt 1 using 0
 541          {
 542   1         TH0=0x4c;        //50ms定时
 543   1         TL0=0x00;
 544   1         timecount++;
 545   1         if(timecount>9)
 546   1         {
 547   2          timecount=0;
 548   2          flag=~flag;         
 549   2         }
 550   1      }
 551          
C51 COMPILER V8.08   DS18B20_LCD1602_C51                                                   03/21/2009 19:07:17 PAGE 10  

 552          /*********************************************************/
 553          /*                                                       */
 554          /*小喇叭闪动                                             */
 555          /*                                                       */
 556          /*********************************************************/
 557          void  spk(uchar addr)
 558          {
 559   1         if(flag)
 560   1         {
 561   2           lcd_pos(addr);
 562   2           lcd_wdat(0x01);      //小喇叭显示
 563   2         }
 564   1         else
 565   1         {
 566   2           lcd_pos(addr);
 567   2           lcd_wdat(0x20);      //清屏
 568   2         }
 569   1      }
 570          
 571          /*********************************************************/
 572          // 温度比较函数
 573          /*********************************************************/
 574          void temp_compare()
 575          {    
 576   1          if(temp_comp >= temp_alarm[0])      //比较 TH 值
 577   1           {
 578   2             compare_th=1;                    
 579   2               }
 580   1              else  compare_th=0;
 581   1      
 582   1          if(temp_comp < temp_alarm[1])        //比较 TL 值
 583   1               {
 584   2                 compare_tl=1;
 585   2               }
 586   1              else  compare_tl=0;
 587   1           
 588   1              if(compare_th)
 589   1               {
 590   2                 spk(0x46);            //小喇叭闪动
 591   2             if(!alarm_on_off)     //静音选择
 592   2                 beep();
 593   2                 count=temp_alarm[0];
 594   2               }
 595   1              else 
 596   1               {
 597   2             lcd_pos(0x46);
 598   2             lcd_wdat(0x20);
 599   2               }
 600   1              if(compare_tl)
 601   1               {
 602   2                 spk(0x4e);           //小喇叭闪动
 603   2             if(!alarm_on_off)    //静音选择
 604   2                 beep();
 605   2                 count=temp_alarm[1];
 606   2               }
 607   1              else 
 608   1               {
 609   2             lcd_pos(0x4e);
 610   2             lcd_wdat(0x20);
 611   2               }
 612   1      }   
 613          
C51 COMPILER V8.08   DS18B20_LCD1602_C51                                                   03/21/2009 19:07:17 PAGE 11  

 614          /*********************************************************/
 615          // 温度报警值闪动
 616          /*********************************************************/
 617          void  Set_tempalarm_Flash(uchar addr,uchar num)
 618          {
 619   1         if(flag)
 620   1         {
 621   2           temp_alarm[num]=count;
 622   2           Disp_Temp_alarm(addr,num);  //显示温度报警值
 623   2         }
 624   1         else
 625   1         {
 626   2           lcd_pos(addr);
 627   2           lcd_wdat(0x20);
 628   2               lcd_wdat(0x20);
 629   2               lcd_wdat(0x20);
 630   2         }
 631   1      }
 632          
 633          
 634          /*******************************************************************/
 635          /*                                                                 */
 636          /* 主函数                                                          */
 637          /*                                                                 */
 638          /*******************************************************************/
 639          void main()
 640           {
 641   1              uchar  m;
 642   1              TMOD=0x01; TH0=0x4c; TL0=0x00;                          //50ms定时
 643   1              EA=1; ET0=1; TR0=1;
 644   1              P0=0;
 645   1              P2&=0x1F;
 646   1              Init_DS18B20();
 647   1              Write_Temperature_alarm();                                      //设定报警上下限温度值
 648   1              if(presence)
 649   1          {
 650   2              Error_Menu ();
 651   2                      do
 652   2                      {  
 653   3                              Init_DS18B20();
 654   3                              beep();
 655   3                      }
 656   2                      while(presence);
 657   2          }
 658   1          
 659   1              RomCode_Menu ();                                                //显示RomCode
 660   1              for(m=0;m<10;m++)
 661   1              Delay(50000);
 662   1          Natural_Menu ();                                                    //正常显示界面
 663   1              Delay(50000);
 664   1              while(1)
 665   1              {
 666   2                      Read_Temperature();                                             //读取当前温度
 667   2                      Delay(50000);
 668   2                      Disp_Temperature();                                             //更新当前温度
 669   2                      temp_compare();                                                 //温度上下限比较
 670   2                      if(compare_th)
 671   2                      {
 672   3                              Set_tempalarm_Flash(0x43,0);            //上限报警
 673   3                      }
 674   2                      if(compare_tl)
 675   2                      {
C51 COMPILER V8.08   DS18B20_LCD1602_C51                                                   03/21/2009 19:07:17 PAGE 12  

 676   3                              Set_tempalarm_Flash(0x4b,1);            //下限报警
 677   3                      }
 678   2        }//end of while(1)
 679   1      }  //end of main()
 680          
 681          
 682          /**********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1288    ----
   CONSTANT SIZE    =    118    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     25    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      7       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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