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

📄 18b20.lst

📁 52单片机开发板的实例程序
💻 LST
字号:
C51 COMPILER V9.00   18B20                                                                 08/23/2011 20:26:37 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include <intrins.h>
   3          #define uint unsigned int 
   4          #define uchar unsigned char
   5          sbit DS=P3^4;
   6          sbit a=P1^0;
   7          sbit b=P1^1;
   8          sbit c=P1^2;
   9          int temp;
  10          uchar code t[]={0x3f,0x06,0x5b,0x4f,0x66,
  11                                          0x6d,0x7d,0x07,0x7f,0x6f,0x39};
  12          uchar code t1[]={0xbf,0x86,0xdb,0xcf,0xe6,
  13                                          0xed,0xfd,0x87,0xff,0xef};
  14          void delayb(uchar z)
  15          {
  16   1              uint i;
  17   1              while(z)
  18   1              {
  19   2                      i=200;
  20   2                      while(i>0)i--;
  21   2                      z--;
  22   2              }
  23   1              
  24   1      }
  25          void delay(uint k)
  26          {
  27   1        uint i;
  28   1        for(;k>0;k--)
  29   1        for(i=110;i>0;i--);
  30   1      }
  31          void dsreset(void)       //DS18B20初始化
  32          {
  33   1              uint i;                
  34   1              DS=0;
  35   1              i=103;
  36   1              while(i>0)i--;
  37   1              DS=1;
  38   1              i=4;
  39   1              while(i>0)i--;
  40   1      }
  41          bit tmpreadbit(void)       // 读一位
  42          {
  43   1       uint i;
  44   1       bit dat;
  45   1       DS=0;i++;          //小延时一下
  46   1       DS=1;i++;i++;
  47   1       dat=DS;
  48   1       i=8;while(i>0)i--;
  49   1       return (dat);
  50   1      }
  51          uchar tmpread(void)   //读一个字节
  52          {
  53   1         uchar i,j,dat;
  54   1         dat=0;
  55   1            for(i=1;i<=8;i++)
C51 COMPILER V9.00   18B20                                                                 08/23/2011 20:26:37 PAGE 2   

  56   1             {
  57   2                 j=tmpreadbit();
  58   2                 dat=(j<<7)|(dat>>1);//读出的数据最低位在最前面,这样刚好一个字节在DAT
  59   2              }
  60   1        return(dat);             //将一个字节数据返回
  61   1      }
  62          void tmpwritebyte(uchar dat)   
  63          {                           //写一个字节到DS18B20里
  64   1       uint i;
  65   1       uchar j;
  66   1       bit testb;
  67   1            for(j=1;j<=8;j++)
  68   1              {
  69   2                 testb=dat&0x01;
  70   2                dat=dat>>1;
  71   2                if(testb)     // 写1部分
  72   2                  {
  73   3                     DS=0;
  74   3                     i++;i++;
  75   3                     DS=1;
  76   3                      i=8;while(i>0)i--;
  77   3                   }
  78   2            else
  79   2              {
  80   3                 DS=0;       //写0部分
  81   3                 i=8;while(i>0)i--;
  82   3                 DS=1;
  83   3                 i++;i++;
  84   3              }
  85   2              }
  86   1      }
  87          void tmpchange(void)  //发送温度转换命令
  88          {
  89   1         dsreset();             //初始化DS18B20
  90   1         delayb(1);             //延时
  91   1         tmpwritebyte(0xcc);  // 跳过序列号命令
  92   1         tmpwritebyte(0x44);  //发送温度转换命令
  93   1      }
  94          int tmp()               //获得温度
  95          {
  96   1         float tt;
  97   1         uchar a,b;
  98   1         dsreset();
  99   1        delayb(1);
 100   1        tmpwritebyte(0xcc);   
 101   1        tmpwritebyte(0xbe);    //发送读取数据命令
 102   1        a=tmpread();          //连续读两个字节数据
 103   1        b=tmpread();
 104   1        temp=b;
 105   1        temp<<=8;             
 106   1        temp=temp|a;         //两字节合成一个整型变量。
 107   1        tt=temp*0.0625;       //得到真实十进制温度值,因为DS18B20
 108   1                               //可以精确到0.0625度,所以读回数据的最低位代表的是
 109   1        temp=tt*10+0.5;   //放大十倍,这样做的目的将小数点后第一位
 110   1                          //也转换为可显示数字,同时进行一个四舍五入操作。
 111   1        return temp;     //返回温度值
 112   1      }
 113          void HC138(uchar i)
 114          {
 115   1        a=i&0x01;
 116   1        b=i&0x02;
 117   1        c=i&0x04;
C51 COMPILER V9.00   18B20                                                                 08/23/2011 20:26:37 PAGE 3   

 118   1      }
 119          void display(uint num)
 120          {
 121   1         uchar ge,shi,bai;
 122   1         bai=num/100;
 123   1         shi=num%100/10;
 124   1         ge=num%10;
 125   1         HC138(0);
 126   1         P2=t[ge];
 127   1         delay(3);
 128   1         HC138(1);
 129   1         P2=t1[shi];
 130   1         delay(3);
 131   1         HC138(2);
 132   1         P2=t[bai];
 133   1         delay(3);
 134   1         
 135   1      }
 136          void main()
 137          {
 138   1          int tem;
 139   1              while(1)
 140   1              {
 141   2                      tmpchange();
 142   2                      tem=tmp();
 143   2                      display(tem);
 144   2              }
 145   1      }
 146          
 147          
 148          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    463    ----
   CONSTANT SIZE    =     21    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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