📄 all.lst
字号:
468 2 ID[Num][i]=ISP_DATA; //读一个字节
469 2 }
470 1 ISP_CONTR=0x00; //关ISP功能
471 1 }
472
473 /*ISP写DS18B20 ID程序 */
474 /*入口参数:1,DS18b20编号(0-4) */
475 /*全局变量:DS18B20的ID号存储区:ID[5][8] */
476 /*功 能:将某个DS18B20的8字节ID写入某个扇区内(扇区必须为空)*/
477 void ISP_Write8(unsigned char Num)
478 {
479 1 unsigned char i;
480 1 ISP_CONTR=0x81; //允许ISP功能,并配制等待时间
481 1 ISP_CMD=ISP_WeiteByte ; //送ISP字节写指令
482 1 ISP_ADDRH=0x20+Num*0x02; //送地址高字节
483 1 for(i=0;i<8;i++) //写8字节
484 1 {
485 2 ISP_ADDRL=0x00+i; //送地址低字节,均从每个扇区的起始地址开始
486 2 ISP_DATA=ID[Num][i]; //送待写入的一个字节
487 2 ISP_TRIG=0x46;
488 2 ISP_TRIG=0xB9; //触发ISP指令
489 2 Delay_short(1); //短暂延时
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 9
490 2 }
491 1 ISP_CONTR=0x00; //关ISP功能
492 1 }
493
494 /*ISP擦除扇区指令 */
495 /*入口参数:对应扇区的器件号(0-4) */
496 /*全局变量:无 */
497 /*功 能:将某个扇区擦除 */
498 void ISP_Eraser(unsigned char Num)
499 {
500 1 ISP_CONTR=0x81; //允许ISP功能,并配制等待时间
501 1 ISP_CMD=ISP_Erase ; //送ISP擦除扇区指令
502 1 ISP_ADDRH=0x20+Num*0x02; //送地址高字节
503 1 ISP_ADDRL=0x00; //送地址低字节,均从每个扇区的起始地址开始
504 1 ISP_TRIG=0x46;
505 1 ISP_TRIG=0xB9; //触发ISP指令
506 1 Delay_short(1); //短暂延时
507 1 ISP_CONTR=0x00; //关ISP功能
508 1 }
509
510 ////////////////////////////////////////////////
511 /******************程序预定义******************/
512 ////////////////////////////////////////////////
513
514 void Auto_Mode(void); //自动模式程序
515 void Hand_Mode(viod); //手动模式程序
516 void ID_Mode(void); //显示ID模式程序
517 void Alarm_Set(void); //报警设置程序
518 void Menu_Function(void);//菜单处理功能
519
520 /****自动切换温度显示模式程序****/
521 /*功能:自动从切换显示温度 */
522 void Auto_Mode()
523 { unsigned char i;
524 1 LCD_Initial();
525 1 GotoXY(12,1);
526 1 Print("Auto");
527 1 while(1)
528 1 {
529 2 for(i=0;i<5;i++)
530 2 {
531 3 DS_ReadTemp(i); //循环显示温度和TH,TL
532 3 TempDisp(i);
533 3 ThTlDisp(i,2);
534 3 Alarm();
535 3 Menu_Function(); //菜单处理
536 3 Delay_long(200); //延时
537 3 Delay_long(200);
538 3 Delay_long(200);
539 3 Delay_long(200);
540 3 }
541 2 }
542 1 }
543
544 /****手动切换温度显示模式程序****/
545 /*功能:按Down键切换显示 */
546 void Hand_Mode()
547 {
548 1 LCD_Initial();
549 1 GotoXY(0,1);
550 1 Print("Hand Mode");
551 1 GotoXY(9,2);
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 10
552 1 Print("S U D Q");
553 1 while(1) //主菜单循环
554 1 {
555 2 unsigned char Key1=Key_scan();
556 2 if(Key1==SET) //如果按SET键
557 2 {Delay_long(50); //延时0.25S等待释放按键
558 3 if(Key_scan()==0) //释放后操作
559 3 {
560 4 unsigned char i=0;
561 4 LCD_Initial();
562 4 GotoXY(12,1);
563 4 Print("Hand"); //显示模式
564 4 while(1)
565 4 {
566 5 unsigned char Key2=Key_scan();
567 5 DS_ReadTemp(i);
568 5 TempDisp(i); //显示NO.i的温度
569 5 ThTlDisp(i,2);
570 5 Alarm();
571 5 if(Key2==DOWN) //如果按DOWN键
572 5 {
573 6 Delay_long(50); //延时0.25S等待释放按键
574 6 if(Key_scan()==0) //按键抬起后执行
575 6 {
576 7 i=i+1; //指针加1
577 7 if(i>4)
578 7 i=0;
579 7 }
580 6 }
581 5 else if(Key2==QUIT) //按QUIT返回自动模式
582 5 {Delay_long(50);
583 6 if(Key_scan()==0)
584 6 {
585 7 Auto_Mode();
586 7 }
587 6 }
588 5 }
589 4 }
590 3 }
591 2 else if(Key1==DOWN)
592 2 {Delay_long(50);
593 3 if(Key_scan()==0)
594 3 {
595 4 ID_Mode();
596 4 }
597 3 }
598 2 else if(Key1==UP)
599 2 {Delay_long(50);
600 3 if(Key_scan()==0)
601 3 {
602 4 Alarm_Set();
603 4 }
604 3 }
605 2 else if(Key1==QUIT)
606 2 {Delay_long(50); //延时0.25S等待释放按键
607 3 if(Key_scan()==0) //释放后操作
608 3 {
609 4 Auto_Mode();
610 4 }
611 3 }
612 2 }
613 1 }
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 11
614
615 /****显示DS18B20序列号模式程序****/
616 /*功能:显示或替换器件ID */
617 void ID_Mode(void)
618 {
619 1 LCD_Initial();
620 1 GotoXY(0,1);
621 1 Print(" ID Mode ");
622 1 GotoXY(9,2);
623 1 Print("S U D Q") ;
624 1 while(1) //主菜单循环
625 1 {
626 2 unsigned char Key1=Key_scan();
627 2 if(Key1==SET) //如果按SET键
628 2 {Delay_long(50); //延时0.25S等待释放按键
629 3 if(Key_scan()==0) //释放后操作
630 3 {
631 4 unsigned char i=0;
632 4 LCD_Initial();
633 4 GotoXY(0,1);
634 4 Print("Please Press D");
635 4 GotoXY(10,2);
636 4 Print("C D Q "); //显示有效按键
637 4 while(1) //进入二级菜单循环
638 4 {
639 5 unsigned char Key2=Key_scan();
640 5 if(Key2==DOWN) //如果按DOWN键
641 5 {
642 6 Delay_long(50); //延时0.25S等待释放按键
643 6 if(Key_scan()==0) //按键抬起后执行
644 6 {
645 7 i=i+1;
646 7 switch(i)
647 7 {
648 8 case 1 :Show_ID(0);break;
649 8 case 2 :Show_ID(1);break;
650 8 case 3 :Show_ID(2);break;
651 8 case 4 :Show_ID(3);break;
652 8 case 5 :Show_ID(4);break;
653 8 case 6 :i=0;break;
654 8 }
655 7 }
656 6 }
657 5 else if(Key2==CHANGE) //如果按CHANGE键
658 5 {Delay_long(200);
659 6 Delay_long(200); //延时两秒
660 6 if(Key_scan()==0)
661 6 {
662 7 DS_ReadID(i-1);
663 7 Show_ID(i-1);
664 7 ISP_Eraser(i-1);
665 7 ISP_Write8(i-1);
666 7 }
667 6 }
668 5
669 5 else if(Key2==QUIT) //按QUIT返回自动模式
670 5 {Delay_long(50);
671 6 if(Key_scan()==0)
672 6 {
673 7 Auto_Mode();
674 7 }
675 6 }
C51 COMPILER V7.20 ALL 01/16/2009 13:29:33 PAGE 12
676 5 }
677 4 }
678 3 }
679 2 else if(Key1==DOWN) //按DOWN键切换至报警设置模式
680 2 {Delay_long(50);
681 3 if(Key_scan()==0)
682 3 {
683 4 Alarm_Set();
684 4 }
685 3 }
686 2 else if(Key1==UP) //按DOWN键切换至报警设置模式
687 2 {Delay_long(50);
688 3 if(Key_scan()==0)
689 3 {
690 4 Hand_Mode();
691 4 }
692 3 }
693 2 else if(Key1==QUIT) //按QUIT返回自动模式
694 2 {Delay_long(50);
695 3 if(Key_scan()==0)
696 3 {
697 4 Auto_Mode();
698 4 }
699 3 }
700 2 }
701 1 }
702
703 /*修改器件TH和TL程序 */
704 /*入口参数:器件序号(0-4) */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -