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

📄 system_alarm.lst

📁 DS18B20 LCD1602 AT24C02智能温度控制系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 472   1      }
 473          
 474          /****************按键减法子函数*****************/
 475          
 476          void dec_key(void)
 477          {
 478   1              delay_LCM(150);
 479   1              
 480   1              switch(set)
 481   1              {
 482   2                      case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;}    break;
 483   2                      case 1:hour--;  if(hour<=0)hour=0;    break;
 484   2                      case 2:minite--;if(minite<=0)minite=0;break;
 485   2                      case 3:K--;if(K<=1)K=1;                           break; 
 486   2                      default:break;
 487   2              }
 488   1              while(!GREEN_ALARM);    
 489   1      }
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 9   

 490          
 491          /////////24C02读写驱动程序////////////////////
 492          
 493          void delay1(uchar x)
 494          {  
 495   1              uint i;
 496   1              for(i=0;i<x;i++);
 497   1      }
 498          void flash()
 499          {  ;  ; }
 500          void x24c02_init()  //24c02初始化子程序
 501          {
 502   1              scl=1; 
 503   1              flash(); 
 504   1              sda=1; 
 505   1              flash();
 506   1      }
 507          void start()        //启动I2C总线
 508          {
 509   1              sda=1; 
 510   1              flash(); 
 511   1              scl=1; 
 512   1              flash(); 
 513   1              sda=0; 
 514   1              flash(); 
 515   1              scl=0; 
 516   1              flash();
 517   1      }
 518          void stop()         //停止I2C总线
 519          {
 520   1              sda=0; 
 521   1              flash(); 
 522   1              scl=1; 
 523   1              flash(); 
 524   1              sda=1; 
 525   1              flash();
 526   1      }
 527          void writex(uchar j)  //写一个字节
 528          {  
 529   1              uchar i,temp;
 530   1          temp=j;
 531   1          for (i=0;i<8;i++)
 532   1                      {
 533   2                              temp=temp<<1; 
 534   2                              scl=0; 
 535   2                              flash(); 
 536   2                              sda=CY; 
 537   2                              flash(); 
 538   2                              scl=1; 
 539   2                              flash();
 540   2                      }
 541   1      
 542   1              scl=0; 
 543   1              flash(); 
 544   1              sda=1; 
 545   1              flash();
 546   1      }
 547          uchar readx()   //读一个字节
 548          {
 549   1              uchar i,j,k=0;
 550   1              scl=0; 
 551   1              flash(); 
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 10  

 552   1              sda=1;
 553   1          for (i=0;i<8;i++)
 554   1                      {  
 555   2                              flash(); 
 556   2                              scl=1; 
 557   2                              flash();
 558   2                              if (sda==1) j=1;
 559   2                              else j=0;
 560   2                              k=(k<<1)|j;
 561   2                              scl=0;
 562   2                      }
 563   1              flash(); 
 564   1              return(k);
 565   1      }
 566          void clock()         //I2C总线时钟
 567          {
 568   1              uchar i=0;
 569   1              scl=1; 
 570   1              flash();
 571   1              while ((sda==1)&&(i<255))i++;
 572   1              scl=0; 
 573   1              flash();
 574   1      }
 575          
 576          ////////从24c02的地址address中读取一个字节数据/////
 577          
 578          uchar x24c02_read(uchar address)
 579          {
 580   1              uchar i;
 581   1              start(); 
 582   1              writex(0xa0);
 583   1              clock(); 
 584   1              writex(address);
 585   1              clock(); 
 586   1              start();
 587   1              writex(0xa1); 
 588   1              clock();
 589   1              i=readx(); 
 590   1              stop();
 591   1              delay1(10);
 592   1              return(i);
 593   1      }
 594          
 595          //////向24c02的address地址中写入一字节数据info/////
 596          
 597          void x24c02_write(uchar address,uchar info)
 598          {
 599   1              EA=0;
 600   1              start(); 
 601   1              writex(0xa0);
 602   1              clock(); 
 603   1              writex(address);
 604   1              clock(); 
 605   1              writex(info);
 606   1              clock(); 
 607   1              stop(); 
 608   1              EA=1;
 609   1              delay1(50);
 610   1      }
 611          
 612          /***************定时器t0初始化*******************/
 613          
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 11  

 614          void init_timer0(void)
 615          {
 616   1               TMOD=0x01;                                  //time0为定时器,方式1
 617   1           TH0=0x3c;                                   //预置计数初值
 618   1           TL0=0xb0;
 619   1           EA=1;                                                              
 620   1           ET0=1;                                                                                             
 621   1           TR0=1;                     
 622   1      }
 623          
 624          /***********定时器t0中断子函数**************/
 625          
 626          void timer0(void) interrupt 1 using 0          //定时器0方式1,50ms中断一次
 627          {
 628   1           TH0=0x3c;
 629   1           TL0=0xb0;
 630   1           mstcnt++;
 631   1           if(mstcnt>=20 )  {seconde++; write=1; mstcnt=0; }
 632   1               if(seconde>=60)  {minite++;  seconde=0;}
 633   1               if(minite>=60 )  {hour++;    minite=0; }
 634   1               if(hour>=24   )  {hour=0;}
 635   1               keyscan( );                               //按键扫描
 636   1      }
 637          
 638          /***********the main funtion*************/
 639              
 640          void main(void)
 641          { 
 642   1      
 643   1          P1=0xff;                                                            //初始化p1口,全设为1 
 644   1              x24c02_init();                                          //初始化24C08
 645   1          K=x24c02_read(2);                                       //读出保存的数据赋于K
 646   1              seconde=x24c02_read(4);
 647   1              minite=x24c02_read(6);
 648   1              hour=x24c02_read(8);       
 649   1              delay_LCM(500);                                         //延时500ms启动
 650   1              initLCM( );                                                             //LCD初始化
 651   1              init_timer0( );                                                         //时钟定时器0初始化     
 652   1          Init_DS18B20( ) ;                                                   //DS18B20初始化
 653   1              DisplayListChar(0,0,str0);      
 654   1              DisplayListChar(0,1,str1);  
 655   1                              
 656   1          while (1)
 657   1          {   
 658   2              keyscan();                                            //按键扫描                
 659   2                  ReadTemperature();                                    //温度采集
 660   2                  switch(set)                                           //LCD根据工作模式显示
 661   2                      {
 662   3                              case 0:displayfun1();delay_LCM(1000);break;       //正常工作显示
 663   3                              case 1:displayfun2();delay_LCM(1000);break;       //调整时显示
 664   3                              case 2:displayfun3();delay_LCM(1000);break;       //调整分显示
 665   3                              case 3:displayfun4();delay_LCM(1000);break;       //温度设定
 666   3                              default:break;
 667   3                      }       
 668   2                      keyscan( );                                          //相当于延时
 669   2                      if(ON_OFF==1)                                                                        //若温控标志位1, 控制LAMP动作
 670   2                      {
 671   3                              if(temp1>=K+1){outflag=1;OUT=0;}
 672   3                              if(temp1<K)
 673   3                              { 
 674   4                                      delay_LCM(1000);
 675   4                                      if(temp1<K){outflag=0;OUT=1;}                   //
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 12  

 676   4                              }
 677   3                      }
 678   2                      else{outflag=0;OUT=1;}
 679   2                      if(write==1)                                      //判断计时器是否计时一秒
 680   2             {
 681   3                    write=0;                                        //清零
 682   3                x24c02_write(8,hour);                           //在24c08的地址2中写入数据hour
 683   3                        delay_LCM(11);
 684   3                        x24c02_write(6,minite);
 685   3                        delay_LCM(11);
 686   3                        x24c02_write(4,seconde);
 687   3                    delay_LCM(11);
 688   3                        x24c02_write(2,K);
 689   3                              
 690   3             }        
 691   2          }
 692   1              
 693   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2095    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     11       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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