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

📄 system_alarm.lst

📁 温度采集,基于KEILC写的,容易看懂
💻 LST
📖 第 1 页 / 共 2 页
字号:
 283   1      
 284   1              a=ReadOneChar();        //读取温度值低位
 285   1              b=ReadOneChar();                //读取温度值高位
 286   1              temp1=b<<4;
 287   1              temp1+=(a&0xf0)>>4;
 288   1              temp2=a&0x0f;
 289   1      
 290   1         temp=((b*256+a)>>4);    //当前采集温度值除16得实际温度值
 291   1      
 292   1      
 293   1      }
 294          
 295          /***************液晶显示子函数1正常显示*****************/
 296          
 297          void displayfun1(void)
 298          {       
 299   1              WriteCommandLCM(0x0c,1);                                         //显示屏打开,光标不显示,不闪烁,检测忙信号   
 300   1              DisplayListChar(0,0,str0);      
 301   1              DisplayListChar(0,1,str1);      
 302   1                                                                                                        
 303   1              DisplayOneChar(3,0,hour/10+0x30);                   //液晶上显示小时
C51 COMPILER V7.08   SYSTEM_ALARM                                                          04/04/2007 16:55:38 PAGE 6   

 304   1              DisplayOneChar(4,0,hour%10+0x30);
 305   1      
 306   1              DisplayOneChar(6,0,minite/10+0x30);                     //液晶上显示分
 307   1              DisplayOneChar(7,0,minite%10+0x30);
 308   1              
 309   1              DisplayOneChar(9,0,seconde/10+0x30);        //液晶上显示秒
 310   1              DisplayOneChar(10,0,seconde%10+0x30);
 311   1      
 312   1              DisplayOneChar(4,1,K/10+0x30);                      //液晶上显示设定的温度
 313   1              DisplayOneChar(5,1,K%10+0x30);
 314   1       
 315   1              DisplayOneChar(11,1,temp1/10+0x30);         //液晶上显示测得的温度  
 316   1              DisplayOneChar(12,1,temp1%10+0x30);
 317   1              DisplayOneChar(14,1,temp2/10+0x30);
 318   1      
 319   1              if(ON_OFF==0)                                                 //若温控标志为0
 320   1              {
 321   2                      DisplayOneChar(14,0,0x4f);                         // 液晶上显示不控温的标志
 322   2                      DisplayOneChar(15,0,0x46);
 323   2              }
 324   1              else
 325   1              {
 326   2                      DisplayOneChar(14,0,0x4f);                         // 液晶上显示控温的标志
 327   2                      DisplayOneChar(15,0,0x4e);
 328   2                      if(outflag==1)
 329   2                          DisplayOneChar(0,0,0x7c);                      
 330   2                  else
 331   2                              DisplayOneChar(0,0,0xef);
 332   2              }
 333   1      
 334   1              
 335   1      }
 336          /************液晶显示子函数2***************/
 337          
 338          void displayfun2(void)
 339          {
 340   1              WriteCommandLCM(0x0c,1);                     //显示屏打开,光标不显示,不闪烁,检测忙信号       
 341   1              DisplayListChar(0,0,str0);      
 342   1              DisplayListChar(0,1,str1);      
 343   1                      
 344   1              DisplayOneChar(6,0,minite/10+0x30);
 345   1              DisplayOneChar(7,0,minite%10+0x30);
 346   1              
 347   1              DisplayOneChar(9,0,seconde/10+0x30);
 348   1              DisplayOneChar(10,0,seconde%10+0x30);
 349   1      
 350   1              DisplayOneChar(4,1,K/10+0x30);                     
 351   1              DisplayOneChar(5,1,K%10+0x30);
 352   1       
 353   1              DisplayOneChar(11,1,temp1/10+0x30);         
 354   1              DisplayOneChar(12,1,temp1%10+0x30);
 355   1              DisplayOneChar(14,1,temp2/10+0x30);
 356   1      
 357   1              WriteCommandLCM(0x0f,1);                                         //显示屏打开,光标显示,闪烁,检测忙信号       
 358   1          DisplayOneChar(3,0,hour/10+0x30);
 359   1              DisplayOneChar(4,0,hour%10+0x30);
 360   1      }
 361          
 362          /**************液晶显示子函数3*****************/
 363          
 364          void displayfun3(void)
 365          {
C51 COMPILER V7.08   SYSTEM_ALARM                                                          04/04/2007 16:55:38 PAGE 7   

 366   1              WriteCommandLCM(0x0c,1);                                //显示屏打开,光标不显示,不闪烁,检测忙信号    
 367   1              DisplayListChar(0,0,str0);      
 368   1              DisplayListChar(0,1,str1);      
 369   1              
 370   1              DisplayOneChar(3,0,hour/10+0x30);
 371   1              DisplayOneChar(4,0,hour%10+0x30); 
 372   1      
 373   1              DisplayOneChar(9,0,seconde/10+0x30);
 374   1              DisplayOneChar(10,0,seconde%10+0x30);
 375   1      
 376   1              DisplayOneChar(4,1,K/10+0x30);                     
 377   1              DisplayOneChar(5,1,K%10+0x30);
 378   1      
 379   1              DisplayOneChar(11,1,temp1/10+0x30);         
 380   1              DisplayOneChar(12,1,temp1%10+0x30);
 381   1              DisplayOneChar(14,1,temp2/10+0x30);
 382   1      
 383   1         
 384   1              WriteCommandLCM(0x0f,1);                                         //显示屏打开,光标显示,闪烁,检测忙信号
 385   1              DisplayOneChar(6,0,minite/10+0x30);
 386   1              DisplayOneChar(7,0,minite%10+0x30);
 387   1      
 388   1      }
 389          
 390          /**************液晶显示子函数4 *****************/
 391          
 392          void displayfun4(void)
 393          {
 394   1              WriteCommandLCM(0x0c,1);                                //显示屏打开,光标不显示,不闪烁,检测忙信号    
 395   1              DisplayListChar(0,0,str0);      
 396   1              DisplayListChar(0,1,str1);      
 397   1              
 398   1              DisplayOneChar(3,0,hour/10+0x30);
 399   1              DisplayOneChar(4,0,hour%10+0x30); 
 400   1      
 401   1              DisplayOneChar(6,0,minite/10+0x30);
 402   1              DisplayOneChar(7,0,minite%10+0x30);
 403   1      
 404   1              DisplayOneChar(9,0,seconde/10+0x30);
 405   1              DisplayOneChar(10,0,seconde%10+0x30);
 406   1      
 407   1              
 408   1              DisplayOneChar(11,1,temp1/10+0x30);         
 409   1              DisplayOneChar(12,1,temp1%10+0x30);
 410   1              DisplayOneChar(14,1,temp2/10+0x30);
 411   1      
 412   1         
 413   1              WriteCommandLCM(0x0f,1);                                         //显示屏打开,光标显示,闪烁,检测忙信号
 414   1              DisplayOneChar(4,1,K/10+0x30);                     
 415   1              DisplayOneChar(5,1,K%10+0x30);
 416   1      
 417   1      }
 418          
 419          /**************键盘扫描子函数******************/
 420          
 421          void keyscan(void)
 422          {
 423   1              uchar xx;                                           //局部变量
 424   1              P1=0xff;
 425   1              if(P1!=0xff)
 426   1                {
 427   2                  delay_LCM(50);
C51 COMPILER V7.08   SYSTEM_ALARM                                                          04/04/2007 16:55:38 PAGE 8   

 428   2      
 429   2                      if(P1!=0xff)
 430   2                        {     
 431   3                              xx=P1;
 432   3                              switch(xx)                                                     // 根据按键状态,调用不同的子函数
 433   3                              {
 434   4                                      case 0xfe:set_adj();       break;               
 435   4                                      case 0xfd:inc_key();       break;               
 436   4                                      case 0xfb:dec_key();       break;               
 437   4                                      case 0xf7:ON_OFF=!ON_OFF;  break;
 438   4                                      default:break;
 439   4                              }
 440   3                        }
 441   2                      
 442   2                }
 443   1        
 444   1      }
 445          
 446          /**************设定工作模式子函数****************/
 447          
 448          void set_adj(void)
 449          {
 450   1              delay_LCM(100);
 451   1              set++;
 452   1          if(set>=4)set=0;
 453   1                      
 454   1      }
 455          
 456          /****************按键加法子函数******************/
 457          
 458          void inc_key(void)
 459          {
 460   1              delay_LCM(100);
 461   1                      
 462   1              switch(set)
 463   1              {
 464   2                      case 0:if(P1==0xf7)ON_OFF=!ON_OFF;       break;
 465   2                      case 1:hour++;   if(hour>=23)hour=23;    break;
 466   2                      case 2:minite++; if(minite>=59)minite=59;break;
 467   2                      case 3:K++;if(K>=99)K=99;                                break; 
 468   2                      default:break;
 469   2              }
 470   1                      
 471   1      }
 472          
 473          /****************按键减法子函数*****************/
 474          
 475          void dec_key(void)
 476          {
 477   1              delay_LCM(100);
 478   1              
 479   1              switch(set)
 480   1              {
 481   2                      case 0:if(P1==0xf7)ON_OFF=!ON_OFF;    break;
 482   2                      case 1:hour--;  if(hour<=0)hour=0;    break;
 483   2                      case 2:minite--;if(minite<=0)minite=0;break;
 484   2                      case 3:K--;if(K<=1)K=1;                           break; 
 485   2                      default:break;
 486   2              }
 487   1                      
 488   1      }
 489          
