📄 7219.lst
字号:
480
481
482 /*********************************************/
483 /*************Dalls(18B20)********************/
484 /*********************************************/
485 /* C_f=1 华氏,C_f=0 摄氏 */
486 void temperature(bit C_f)
487 {
C51 COMPILER V7.09 7219 08/23/2004 22:32:06 PAGE 9
488 1 tmstart();
489 1 delay3(100);
490 1 Max7219_int();
491 1 now_temper = read_temper(C_f);
492 1
493 1 }
494 /**************************/
495 bit tmreset(void)
496 {
497 1 uint i;
498 1 uchar j;
499 1 EA = 0;
500 1 TMDAT = 0;
501 1 i = 103; while (i>0) i--;
502 1 TMDAT =1;
503 1 i = 4; while (i>0) i--;
504 1 for (j=0xff; j>0; j--)
505 1 {
506 2 if (~TMDAT) break;
507 2 }
508 1 EA = 1;
509 1 if (j == 0) return(1); /* 无温度检测无件 */
510 1 return (0);
511 1 }
512 /***************************/
513 uchar readbyte(void)
514 {
515 1 uint i;
516 1 uchar k,j,dat = 0;
517 1 EA = 0;
518 1 for (k=1; k<=8; k++)
519 1 {
520 2
521 2 TMDAT = 0; i++;
522 2 TMDAT = 1; i++; i++;
523 2 j = TMDAT;
524 2 i = 8;while (i>0) i--;
525 2 dat = (j << 7)|(dat >> 1);
526 2 }
527 1 EA = 1;
528 1 return(dat);
529 1 }
530 /****************************/
531 void writebyte(uchar dat)
532 {
533 1 uint i;
534 1 uchar j;
535 1 bit testb;
536 1 EA = 0;
537 1 for (j=1; j<=8; j++)
538 1 {
539 2 testb = dat&0x01;
540 2 dat = dat >> 1;
541 2 if (testb)
542 2 {
543 3 TMDAT = 0;
544 3 i++; i++;
545 3 TMDAT = 1;
546 3 i = 8; while (i>0) i--;
547 3 }
548 2 else {
549 3 TMDAT = 0;
C51 COMPILER V7.09 7219 08/23/2004 22:32:06 PAGE 10
550 3 i = 8; while (i>0) i--;
551 3 TMDAT = 1;
552 3 i++; i++;
553 3 }
554 2 }
555 1 EA = 1;
556 1 }
557 /*******************************/
558 void tmstart (void)
559 {
560 1 bit flag_1;
561 1 do
562 1 {
563 2 flag_1 = tmreset();
564 2 if (flag_1) {sound(True,1);delay3(100);}
565 2 } while (flag_1);
566 1 delay3(1);
567 1 writebyte(0xcc);
568 1 writebyte(0x44);
569 1 }
570 uchar read_temper(bit C_F)
571 {
572 1
573 1 uchar a,b,y1,y2,y3;
574 1 uint i = 0;
575 1 tmreset();
576 1 delay3(1);
577 1 writebyte(0xcc);
578 1 writebyte(0xbe);
579 1 a = readbyte(); //LSB
580 1 b = readbyte(); //MSB
581 1 //*********************
582 1 if (C_F)
583 1 {
584 2 AD = a;
585 2 AD <<= 4;
586 2 if (AD_7) i = 50 ;
587 2 AD <<= 1;
588 2 if (AD_7) i= i + 25;
589 2 y1 = a >> 4;
590 2 y2 = b << 4;
591 2 y3 = y1 | y2;
592 2
593 2 y1 = (i * 9) / 100;
594 2 i = y3;
595 2 y3 = (i * 9 + y1)/5+32;
596 2 }
597 1 else
598 1 {
599 2 y1 = a >> 4;
600 2 y2 = b << 4;
601 2 y3 = y1 | y2;
602 2 }
603 1 disp(y3,1);
604 1 return (y3);
605 1 }
606 /***************************
607 id = True; 为温度
608 ***************************/
609 void disp(uchar y3,bit id)
610 {
611 1 uchar a;
C51 COMPILER V7.09 7219 08/23/2004 22:32:06 PAGE 11
612 1 a = y3/100;
613 1 if (a == 0)
614 1 {
615 2
616 2 if (id) Max7219_send(2,0x0f);
617 2 a = y3%100;
618 2 }
619 1 else
620 1 {
621 2 if (id) Max7219_send(2, a);
622 2 a = y3%100;
623 2 }
624 1 if (id)
625 1 {
626 2 y3 = 4;
627 2 Max7219_send(4, a/0x0a);
628 2 Max7219_send(3, a%0x0a);
629 2 }
630 1 else
631 1 {
632 2
633 2 if (y3 > 99)
634 2 {
635 3 y3 = 1;
636 3 Max7219_send(5, 0x0a);
637 3 Max7219_send(1, 0x0a);
638 3 }
639 2 else
640 2 {
641 3 y3 = 1;
642 3 Max7219_send(5, a/0x0a);
643 3 Max7219_send(1, a%0x0a);
644 3 }
645 2 }
646 1
647 1
648 1
649 1 }
650 /************ Max7219 ************************/
651 void Max7219_send(uchar add, uchar dat)
652 {
653 1 uchar ADS,i,j;
654 1 M7219_cs = 0;
655 1 M7219_clock = 1;
656 1 i = 0;
657 1 while (i < 16)
658 1 {
659 2 if (i < 8)
660 2 {
661 3 ADS = add;
662 3 }
663 2 else ADS = dat;
664 2 for (j=8; j>=1; j--)
665 2 {
666 3 M7219_in = ADS & 0x80;
667 3 ADS = ADS << 1;
668 3 M7219_clock = 1;
669 3 _nop_(); _nop_();
670 3 M7219_clock = 0;
671 3 _nop_(); _nop_();
672 3 }
673 2 i = i + 8;
C51 COMPILER V7.09 7219 08/23/2004 22:32:06 PAGE 12
674 2 }
675 1 M7219_cs = 1;
676 1 }
677 void Max7219_int(void)
678 {
679 1 Max7219_send(0x0c, 0x01); /* 电源模式为正常方式 */
680 1 Max7219_send(0x0b, 0x07); /* 扫描界限设置 */
681 1 Max7219_send(0x0a, 0xfe); /* 亮度设置 */
682 1 Max7219_send(0x09, 0xff); /* 十进制模式 */
683 1 }
684 void sound(bit f,uchar i)
685 {
686 1 for (;i>0;i--)
687 1 {
688 2 Speak = False;
689 2 if (f) delay3(100); else delay3(50);
690 2 Speak = True;
691 2 if (i>0) delay3(50);
692 2 }
693 1 }
694 void Watch(void)
695 {
696 1 WDTRST = 0x1e;
697 1 WDTRST = 0xe1;
698 1 }
699
700
701 void delay(uchar i)
702 {
703 1 while (i > 0)
704 1 {
705 2 i--;
706 2 }
707 1 }
708
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1922 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 10 26
IDATA SIZE = ---- ----
BIT SIZE = 1 10
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -