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

📄 ds18b20.lst

📁 DS18B20温度传感器
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*************************************************************
   2          程序名称:数码管显示温度
   3          函数说明:数码管显示温度
   4          功能:
   5          P3_3为温度数据输入端
   6          共阳数码管
   7          李灿松
   8          2008.7.17
   9          **************************************************************/
  10          #include<reg52.h>
  11          //#include<string.h>
  12          //#include<ctype.h>
  13          #include <intrins.h>
  14          
  15          #define uchar  unsigned char 
  16          #define uint  unsigned  int
  17          sbit TMDAT=P2^7;                   //定义DS18B20的数据输入端
  18          uint sdata=0;                          //温度数据的整数部分
  19          uint xiaoshu1=0;                                           //小数第一位
  20          uint xiaoshu2=0;                                           //小数第二位
  21          uint xiaoshu;
  22          bit flag=1;                         //温度正负标志
  23          sbit P0_7=P0^7;                            //小数点标志
  24          //uchar seg7code[]=
  25          //{0x28,0xeb,0x32,0xa2,0xe1,0xa4,0x24,
  26          //0xea,0x20,0xa0,0x60,0x25,0x3c,0x23,0x34,0x76};                 //共阳段码
  27          //uchar code seg7code[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
  28          uchar code seg7code[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  29          
  30          
  31          /************************************************************
  32          程序名称:延时函数
  33          函数说明:数码管显示延时
  34          功能:
  35          *************************************************************/
  36          void  Delay(uint tc)    //显示延时函数
  37          {
  38   1               while(tc!=0)
  39   1               {
  40   2                      uint i;
  41   2                      for(i=0;i<100;i++)
  42   2                              ;
  43   2                      tc--;
  44   2               }
  45   1      }
  46          
  47          /************************************************************
  48          程序名称:延时函数
  49          函数说明:DS18B20数据读取延时
  50          功能:
  51          *************************************************************/
  52          void dmsec(uint count)
  53          {
  54   1              uchar i;
  55   1              while(count--)
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 2   

  56   1              {
  57   2                      for(i=0;i<115;i++)
  58   2                      ;
  59   2              }
  60   1      }
  61          
  62          /************************************************************
  63          程序名称:复位函数
  64          函数说明:向DS18B20发送484us复位信号
  65          功能:
  66          *************************************************************/
  67          void tmreast(void)
  68          {
  69   1              uchar i;                          
  70   1              TMDAT=0;
  71   1              for(i=0;i<180;i++);//542US
  72   1              TMDAT=1;
  73   1              for(i=0;i<15;i++); //47US
  74   1          while(TMDAT);
  75   1          for(i=0;i<50;i++); //152US
  76   1          TMDAT=1;
  77   1          for(i=0;i<80;i++); //240US
  78   1      }
  79          
  80          /************************************************************
  81          程序名称:读位函数
  82          函数说明:读取DS18B20一位信号
  83          功能:
  84          *************************************************************/
  85          bit tmrbit(void)
  86          {
  87   1              uint i;
  88   1              bit dat;
  89   1              TMDAT=0;                  //给脉冲信号
  90   1              i++;
  91   1              TMDAT=1;
  92   1              i++;i++ ;         //微量延时
  93   1              dat=TMDAT;                              //给脉冲信号
  94   1              for(i=0;i<8;i++);
  95   1              return(dat);
  96   1      
  97   1      }
  98          
  99          /************************************************************
 100          程序名称:读字函数
 101          函数说明:读取DS18B20一字节信号
 102          功能:
 103          *************************************************************/
 104          uchar tmrbyte(void)
 105          {
 106   1              uchar i,j,dat;
 107   1          dat=0;
 108   1              for(i=1;i<=8;i++)
 109   1              {
 110   2                      j=tmrbit();
 111   2                      dat=(j<<7)|(dat>>1);
 112   2              }
 113   1          TMDAT=1;                       
 114   1              return(dat);
 115   1      }
 116          
 117          /*uchar tmrbyte(void)
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 3   

 118          {
 119           uchar i;
 120           uchar value=0;
 121           for(i=8;i>0;i--)
 122           {
 123            TMDAT=1;_nop_();_nop_();
 124            value>>=1;
 125            TMDAT=0;_nop_();_nop_();_nop_();_nop_();         //4 us
 126            TMDAT=1;_nop_();_nop_();_nop_();_nop_();         //4 us
 127            if(TMDAT)value|=0x80;
 128            for(i=0;i<20;i++);                                     //66 us
 129           }
 130          TMDAT=1;
 131          return(value);
 132          }  */
 133          
 134          
 135          
 136          /************************************************************
 137          程序名称:写函数
 138          函数说明:
 139          功能:
 140          *************************************************************/
 141          void  tmwbyte(uchar dat)   //写一个字节
 142          {
 143   1              uchar i,j;
 144   1              bit testb;
 145   1              for(j=1;j<=8;j++)
 146   1              {
 147   2                      testb=dat&0x01;
 148   2                      dat=dat>>1;
 149   2                      if(testb)
 150   2                      {
 151   3                              TMDAT=0;           //写1
 152   3                              i++;i++;
 153   3                              TMDAT=1;
 154   3                              for(i=0;i<20;i++);
 155   3                                      
 156   3                      }
 157   2                  else
 158   2                      {
 159   3                              TMDAT=0;         //xie0
 160   3                              for(i=0;i<20;i++);
 161   3                              TMDAT=1;
 162   3                              i++;i++;
 163   3                      }
 164   2              }
 165   1      }
 166          /*
 167          //向1-WIRE 总线上写1个字节
 168          void tmwbyte(uchar val)
 169          { 
 170            uchar i;
 171            for(i=8;i>0;i--)
 172            {
 173             TMDAT=1;_nop_();_nop_();                  //从高拉倒低
 174             TMDAT=0;_nop_();_nop_();_nop_();_nop_();  //5 us
 175             TMDAT=val&0x01;                           //最低位移出
 176             for(i=0;i<15;i++);                              //55 us 15us~120us
 177             val=val/2;                             //右移1位
 178             }
 179             TMDAT=1;
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 4   

 180          }*/
 181          
 182          /************************************************************
 183          程序名称:温度转换函数
 184          函数说明:将读取的DS18B20的数据进行转换
 185          功能:
 186          *************************************************************/
 187          void  trstar(void)
 188          {
 189   1              tmreast();
 190   1              dmsec(1);
 191   1              tmwbyte(0xcc);             //跳过序列号命令
 192   1              tmwbyte(0x44);        //发送转换命令44H
 193   1      }
 194          
 195          
 196          /************************************************************
 197          程序名称:读温度函数
 198          函数说明:读取转换后的温度
 199          功能:
 200          *************************************************************/
 201          void  temp(void)
 202          {
 203   1              uchar a,b;
 204   1              tmreast();                        //复位
 205   1              dmsec(1);                         //延时
 206   1              tmwbyte(0xcc);            //跳过序列号命令
 207   1              tmwbyte(0xbe);            //发送读取命令
 208   1              a=tmrbyte();          // 读取地位温度
 209   1              b=tmrbyte();              //读取高位温度
 210   1              if(b>0x7f)
 211   1              {
 212   2                      a=~a;b=~b+1;      //补码转换,取反加一
 213   2                      flag=0;            //温度为负时flag=0
 214   2                       
 215   2              }
 216   1              sdata=a/16+b*16;
 217   1              xiaoshu1=(a&0x0f)*10/16;
 218   1              xiaoshu2=(a&0x0f)*100/16%10;
 219   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 220   1      /*      sdata=45;
 221   1              xiaoshu1=3;
 222   1              xiaoshu2=2;
 223   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 224   1      */
 225   1                      
 226   1      }
 227          
 228          void DS18B20R(void)
 229          {
 230   1              trstar();               //温度转换
 231   1          dmsec(5);       //不断读取数据 , 延时
 232   1              temp();         //读取数据后将温度存在TMP中,读温度
 233   1      }
 234          
 235          
 236          /************************************************************
 237          程序名称:显示函数
 238          函数说明:显示读取的数据
 239          功能:
 240          *************************************************************/
 241          void LED()
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 5   

 242          {
 243   1              if(flag==1)
 244   1              {
 245   2                      P2=0xfe;
 246   2                      P0=seg7code[sdata/10];
 247   2                      Delay(2);
 248   2                      P2=0xfd;
 249   2                      P0=seg7code[sdata%10];
 250   2              P0_7=0;                 //小数点标志
 251   2                      Delay(2);
 252   2                      P2=0xfb;
 253   2                      P0=seg7code[xiaoshu1];
 254   2                      Delay(2);
 255   2                      P2=0xf7;
 256   2                      P0=seg7code[xiaoshu2];
 257   2                      Delay(2);
 258   2                      //P2=P2|0xf0;
 259   2              //      P0=0xff;
 260   2              }
 261   1              if(flag==0)
 262   1              {
 263   2                      P2=0xfe;
 264   2                      P0=seg7code[11];                  //负号
 265   2                      Delay(8);
 266   2              P2=0xfd;
 267   2                      P0=seg7code[sdata/10];
 268   2                      Delay(8);
 269   2                      P2=0xfb;
 270   2                      P0=seg7code[sdata%10];
 271   2                      Delay(8);
 272   2                      P2=0xf7;
 273   2                      P0=seg7code[xiaoshu1];
 274   2                      Delay(8);
 275   2                      //P2=P2|0xf0;
 276   2              //      P0=0xff;
 277   2              }
 278   1      
 279   1      }
 280          
 281          /************************************************************
 282          程序名称:主函数
 283          函数说明:数码管显示温度数据
 284          功能:
 285          *************************************************************/
 286          main()
 287          {
 288   1          trstar();       //下面三句也可不要
 289   1          Delay(1);
 290   1          flag=1;
 291   1              while(1)
 292   1              {
 293   2                      DS18B20R();
 294   2                      LED();
 295   2              }
 296   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    548    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 09:14:28 PAGE 6   

   DATA SIZE        =      8       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 + -