C51 COMPILER V7.08   SYSTEM_ALARM                                                          04/04/2007 16:55:38 PAGE 9   

 490          /***************定时器t0初始化*******************/
 491          
 492          void init_timer0(void)
 493          {
 494   1               TMOD=0x01;                                  //time0为定时器,方式1
 495   1           TH0=0x3c;                                   //预置计数初值
 496   1           TL0=0xb0;
 497   1           EA=1;                                                              
 498   1           ET0=1;                                                                                             
 499   1           TR0=1;                     
 500   1      }
 501          
 502          /***********定时器t0中断子函数**************/
 503          
 504          void timer0(void) interrupt 1 using 0          //定时器0方式1,50ms中断一次
 505          {
 506   1           TH0=0x3c;
 507   1           TL0=0xb0;
 508   1           mstcnt++;
 509   1           if(mstcnt>=20 )  {seconde++; mstcnt=0; }
 510   1               if(seconde>=60)  {minite++;  seconde=0;}
 511   1               if(minite>=60 )  {hour++;    minite=0; }
 512   1               if(hour>=24   )  {hour=0;}
 513   1               keyscan( );                               //按键扫描
 514   1      }
 515          
 516          /***********the main funtion*************/
 517              
 518          void main(void)
 519          { 
 520   1      
 521   1          P1=0xff;                                                            //初始化p1口,全设为1       
 522   1              delay_LCM(500);                                         //延时500ms启动
 523   1              initLCM( );                                                             //LCD初始化
 524   1              init_timer0( );                                                         //时钟定时器0初始化     
 525   1          Init_DS18B20( ) ;                                                   //DS18B20初始化
 526   1              DisplayListChar(0,0,str0);      
 527   1              DisplayListChar(0,1,str1);  
 528   1                              
 529   1          while (1)
 530   1          {   
 531   2              keyscan();                                            //按键扫描                
 532   2                  ReadTemperature();                                    //温度采集
 533   2                  switch(set)                                           //LCD根据工作模式显示
 534   2                      {
 535   3                              case 0:displayfun1();delay_LCM(1000);break;       //正常工作显示
 536   3                              case 1:displayfun2();delay_LCM(1000);break;       //调整时显示
 537   3                              case 2:displayfun3();delay_LCM(1000);break;       //调整分显示
 538   3                              case 3:displayfun4();delay_LCM(1000);break;       //温度设定
 539   3                              default:break;
 540   3                      }       
 541   2                      keyscan( );                                          //相当于延时
 542   2                      if(ON_OFF==1)                                                                        //若温控标志位1, 控制LAMP动作
 543   2                      {
 544   3                              if(temp1>=K+1){outflag=1;OUT=0;}
 545   3                              if(temp1<K)
 546   3                              { 
 547   4                                      delay_LCM(1000);
 548   4                                      if(temp1<K){outflag=0;OUT=1;}                   //
 549   4                              }
 550   3                      }
 551   2                      else{outflag=0;OUT=1;}
C51 COMPILER V7.08   SYSTEM_ALARM                                                          04/04/2007 16:55:38 PAGE 10  

 552   2          }
 553   1              
 554   1      }
 555          
 556          


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


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

⌨️ 快捷键说明

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