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

📄 温度采集ds18b20.lst

📁 一些51单片机基础模块的程序
💻 LST
字号:
C51 COMPILER V7.50   温度采集DS18B20                                                       04/09/2009 21:39:29 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 温度采集DS18B20
OBJECT MODULE PLACED IN 温度采集DS18B20.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 温度采集DS18B20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : 温度采集DS18B20.c
   3          * 描述    :  该文件实现了用温度传感器件DS18B20对温度的采集,并在数码管上
   4                                   显示出来。
   5          * 创建人  : 东流,2009年4月9日
   6          * 版本号  : 2.0
   7          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
   8          * 感谢“中国自动化资讯网”对本工作室的大力支持。
   9          ***********************************************************************/
  10          #include<reg52.h>
  11          #define uchar unsigned char
  12          #define uint  unsigned int
  13          
  14          #define jump_ROM 0xCC
  15          #define start 0x44
  16          #define read_EEROM 0xBE
  17          
  18          sbit DQ = P3^4;            //DS18B20数据口
  19          
  20          unsigned char TMPH,TMPL;
  21          unsigned char code table[10] = {0x03, 0x9f, 0x25, 0x0d, 0x99, 0x49, 0x41, 0x1f, 0x01, 0x09};
  22          
  23          /********************************************************************
  24          * 名称 : delay()
  25          * 功能 : 延时函数
  26          * 输入 : 无
  27          * 输出 : 无
  28          ***********************************************************************/
  29          void delay(uint N)
  30          {
  31   1              int i;
  32   1              for(i=0; i<N; i++)
  33   1              ;
  34   1      }
  35          
  36          /********************************************************************
  37          * 名称 : Reset()
  38          * 功能 : 复位DS18B20
  39          * 输入 : 无
  40          * 输出 : 无
  41          ***********************************************************************/
  42          uchar Reset(void)
  43          {
  44   1              uchar deceive_ready;
  45   1              DQ = 0;
  46   1              delay(29);
  47   1              DQ = 1;
  48   1              delay(3);
  49   1              deceive_ready = DQ;
  50   1              delay(25);
  51   1              return(deceive_ready);
  52   1      }
  53          
  54          /********************************************************************
  55          * 名称 : read_bit()
C51 COMPILER V7.50   温度采集DS18B20                                                       04/09/2009 21:39:29 PAGE 2   

  56          * 功能 : 从DS18B20读一个位值
  57          * 输入 : 无
  58          * 输出 : 从DS18B20读出的一个位值
  59          ***********************************************************************/
  60          uchar read_bit(void)
  61          {
  62   1              uchar i;
  63   1              DQ = 0;
  64   1              DQ = 1;
  65   1              for(i=0; i<3; i++);
  66   1              return(DQ);
  67   1      }
  68          
  69          /********************************************************************
  70          * 名称 : write_bit()
  71          * 功能 : 向DS18B20写一位
  72          * 输入 : bitval(要对DS18B20写入的位值)
  73          * 输出 : 无
  74          ***********************************************************************/
  75          void write_bit(uchar bitval)
  76          {
  77   1      DQ=0;if(bitval==1)
  78   1      DQ=1;
  79   1      delay(5);
  80   1      DQ=1;
  81   1      }
  82          
  83          /********************************************************************
  84          * 名称 : read_byte()
  85          * 功能 : 从DS18B20读一个字节
  86          * 输入 : 无
  87          * 输出 : 从DS18B20读到的值
  88          ***********************************************************************/
  89          uchar read_byte(void)
  90          {
  91   1              uchar i,m,receive_data;
  92   1              m = 1;
  93   1              receive_data = 0;
  94   1              for(i=0; i<8; i++)
  95   1              {
  96   2                      if(read_bit())
  97   2                      {
  98   3                              receive_data = receive_data + (m << i);
  99   3                      }
 100   2                      delay(6);
 101   2              }
 102   1              return(receive_data);
 103   1      }
 104          
 105          /********************************************************************
 106          * 名称 : write_byte()
 107          * 功能 : 向DS18B20写一个字节
 108          * 输入 : val(要对DS18B20写入的命令值)
 109          * 输出 : 无
 110          ***********************************************************************/
 111          void write_byte(uchar val)
 112          {
 113   1              uchar i,temp;
 114   1              for(i=0; i<8; i++)
 115   1              {
 116   2                      temp = val >> i;
 117   2                      temp = temp & 0x01;
C51 COMPILER V7.50   温度采集DS18B20                                                       04/09/2009 21:39:29 PAGE 3   

 118   2                      write_bit(temp);
 119   2                      delay(5);
 120   2              }
 121   1      }
 122          
 123          /********************************************************************
 124          * 名称 : display()
 125          * 功能 : 数码管显示温度值
 126          * 输入 : 温度值
 127          * 输出 : 无
 128          ***********************************************************************/
 129          void display(uint tem)   
 130          {
 131   1              uchar j;
 132   1              for(j=50; j>0; j--)
 133   1              {
 134   2                      P0 = table[tem / 100];
 135   2                      P2 = 0x04;
 136   2                      delay(500);
 137   2                      P0 = table[tem / 10 % 10];
 138   2                      P2 = 0x02;
 139   2                      delay(500);
 140   2                      P0 = table[tem % 10];
 141   2                      P2 = 0x01;
 142   2                      delay(500);
 143   2              }
 144   1      }
 145          
 146          /********************************************************************
 147          * 名称 : Main()
 148          * 功能 : 主函数
 149          * 输入 : 无
 150          * 输出 : 无
 151          ***********************************************************************/
 152          void main()
 153          {
 154   1              uint temp;
 155   1              P2 = 0x00;
 156   1              while(1)
 157   1              {
 158   2                      Reset();
 159   2                      write_byte(jump_ROM);
 160   2                      write_byte(start);
 161   2                      Reset();
 162   2                      write_byte(jump_ROM);
 163   2                      write_byte(read_EEROM);
 164   2                      TMPL = read_byte();
 165   2                      TMPH = read_byte();
 166   2                      temp = TMPH;
 167   2                      temp <<= 8;       
 168   2                      temp = temp | TMPL;
 169   2                      temp = TMPL / 16 + TMPH * 16;
 170   2                      display(temp);
 171   2              }
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    350    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   温度采集DS18B20                                                       04/09/2009 21:39:29 PAGE 4   

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