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

📄 system_alarm.lst

📁 DS18B20 LCD1602 AT24C02智能温度控制系统
💻 LST
📖 第 1 页 / 共 3 页
字号:
 233          unsigned char ReadOneChar(void)
 234          {
 235   1              uchar i=0;
 236   1              uchar dat = 0;
 237   1              for (i=8;i>0;i--)
 238   1               {
 239   2                        DQ = 0; // 给脉冲信号
 240   2                        dat>>=1;
 241   2                        DQ = 1; // 给脉冲信号
C51 COMPILER V7.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 PAGE 5   

 242   2                        if(DQ)
 243   2                        dat|=0x80;
 244   2                        delay_18B20(4);
 245   2               }
 246   1              return(dat);
 247   1      }
 248          
 249          /*************ds18b20写一个字节****************/  
 250          
 251          void WriteOneChar(uchar dat)
 252          {
 253   1              unsigned char i=0;
 254   1              for (i=8; i>0; i--)
 255   1              {
 256   2                      DQ = 0;
 257   2                      DQ = dat&0x01;
 258   2              delay_18B20(5);
 259   2                      DQ = 1;
 260   2              dat>>=1;
 261   2       }
 262   1      }
 263          
 264          /**************读取ds18b20当前温度************/
 265          
 266          void ReadTemperature(void)
 267          {
 268   1              unsigned char a=0;
 269   1              unsigned char b=0;
 270   1              unsigned char t=0;
 271   1      
 272   1              Init_DS18B20();
 273   1              WriteOneChar(0xCC);     // 跳过读序号列号的操作
 274   1              WriteOneChar(0x44);     // 启动温度转换
 275   1      
 276   1              delay_18B20(100);       // this message is wery important
 277   1      
 278   1              Init_DS18B20();
 279   1              WriteOneChar(0xCC);     //跳过读序号列号的操作
 280   1              WriteOneChar(0xBE);     //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 281   1      
 282   1              delay_18B20(100);
 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.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 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.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 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.50   SYSTEM_ALARM                                                          06/22/2007 17:18:23 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:{delay_LCM(150);ON_OFF=!ON_OFF;while(!BLUE_ALARM);}  break;
 438   4                                      default:break;
 439   4                              }
 440   3                      
 441   3                        }
 442   2                      
 443   2                }
 444   1        
 445   1      }
 446          
 447          /**************设定工作模式子函数****************/
 448          
 449          void set_adj(void)
 450          {
 451   1              delay_LCM(100);
 452   1              set++;
 453   1          if(set>=4)set=0;
 454   1              while(!RED_ALARM);              
 455   1      }
 456          
 457          /****************按键加法子函数******************/
 458          
 459          void inc_key(void)
 460          {
 461   1              delay_LCM(150);
 462   1                      
 463   1              switch(set)
 464   1              {
 465   2                      case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;}       break;
 466   2                      case 1:hour++;   if(hour>=23)hour=23;    break;
 467   2                      case 2:minite++; if(minite>=59)minite=59;break;
 468   2                      case 3:K++;if(K>=99)K=99;                                break; 
 469   2                      default:break;
 470   2              }
 471   1              while(!WRITE_ALARM);

⌨️ 快捷键说明

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