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

📄 数字温度计.lst

📁 DS18B20
💻 LST
字号:
C51 COMPILER V8.08   数譥蝊度计                                                            07/24/2007 16:19:19 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 数譥蝊度计
OBJECT MODULE PLACED IN 数字温度计.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE 数字温度计.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include "reg52.h"
   3          #include "intrins.h"
   4          #define Disdata P1
   5          #define discan  P3
   6          #define uchar unsigned char
   7          #define uint unsigned int
   8          sbit DQ=P3^7;
   9          sbit DIN=P1^7;
  10          uint h;
  11          
  12          uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  13          uchar code dis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  14          uchar code scan_con[4]={0xfe,0xfd,0xfb,0xf7};
  15          uchar data temp_data[2]={0x00,0x00};
  16          uchar data display[5]={0x00,0x00,0x00,0x00,0x00};
  17          
  18          void delay(uint t)
  19          {
  20   1      for(;t>0;t--);
  21   1      }
  22          
  23          scan()
  24          {
  25   1      char k;
  26   1        for(k=0;k<4;k++)
  27   1          {
  28   2            Disdata=dis_7[display[k]];
  29   2            if(k==1){DIN=0;}
  30   2            discan=scan_con[k];
  31   2                delay(90);
  32   2                discan=0xff;
  33   2          }
  34   1      }
  35          ow_reset(void)
  36          {
  37   1      char presence=1;
  38   1      while(presence)
  39   1        {
  40   2         while(presence)
  41   2          {
  42   3            DQ=1;_nop_();_nop_();
  43   3            DQ=0;
  44   3            delay(50);
  45   3            DQ=1;
  46   3            delay(6);
  47   3            presence=DQ;
  48   3          }
  49   2         delay(45);
  50   2         presence=~DQ;
  51   2        }
  52   1      DQ=1;
  53   1      }
  54          
  55          void write_byte(uchar val)
C51 COMPILER V8.08   数譥蝊度计                                                            07/24/2007 16:19:19 PAGE 2   

  56          {
  57   1       uchar i;
  58   1       for(i=8;i>0;i--)
  59   1        {
  60   2         DQ=1;_nop_();_nop_();
  61   2         DQ=0;_nop_();_nop_();_nop_();_nop_();_nop_();
  62   2         DQ=val&0x01;
  63   2         delay(6);
  64   2         val=val/2;
  65   2        }
  66   1      DQ=1;
  67   1      delay(1);
  68   1      }
  69          
  70          uchar read_byte(void)
  71          {
  72   1       uchar i;
  73   1       uchar value=0;
  74   1       for(i=8;i>0;i--)
  75   1        {
  76   2          DQ=1;_nop_();_nop_();
  77   2          value>>=1;
  78   2          DQ=0;
  79   2          _nop_();_nop_();_nop_();_nop_();
  80   2          DQ=1;_nop_();_nop_();_nop_();_nop_();
  81   2          if(DQ)value|=0x80;
  82   2          delay(6);
  83   2        }
  84   1      DQ=1;
  85   1      return(value);
  86   1      }
  87          //
  88          read_temp()
  89          {
  90   1      ow_reset();
  91   1      write_byte(0xcc);
  92   1      write_byte(0xbe);
  93   1      temp_data[0]=read_byte();
  94   1      temp_data[1]=read_byte();
  95   1      ow_reset();
  96   1      write_byte(0xcc);
  97   1      write_byte(0x44);
  98   1      }
  99          
 100          work_temp()
 101          {
 102   1       uchar n=0;
 103   1      if(temp_data[1]>127)
 104   1        {temp_data[1]=(256-temp_data[1]);
 105   2      temp_data[0]=(256-temp_data[0]);n=1;}
 106   1      display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];
 107   1      display[4]=((temp_data[0]&0xf0) >> 4)|((temp_data[1]&0x0f)<<4);
 108   1      display[3]=display[4] / 100;
 109   1      display[1]=display[4] % 100;
 110   1      display[2]=display[1] / 10;
 111   1      display[1]=display[1] % 10;
 112   1      if(!display[3]){display[3]=0x0a;if(!display[2]){display[2]=0x0a;}}
 113   1      if(n){display[3]=0x0b;}
 114   1      }
 115          main()
 116          {
 117   1      Disdata=0xff;
C51 COMPILER V8.08   数譥蝊度计                                                            07/24/2007 16:19:19 PAGE 3   

 118   1      discan=0xff;
 119   1      for(h=0;h<4;h++){display[h]=8;}
 120   1      ow_reset();
 121   1      write_byte(0xcc);
 122   1      write_byte(0x44);
 123   1      for(h=0;h<500;h++)
 124   1        {scan();}
 125   1      while(1)
 126   1        {
 127   2         read_temp();
 128   2         work_temp();
 129   2         for(h=0;h<500;h++)
 130   2        {scan();}
 131   2         }
 132   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    436    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -