⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 7219.lst

📁 用at89s52访问MAX7219(LED数码显示)
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -