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

📄 18b20led.lst

📁 DS18B20实时测量温度
💻 LST
字号:
C51 COMPILER V7.50   18B20LED                                                              09/01/2008 10:58:48 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 18B20LED
OBJECT MODULE PLACED IN 18b20led.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20led.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.H>
   2          //--------------------------------------------------------------------------------------------------------
             ---------
   3          #define uint unsigned int
   4          #define uchar unsigned char
   5          //--------------------------------------------------------------------------------------------------------
             ---------
   6          sbit DQ   = P0 ^ 0;           // 定义DS18B20数据线
   7          sbit BEEP = P0^2;             //蜂鸣器
   8          sbit SWH  = P0^1;
   9          uchar code dis_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  10          void delay(uint t)
  11           {
  12   1        while(t--)
  13   1         ;
  14   1       }
  15          void Init_DS18B20(void)//初始化ds1820
  16          {
  17   1              uchar x=0;
  18   1              DQ = 1;    //DQ复位
  19   1              delay(8);  //稍做延时
  20   1              DQ = 0;    //单片机将DQ拉低
  21   1              delay(80); //精确延时 大于 480us
  22   1              DQ = 1;    //拉高总线
  23   1              delay(14);
  24   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  25   1              delay(20);
  26   1      }
  27          /******************************************************************************/
  28          uchar ReadOneChar(void)//读一个字节
  29          {
  30   1              uchar i=0;
  31   1              uchar dat = 0;
  32   1              for (i=8;i>0;i--)
  33   1              {
  34   2                      DQ = 0; // 给脉冲信号
  35   2                      dat>>=1;
  36   2                      DQ = 1; // 给脉冲信号
  37   2                      if(DQ)
  38   2                      dat|=0x80;
  39   2                      delay(4);
  40   2              }
  41   1              return(dat);
  42   1      }
  43          
  44          /******************************************************************************/
  45          void WriteOneChar(uchar dat)//写一个字节
  46          {
  47   1              uchar i=0;
  48   1              for (i=8; i>0; i--)
  49   1              {
  50   2                      DQ = 0;
  51   2                      DQ = dat&0x01;
  52   2                  delay(5);
  53   2                      DQ = 1;
C51 COMPILER V7.50   18B20LED                                                              09/01/2008 10:58:48 PAGE 2   

  54   2                      dat>>=1;
  55   2              }
  56   1      }
  57          /******************************************************************************/
  58          uint ReadTemperature(void)//读取温度
  59          {
  60   1              uchar a=0;
  61   1              uchar b=0;
  62   1              uint t=0;
  63   1              float tt=0;
  64   1              Init_DS18B20();     //第一次复位,执行温度转换
  65   1          WriteOneChar(0xCC); // 跳过读序号列号的操作
  66   1          WriteOneChar(0x44); // 启动温度转换
  67   1          Init_DS18B20();     // 第二次复位,读数据
  68   1          WriteOneChar(0xCC); //跳过读序号列号的操作
  69   1          WriteOneChar(0xBE); //读取温度寄存器
  70   1          a=ReadOneChar();    //读低8位
  71   1          b=ReadOneChar();    //读高8位
  72   1          t=b;
  73   1          t<<=8;
  74   1          t=t|a;
  75   1          tt=t*0.0625;
  76   1          t= tt*10+0.5;       //放大10倍输出并四舍五入
  77   1          return(t);
  78   1      }
  79          main()
  80          {
  81   1        uint t;
  82   1        while(1)
  83   1        { 
  84   2          t= ReadTemperature();
  85   2              if(t>999)
  86   2              {
  87   3                P1=dis_7[t/1000];
  88   3                P3=0xfe;
  89   3                delay(200);
  90   3                P1=dis_7[(t%1000)/100];
  91   3                P3=0xfd;
  92   3                delay(200);
  93   3              
  94   3              }
  95   2              else
  96   2              {
  97   3                 P1=dis_7[t/100];
  98   3                 P3=0xfd;
  99   3                 delay(200);
 100   3                 
 101   3              }
 102   2              P1=(dis_7[(t%100)/10]&0x7f);
 103   2              P3=0xfb;
 104   2              delay(200);     
 105   2              P1=dis_7[t%10];
 106   2              P3=0xf7;
 107   2              if(t<1000)
 108   2               {
 109   3                 SWH=0;
 110   3                 BEEP=1;
 111   3               }      
 112   2      /*      else if(t==999)          
 113   2                 SWH=1;        
 114   2              else if(t==1000)
 115   2           BEEP=0; */
C51 COMPILER V7.50   18B20LED                                                              09/01/2008 10:58:48 PAGE 3   

 116   2              else
 117   2               {
 118   3               SWH=1; 
 119   3               BEEP=0;
 120   3               }
 121   2              }
 122   1      }
 123          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    407    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   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 + -