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

📄 ds18b20-lcd1602-c51.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 518   1         Disp_Temp_alarm(0x43,0);   //显示TH值
 519   1         Disp_Temp_alarm(0x4b,1);   //显示TL值
 520   1         Disp_Temperature();        //显示实时温度值
 521   1      }
 522          /*******************************************************************/
 523          /*                                                                 */
 524          /* 主函数                                                          */
 525          /*                                                                 */
 526          /*******************************************************************/
 527          void main()
 528           {
 529   1         uchar  m;
 530   1         TMOD=0x01; TH0=0x4c; TL0=0x00; //50ms定时
 531   1         EA=1; ET0=1; TR0=1;
 532   1      
 533   1         while(1)
 534   1         {
 535   2          Init_DS18B20();
 536   2          if(presence)
 537   2          {
 538   3            Error_Menu ();
 539   3               do
 540   3               {  
 541   4                 Init_DS18B20();
 542   4                 beep();
 543   4           }
 544   3               while(presence);
 545   3          }
 546   2          
 547   2           RomCode_Menu ();      //显示RomCode
 548   2           for(m=0;m<10;m++)
 549   2           Delay(50000);
 550   2      
 551   2          Natural_Menu ();
C51 COMPILER V8.05a   DS18B20_LCD1602_C51                                                  11/20/2006 21:44:00 PAGE 10  

 552   2          do
 553   2          { 
 554   3           Read_Temperature();
 555   3           Disp_Temperature();
 556   3           temp_compare();
 557   3           set_temp_alarm();  
 558   3               if(!K4)
 559   3                {
 560   4                  beep();
 561   4                      while(!K4);   //等待键释放
 562   4              alarm_on_off=~alarm_on_off;
 563   4                }
 564   3             
 565   3               if(!K1)
 566   3                {
 567   4                  beep();
 568   4                      while(!K1);           //等待键释放
 569   4              RomCode_Menu ();      //显示RomCode
 570   4      
 571   4              while(K2);            //等待K2键按下
 572   4              beep();
 573   4              Natural_Menu ();
 574   4                }
 575   3         }
 576   2          while(!presence); 
 577   2      
 578   2        }//end of while(1)
 579   1      }  //end of main()
 580          
 581          /*********************************************************/
 582          // 显示报警温度
 583          /*********************************************************/
 584          void Disp_Temp_alarm(uchar addr,uchar num)
 585          {   //0=TH,1=TL
 586   1         display1[2]=temp_alarm[num]/100+0x30;
 587   1         display1[0]=temp_alarm[num]%100;
 588   1         display1[1]=display1[0]/10+0x30;
 589   1         display1[0]=display1[0]%10+0x30;
 590   1      
 591   1          if(display1[2]==0x30)        //高位为0,不显示
 592   1          { 
 593   2            display1[2]=0x20;              
 594   2            if(display1[1]==0x30)      //次高位为0,不显示
 595   2            display1[1]=0x20;
 596   2          }
 597   1      
 598   1          lcd_pos(addr);
 599   1          lcd_wdat(display1[2]);        //百位数显示             
 600   1          lcd_wdat(display1[1]);        //十位数显示              
 601   1          lcd_wdat(display1[0]);        //个位数显示
 602   1      }    
 603          
 604          /**********************************************************/
 605          // Time0中断函数
 606          /**********************************************************/
 607          void Time0(void) interrupt 1 using 0
 608          {
 609   1         TH0=0x4c;        //50ms定时
 610   1         TL0=0x00;
 611   1         timecount++;
 612   1         if(timecount>9)
 613   1         {
C51 COMPILER V8.05a   DS18B20_LCD1602_C51                                                  11/20/2006 21:44:00 PAGE 11  

 614   2          timecount=0;
 615   2          flag=~flag;         
 616   2         }
 617   1      }
 618          
 619          /*********************************************************/
 620          /*                                                       */
 621          /*小喇叭闪动                                             */
 622          /*                                                       */
 623          /*********************************************************/
 624          void  spk(uchar addr)
 625          {
 626   1         if(flag)
 627   1         {
 628   2           lcd_pos(addr);
 629   2           lcd_wdat(0x01);      //小喇叭显示
 630   2         }
 631   1         else
 632   1         {
 633   2           lcd_pos(addr);
 634   2           lcd_wdat(0x20);      //清屏
 635   2         }
 636   1      }
 637          
 638          /*********************************************************/
 639          // 温度比较函数
 640          /*********************************************************/
 641          void temp_compare()
 642          {    
 643   1          if(temp_comp >= temp_alarm[0])      //比较 TH 值
 644   1           {
 645   2             compare_th=1;                    
 646   2               }
 647   1              else  compare_th=0;
 648   1      
 649   1          if(temp_comp < temp_alarm[1])        //比较 TL 值
 650   1               {
 651   2                 compare_tl=1;
 652   2               }
 653   1              else  compare_tl=0;
 654   1           
 655   1              if(compare_th)
 656   1               {
 657   2                 spk(0x46);            //小喇叭闪动
 658   2             if(!alarm_on_off)     //静音选择
 659   2                 beep();
 660   2               }
 661   1              else 
 662   1               {
 663   2             lcd_pos(0x46);
 664   2             lcd_wdat(0x20);
 665   2               }
 666   1              if(compare_tl)
 667   1               {
 668   2                 spk(0x4e);           //小喇叭闪动
 669   2             if(!alarm_on_off)    //静音选择
 670   2                 beep();
 671   2               }
 672   1              else 
 673   1               {
 674   2             lcd_pos(0x4e);
 675   2             lcd_wdat(0x20);
C51 COMPILER V8.05a   DS18B20_LCD1602_C51                                                  11/20/2006 21:44:00 PAGE 12  

 676   2               }
 677   1      }   
 678          
 679          /*********************************************************/
 680          // 温度报警值闪动
 681          /*********************************************************/
 682          void  Set_tempalarm_Flash(uchar addr,uchar num)
 683          {
 684   1         if(flag)
 685   1         {
 686   2           temp_alarm[num]=count;
 687   2           Disp_Temp_alarm(addr,num);  //显示温度报警值
 688   2         }
 689   1         else
 690   1         {
 691   2           lcd_pos(addr);
 692   2           lcd_wdat(0x20);
 693   2               lcd_wdat(0x20);
 694   2               lcd_wdat(0x20);
 695   2         }
 696   1      }
 697          
 698          /*********************************************************/
 699          // 设定报警值键函数
 700          /*********************************************************/
 701          void  key_set(uchar num)
 702          { 
 703   1         if(!K2)                //加键
 704   1         {
 705   2           beep();
 706   2           if(count!=num)
 707   2           count++; 
 708   2           else 
 709   2               count=0;        
 710   2         }
 711   1         if(!K1)               //减键
 712   1         {
 713   2           beep();
 714   2           if(count!=0)
 715   2           count--; 
 716   2           else count=num;
 717   2         }
 718   1      }
 719          
 720          /**********************************************************
 721          温度报警值设定
 722          ***********************************************************/
 723          void set_temp_alarm()
 724          { 
 725   1          if(!K3)
 726   1           {
 727   2                 beep();
 728   2                 temp_th=1;
 729   2             count=temp_alarm[0];          //取实时TH报警值
 730   2               }
 731   1                      
 732   1          while(temp_th)
 733   1          {
 734   2             key_set(120);
 735   2             Set_tempalarm_Flash(0x43,0);
 736   2      
 737   2            if(!K3)
C51 COMPILER V8.05a   DS18B20_LCD1602_C51                                                  11/20/2006 21:44:00 PAGE 13  

 738   2            {
 739   3                  beep();
 740   3                      temp_th=0;
 741   3              temp_tl=1;
 742   3                      flag=1;
 743   3              Set_tempalarm_Flash(0x43,0);  //显示温度报警TH值
 744   3              count=temp_alarm[1];          //取实时TL报警值
 745   3            }
 746   2          }
 747   1          while(temp_tl)
 748   1          {
 749   2            key_set(120);
 750   2            Set_tempalarm_Flash(0x4b,1);
 751   2      
 752   2            if(!K3)
 753   2            {
 754   3                  beep();
 755   3                      temp_tl=0;
 756   3                  flag=1;
 757   3              Set_tempalarm_Flash(0x4b,1); //显示温度报警TL值
 758   3              Write_Temperature_alarm();   //报警值写入DS18B20
 759   3                  count=0;                     
 760   3            }
 761   2          }
 762   1      }
 763          
 764          /**********************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1396    ----
   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 + -