?? system_alarm.lst
字號(hào):
472 1 }
473
474 /****************按鍵減法子函數(shù)*****************/
475
476 void dec_key(void)
477 {
478 1 delay_LCM(150);
479 1
480 1 switch(set)
481 1 {
482 2 case 0:if(P1==0xf7){delay_LCM(150);ON_OFF=!ON_OFF;} break;
483 2 case 1:hour--; if(hour<=0)hour=0; break;
484 2 case 2:minite--;if(minite<=0)minite=0;break;
485 2 case 3:K--;if(K<=1)K=1; break;
486 2 default:break;
487 2 }
488 1 while(!GREEN_ALARM);
489 1 }
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 9
490
491 /////////24C02讀寫(xiě)驅(qū)動(dòng)程序////////////////////
492
493 void delay1(uchar x)
494 {
495 1 uint i;
496 1 for(i=0;i<x;i++);
497 1 }
498 void flash()
499 { ; ; }
500 void x24c02_init() //24c02初始化子程序
501 {
502 1 scl=1;
503 1 flash();
504 1 sda=1;
505 1 flash();
506 1 }
507 void start() //啟動(dòng)I2C總線
508 {
509 1 sda=1;
510 1 flash();
511 1 scl=1;
512 1 flash();
513 1 sda=0;
514 1 flash();
515 1 scl=0;
516 1 flash();
517 1 }
518 void stop() //停止I2C總線
519 {
520 1 sda=0;
521 1 flash();
522 1 scl=1;
523 1 flash();
524 1 sda=1;
525 1 flash();
526 1 }
527 void writex(uchar j) //寫(xiě)一個(gè)字節(jié)
528 {
529 1 uchar i,temp;
530 1 temp=j;
531 1 for (i=0;i<8;i++)
532 1 {
533 2 temp=temp<<1;
534 2 scl=0;
535 2 flash();
536 2 sda=CY;
537 2 flash();
538 2 scl=1;
539 2 flash();
540 2 }
541 1
542 1 scl=0;
543 1 flash();
544 1 sda=1;
545 1 flash();
546 1 }
547 uchar readx() //讀一個(gè)字節(jié)
548 {
549 1 uchar i,j,k=0;
550 1 scl=0;
551 1 flash();
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 10
552 1 sda=1;
553 1 for (i=0;i<8;i++)
554 1 {
555 2 flash();
556 2 scl=1;
557 2 flash();
558 2 if (sda==1) j=1;
559 2 else j=0;
560 2 k=(k<<1)|j;
561 2 scl=0;
562 2 }
563 1 flash();
564 1 return(k);
565 1 }
566 void clock() //I2C總線時(shí)鐘
567 {
568 1 uchar i=0;
569 1 scl=1;
570 1 flash();
571 1 while ((sda==1)&&(i<255))i++;
572 1 scl=0;
573 1 flash();
574 1 }
575
576 ////////從24c02的地址address中讀取一個(gè)字節(jié)數(shù)據(jù)/////
577
578 uchar x24c02_read(uchar address)
579 {
580 1 uchar i;
581 1 start();
582 1 writex(0xa0);
583 1 clock();
584 1 writex(address);
585 1 clock();
586 1 start();
587 1 writex(0xa1);
588 1 clock();
589 1 i=readx();
590 1 stop();
591 1 delay1(10);
592 1 return(i);
593 1 }
594
595 //////向24c02的address地址中寫(xiě)入一字節(jié)數(shù)據(jù)info/////
596
597 void x24c02_write(uchar address,uchar info)
598 {
599 1 EA=0;
600 1 start();
601 1 writex(0xa0);
602 1 clock();
603 1 writex(address);
604 1 clock();
605 1 writex(info);
606 1 clock();
607 1 stop();
608 1 EA=1;
609 1 delay1(50);
610 1 }
611
612 /***************定時(shí)器t0初始化*******************/
613
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 11
614 void init_timer0(void)
615 {
616 1 TMOD=0x01; //time0為定時(shí)器,方式1
617 1 TH0=0x3c; //預(yù)置計(jì)數(shù)初值
618 1 TL0=0xb0;
619 1 EA=1;
620 1 ET0=1;
621 1 TR0=1;
622 1 }
623
624 /***********定時(shí)器t0中斷子函數(shù)**************/
625
626 void timer0(void) interrupt 1 using 0 //定時(shí)器0方式1,50ms中斷一次
627 {
628 1 TH0=0x3c;
629 1 TL0=0xb0;
630 1 mstcnt++;
631 1 if(mstcnt>=20 ) {seconde++; write=1; mstcnt=0; }
632 1 if(seconde>=60) {minite++; seconde=0;}
633 1 if(minite>=60 ) {hour++; minite=0; }
634 1 if(hour>=24 ) {hour=0;}
635 1 keyscan( ); //按鍵掃描
636 1 }
637
638 /***********the main funtion*************/
639
640 void main(void)
641 {
642 1
643 1 P1=0xff; //初始化p1口,全設(shè)為1
644 1 x24c02_init(); //初始化24C08
645 1 K=x24c02_read(2); //讀出保存的數(shù)據(jù)賦于K
646 1 seconde=x24c02_read(4);
647 1 minite=x24c02_read(6);
648 1 hour=x24c02_read(8);
649 1 delay_LCM(500); //延時(shí)500ms啟動(dòng)
650 1 initLCM( ); //LCD初始化
651 1 init_timer0( ); //時(shí)鐘定時(shí)器0初始化
652 1 Init_DS18B20( ) ; //DS18B20初始化
653 1 DisplayListChar(0,0,str0);
654 1 DisplayListChar(0,1,str1);
655 1
656 1 while (1)
657 1 {
658 2 keyscan(); //按鍵掃描
659 2 ReadTemperature(); //溫度采集
660 2 switch(set) //LCD根據(jù)工作模式顯示
661 2 {
662 3 case 0:displayfun1();delay_LCM(1000);break; //正常工作顯示
663 3 case 1:displayfun2();delay_LCM(1000);break; //調(diào)整時(shí)顯示
664 3 case 2:displayfun3();delay_LCM(1000);break; //調(diào)整分顯示
665 3 case 3:displayfun4();delay_LCM(1000);break; //溫度設(shè)定
666 3 default:break;
667 3 }
668 2 keyscan( ); //相當(dāng)于延時(shí)
669 2 if(ON_OFF==1) //若溫控標(biāo)志位1, 控制LAMP動(dòng)作
670 2 {
671 3 if(temp1>=K+1){outflag=1;OUT=0;}
672 3 if(temp1<K)
673 3 {
674 4 delay_LCM(1000);
675 4 if(temp1<K){outflag=0;OUT=1;} //
C51 COMPILER V7.50 SYSTEM_ALARM 06/22/2007 17:18:23 PAGE 12
676 4 }
677 3 }
678 2 else{outflag=0;OUT=1;}
679 2 if(write==1) //判斷計(jì)時(shí)器是否計(jì)時(shí)一秒
680 2 {
681 3 write=0; //清零
682 3 x24c02_write(8,hour); //在24c08的地址2中寫(xiě)入數(shù)據(jù)hour
683 3 delay_LCM(11);
684 3 x24c02_write(6,minite);
685 3 delay_LCM(11);
686 3 x24c02_write(4,seconde);
687 3 delay_LCM(11);
688 3 x24c02_write(2,K);
689 3
690 3 }
691 2 }
692 1
693 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2095 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 11 9
IDATA SIZE = ---- ----
BIT SIZE = 3 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -