📄 main.lst
字号:
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 + -