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

📄 main.lst

📁 51单片机实现的温湿度采集监控
💻 LST
📖 第 1 页 / 共 3 页
字号:
 264   1              else if(flagSettings==1)
 265   1              {
 266   2                      Display12864(ADDR_LINE3,"报警温度:");
 267   2                      Display12864(ADDR_LINE4,"报警湿度:");
 268   2              }
 269   1              WriteCmd12864(ADDR_LINE3+7);
 270   1              WriteData12864(0xA1);              //摄氏度符号
 271   1              WriteData12864(0xE6);
 272   1              WriteCmd12864(ADDR_LINE4+7);
 273   1              WriteData12864(0xA3);             //表示湿度的百分号
 274   1              WriteData12864(0xA5);
 275   1      } 
 276          
 277          /********************************************************************
 278          函数名称: CheckLimit()                   
 279          功能:监测温湿度是否超标,超标报警
 280          入口参数:无
 281          返回参数:无
 282          ********************************************************************/
 283          
 284          void CheckLimit(float *tempc,float *humic)
 285          {
 286   1              if(*tempc>tempLimit||*humic>humiLimit)
 287   1                              buzzer=0;
 288   1              else
 289   1                              buzzer=1;
 290   1      }
 291          
 292          /********************************************************************
 293          函数名称:CheckLeapyear
 294          功      能:uchar cYear
 295          入口参数:(sysData)
 296          返回参数:1、0 
 297          ********************************************************************/
 298          bit CheckLeapyear(uchar cYear)
 299          {
 300   1         if( (!(cYear%4) && (cYear%100)) || !(cYear%400) ) return 1; else return 0;
 301   1      }
 302          
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 6   

 303          /********************************************************************
 304          函数名称:GetDay()
 305          功      能:计算星期
 306          入口参数:uchar cYear,uchar cMon,uchar cDay
 307          返回参数:uchar  1-7
 308          ********************************************************************/
 309          //蔡勒(Zeller)公式(只适合于1582年10月15日之后的情形):
 310          //     w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
 311          //公式中的符号含义如下:
 312          //c:世纪(年的高两位数);
 313          //y:年(年的低两位数);
 314          //m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月
 315          //        来计算,比如2005年1月1日要看作2004年的13月1日来计算);
 316          //d:日;
 317          //[]代表取整,即只要整数部分。
 318          uchar GetDay(uchar cYear,uchar cMon,uchar cDate)
 319          {
 320   1              uchar tempYear,tempMon,tempDate,day;
 321   1              tempYear=cYear/16*10+cYear%16;  //BCD转十进制
 322   1              tempMon=cMon/16*10+cMon%16;
 323   1              tempDate=cDate/16*10+cDate%16;
 324   1              if(tempMon<3)
 325   1              {
 326   2                      tempMon=cMon+12;
 327   2                      if(tempYear==0)
 328   2                      tempYear=99;
 329   2                      else
 330   2                      tempYear=tempYear-1;
 331   2              }
 332   1              day=(tempYear+(tempYear/4)+(26*(tempMon+1)/10)+tempDate-36)%7;
 333   1              if(day==0)
 334   1                      day=7;
 335   1              return day;
 336   1      
 337   1      }
 338          
 339          
 340          
 341          /********************************************************************
 342          函数名称:BCDpp(uchar bcd)
 343          功      能:BCD自加运算
 344          入口参数:bcd
 345          返回参数:无
 346          ********************************************************************/
 347          void BCDpp(uchar *bcd)
 348          {
 349   1              *bcd=*bcd+1;
 350   1              if(*bcd%16==10)
 351   1              *bcd=*bcd+6;
 352   1      }
 353          /********************************************************************
 354          函数名称:BCDmm(uchar bcd)
 355          功      能:BCD自减运算
 356          入口参数:bcd
 357          返回参数:无
 358          ********************************************************************/
 359          void BCDmm(uchar *bcd)
 360          {
 361   1              *bcd=*bcd-1;
 362   1              if(*bcd%16==15)
 363   1              *bcd=*bcd-6;    
 364   1      } 
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 7   

 365          /********************************************************************
 366          函数名称:SystemSetting() 
 367          功      能:系统设置函数,由标志位来识别设置的选项
 368          入口参数:无
 369          返回参数:无
 370          ********************************************************************/
 371          void SystemSettings()
 372          {  
 373   1              if(flagInc)
 374   1              {
 375   2                      flagInc=0;
 376   2                      blinkCount=0;    //闪烁计数清零,按键间隔比较短的时候不闪
 377   2                      switch(flagOpt)
 378   2                      {
 379   3                              case 0:BCDpp(&sysData[YEAR]);
 380   3                                      if(sysData[YEAR]>0x99)
 381   3                                              sysData[YEAR]=0;
 382   3                                      break;
 383   3                              case 1:BCDpp(&sysData[MON]);
 384   3                                      if(sysData[MON]>0x12)
 385   3                                              sysData[MON]=1;
 386   3                                      break;
 387   3                              case 2:BCDpp(&sysData[DATE]);
 388   3                                      if(sysData[DATE]>MonSheet[CheckLeapyear(sysData[YEAR])][sysData[MON]])
 389   3                                              sysData[DATE]=1;
 390   3                                      break;
 391   3                              case 3:BCDpp(&sysData[HOUR]);
 392   3                                      if(sysData[HOUR]>0x23)
 393   3                                              sysData[HOUR]=0;
 394   3                                      break;
 395   3                              case 4:BCDpp(&sysData[MIN]);
 396   3                                      if(sysData[MIN]>0x59)
 397   3                                              sysData[MIN]=0;
 398   3                                      break;
 399   3                              case 5:BCDpp(&sysData[SEC]);
 400   3                                      if(sysData[SEC]>0x59)
 401   3                                              sysData[SEC]=0;
 402   3                                      break;
 403   3                              case 6:BCDpp(&sysData[DAY]);
 404   3                                      if(sysData[DAY]>0x07)
 405   3                                              sysData[DAY]=1;
 406   3                                      break;
 407   3                              case 7:tempLimit++;break;
 408   3                              case 8:humiLimit++;break;
 409   3                              default:break;
 410   3                      }
 411   2      
 412   2              }
 413   1              if(flagDec)
 414   1              {
 415   2                      flagDec=0;
 416   2                      blinkCount=0;
 417   2                      switch(flagOpt)
 418   2                      {
 419   3                              case 0:BCDmm(&sysData[YEAR]);
 420   3                                      if(sysData[YEAR]==0xf9)
 421   3                                              sysData[YEAR]=0x99;
 422   3                                      break;
 423   3                              case 1:BCDmm(&sysData[MON]);
 424   3                                      if(sysData[MON]<1)
 425   3                                              sysData[MON]=0x12;
 426   3                                      break;
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 8   

 427   3                              case 2:BCDmm(&sysData[DATE]);
 428   3                                      if(sysData[DATE]<1)
 429   3                                              sysData[DATE]=MonSheet[CheckLeapyear(sysData[YEAR])][sysData[MON]];
 430   3                                      break;
 431   3                              case 3:BCDmm(&sysData[HOUR]);
 432   3                                      if(sysData[HOUR]==0xf9)
 433   3                                              sysData[HOUR]=0x23;
 434   3                                      break;
 435   3                              case 4:BCDmm(&sysData[MIN]);
 436   3                                      if(sysData[MIN]==0xf9)
 437   3                                              sysData[MIN]=0x59;
 438   3                                      break;
 439   3                              case 5:BCDmm(&sysData[SEC]);
 440   3                                      if(sysData[SEC]==0xf9)
 441   3                                              sysData[SEC]=0x59;
 442   3                                      break;
 443   3                              case 6:BCDmm(&sysData[DAY]);
 444   3                                      if(sysData[DAY]<1)
 445   3                                              sysData[DAY]=0x07;
 446   3                                      break;
 447   3                              case 7:tempLimit--;break;
 448   3                              case 8:humiLimit--;break;
 449   3                              default:break;
 450   3                      }
 451   2              }
 452   1              Set1302(sysData);
 453   1      }
 454          /********************************************************************
 455          函数名称:ShowMonitorData()
 456          功      能:显示年月日时分秒和监测数据
 457          入口参数:无
 458          返回参数:无
 459          ********************************************************************/
 460          void ShowMonitorData()
 461          {
 462   1              Display12864(ADDR_LINE1+1,"20");
 463   1              if(R1302(ADDR_YEAR)!=sysData[YEAR])
 464   1              {       
 465   2                      sysData[YEAR]=R1302(ADDR_YEAR);
 466   2                      DisplayYear();
 467   2              }
 468   1              if(R1302(ADDR_MON)!=sysData[MON])
 469   1              {
 470   2                      sysData[MON]=R1302(ADDR_MON);
 471   2                      DisplayMon();
 472   2              }
 473   1              if(R1302(ADDR_DATE)!=sysData[DATE])
 474   1              {
 475   2                      sysData[DATE]=R1302(ADDR_DATE);
 476   2                      DisplayDate();
 477   2              }
 478   1              if(R1302(ADDR_DAY)!=sysData[DAY])
 479   1              {
 480   2                      sysData[DAY]=R1302(ADDR_DAY);
 481   2                      DisplayDay();
 482   2              }
 483   1              if(R1302(ADDR_HOUR)!=sysData[HOUR])
 484   1              {
 485   2                      sysData[HOUR]=R1302(ADDR_HOUR);
 486   2                      DisplayHour();
 487   2              }
 488   1              if(R1302(ADDR_MIN)!=sysData[MIN])
C51 COMPILER V8.08   MAIN                                                                  01/11/2009 23:45:34 PAGE 9   

 489   1              {
 490   2                      sysData[MIN]=R1302(ADDR_MIN);
 491   2                      DisplayMin();
 492   2              }
 493   1              if(R1302(ADDR_SEC)!=sysData[SEC])
 494   1              {
 495   2                      sysData[SEC]=R1302(ADDR_SEC);
 496   2                      DisplaySec();
 497   2              }
 498   1              if(SHTcount%256==0)                             //执行256次程序读取SHT10一次,防止传感器过热
 499   1              {
 500   2                      GetSHT10(&tempf,&humif);
 501   2                      sprintf(temps,"%.1f",tempf);
 502   2                      sprintf(humis,"%.1f",humif);
 503   2                      Display12864(POS_TEMP,temps);
 504   2                      Display12864(POS_HUMI,humis);
 505   2              }
 506   1      }
 507          /********************************************************************
 508          函数名称:ShowSettingsData()
 509          功      能:显示设置的数据
 510          入口参数:无
 511          返回参数:无
 512          ********************************************************************/
 513          void ShowSettingsData()
 514          {
 515   1              sprintf(temps,"%.1f",tempLimit);
 516   1              sprintf(humis,"%.1f",humiLimit);
 517   1              switch(flagOpt)
 518   1              {
 519   2                      case 0:
 520   2                              if(blinkCount%128<64)
 521   2                              {
 522   3                                      Display12864(ADDR_LINE1+1,"20");
 523   3                                      DisplayYear();
 524   3                                      blinkCount++;
 525   3                              }
 526   2                              else
 527   2                              {
 528   3                                      Display12864(ADDR_LINE1+1,"    ");
 529   3                                      blinkCount++;
 530   3                              }
 531   2                              DisplayMon();
 532   2                              DisplayDate();
 533   2                              DisplayHour();
 534   2                              DisplayMin();
 535   2                              DisplaySec();
 536   2                              sysData[DAY]=GetDay(sysData[YEAR],sysData[MON],sysData[DATE]);                   

⌨️ 快捷键说明

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