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