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

📄 ds18b20.lst

📁 温度传感器18B20的典型应用
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               07/17/2008 22:12:37 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*************************************************************
   2          程序名称:数码管显示温度
   3          函数说明:数码管显示温度
   4          功能:
   5          **************************************************************/
   6          #include<reg52.h>
   7          #include<string.h>
   8          #include<ctype.h>
   9          #include <intrins.h>
  10          
  11          #define uchar  unsigned char 
  12          #define uint  unsigned  int
  13          sbit TMDAT=P3^3;                   //定义DS18B20的数据输入端
  14          uint sdata=0;                          //温度数据的整数部分
  15          uint xiaoshu1=0;                                           //小数第一位
  16          uint xiaoshu2=0;                                           //小数第二位
  17          uint xiaoshu;
  18          bit flag=1;                                        //温度正负标志
  19          uchar seg7code[]={0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x76};              //共
             -阳段码
  20          
  21          /************************************************************
  22          程序名称:延时函数
  23          函数说明:数码管显示延时
  24          功能:
  25          *************************************************************/
  26          void  Delay(uint tc)    //显示延时函数
  27          {
  28   1               while(tc!=0)
  29   1               {
  30   2                      uint i;
  31   2                      for(i=0;i<100;i++)
  32   2                              ;
  33   2                      tc--;
  34   2               }
  35   1      }
  36          
  37          /************************************************************
  38          程序名称:延时函数
  39          函数说明:DS18B20数据读取延时
  40          功能:
  41          *************************************************************/
  42          void dmsec(uint count)
  43          {
  44   1              uchar i;
  45   1              while(count--)
  46   1              {
  47   2                      for(i=0;i<115;i++)
  48   2                      ;
  49   2              }
  50   1      }
  51          
  52          /************************************************************
  53          程序名称:复位函数
  54          函数说明:向DS18B20发送484us复位信号
C51 COMPILER V8.02   DS18B20                                                               07/17/2008 22:12:37 PAGE 2   

  55          功能:
  56          *************************************************************/
  57          void tmreast(void)
  58          {
  59   1              uchar i;                          
  60   1              TMDAT=0;
  61   1              for(i=0;i<103;i++);
  62   1              TMDAT=1;
  63   1              for(i=0;i<4;i++);
  64   1      }
  65          
  66          /************************************************************
  67          程序名称:读位函数
  68          函数说明:读取DS18B20一位信号
  69          功能:
  70          *************************************************************/
  71          bit tmrbit(void)
  72          {
  73   1              uint i;
  74   1              bit dat;
  75   1              TMDAT=0;                  //给脉冲信号
  76   1              i++;
  77   1              TMDAT=1;
  78   1              i++;i++ ;         //微量延时
  79   1              dat=TMDAT;                              //给脉冲信号
  80   1              for(i=0;i<8;i++);
  81   1              return(dat);
  82   1      
  83   1      }
  84          
  85          /************************************************************
  86          程序名称:读字函数
  87          函数说明:读取DS18B20一字节信号
  88          功能:
  89          *************************************************************/
  90          uchar tmrbyte(void)
  91          {
  92   1              uchar i,j,dat;
  93   1          dat=0;
  94   1              for(i=1;i<=8;i++)
  95   1              {
  96   2                      j=tmrbit();
  97   2                      dat=(j<<7)|(dat>>1);
  98   2              }                          
  99   1              return(dat);
 100   1      }
 101          
 102          /************************************************************
 103          程序名称:写函数
 104          函数说明:
 105          功能:
 106          *************************************************************/
 107          void  tmwbyte(uchar dat)   //写一个字节
 108          {
 109   1              uchar i,j;
 110   1              bit testb;
 111   1              for(j=1;j<=8;j++)
 112   1              {
 113   2                      testb=dat&0x01;
 114   2                      dat=dat>>1;
 115   2                      if(testb)
 116   2                      {
C51 COMPILER V8.02   DS18B20                                                               07/17/2008 22:12:37 PAGE 3   

 117   3                              TMDAT=0;           //写0
 118   3                              i++;i++;
 119   3                              TMDAT=1;
 120   3                              for(i=0;i<8;i++);
 121   3                                      
 122   3                      }
 123   2                  else
 124   2                      {
 125   3                              TMDAT=0;
 126   3                              for(i=0;i<8;i++);
 127   3                              TMDAT=1;
 128   3                              i++;i++;
 129   3                      }
 130   2              }
 131   1      }
 132          
 133          /************************************************************
 134          程序名称:温度转换函数
 135          函数说明:将读取的DS18B20的数据进行转换
 136          功能:
 137          *************************************************************/
 138          void  trstar(void)
 139          {
 140   1              tmreast();
 141   1              dmsec(1);
 142   1              tmwbyte(0xcc);             //跳过序列号命令
 143   1              tmwbyte(0x44);        //发送转换命令44H
 144   1      }
 145          
 146          
 147          /************************************************************
 148          程序名称:读温度函数
 149          函数说明:读取转换后的温度
 150          功能:
 151          *************************************************************/
 152          void  temp(void)
 153          {
 154   1              uchar a,b;
 155   1              tmreast();
 156   1              dmsec(1);
 157   1              tmwbyte(0xcc);
 158   1              tmwbyte(0xbe);
 159   1              a=tmrbyte();          // 读取温度
 160   1              b=tmrbyte();
 161   1              if(b>0x7f)
 162   1              {
 163   2                      a=~a;b=~b+1;      //补码转换,取反加一
 164   2                      flag=0;            //温度为负时flag=0
 165   2                       
 166   2              }
 167   1              sdata=a/16+b*16;
 168   1              xiaoshu1=(a&0x0f)*10/16;
 169   1              xiaoshu2=(a&0x0f)*100/16%10;
 170   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 171   1      /*      sdata=45;
 172   1              xiaoshu1=3;
 173   1              xiaoshu2=2;
 174   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 175   1      */
 176   1                      
 177   1      }
 178          
C51 COMPILER V8.02   DS18B20                                                               07/17/2008 22:12:37 PAGE 4   

 179          void DS18B20R(void)
 180          {
 181   1              trstar();
 182   1          dmsec(5);       //           不断读取数据
 183   1              temp();         //读取数据后将温度存在TMP中
 184   1      }
 185          
 186          
 187          /************************************************************
 188          程序名称:显示函数
 189          函数说明:显示读取的数据
 190          功能:
 191          *************************************************************/
 192          void LED()
 193          {
 194   1              if(flag==1)
 195   1              {
 196   2                      P2=0x7f;
 197   2                      P0=seg7code[sdata/10];
 198   2                      Delay(2);
 199   2                      P2=0xbf;
 200   2                      P0=seg7code[sdata%10]&0xdf;
 201   2                      Delay(2);
 202   2                      P2=0xdf;
 203   2                      P0=seg7code[xiaoshu1];
 204   2                      Delay(2);
 205   2                      P2=0xef;
 206   2                      P0=seg7code[xiaoshu2];
 207   2                      Delay(2);
 208   2                      P2=P2|0xf0;
 209   2              }
 210   1              if(flag==0)
 211   1              {
 212   2                      P2=0x7f;
 213   2                      P0=seg7code[11];                  //负号
 214   2                      Delay(8);
 215   2                      P0=seg7code[sdata/10];
 216   2                      Delay(8);
 217   2                      P2=0xbf;
 218   2                      P0=seg7code[sdata%10];
 219   2                      Delay(8);
 220   2                      P2=0xdf;
 221   2                      P0=seg7code[xiaoshu1];
 222   2                      Delay(8);
 223   2                      P2=P2|0xf0;
 224   2              }
 225   1      
 226   1      }
 227          
 228          /************************************************************
 229          程序名称:主函数
 230          函数说明:数码管显示温度数据
 231          功能:
 232          *************************************************************/
 233          main()
 234          {
 235   1              flag=1;
 236   1              while(1)
 237   1              {
 238   2                      DS18B20R();
 239   2                      LED();
 240   2              }
C51 COMPILER V8.02   DS18B20                                                               07/17/2008 22:12:37 PAGE 5   

 241   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    496    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     24       2
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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