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

📄 18b20.lst

📁 51——14-单线温度传感器18b20;用温度传感器18b20检测温度
💻 LST
字号:
C51 COMPILER V7.06   18B20                                                                 08/07/2008 11:38:21 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: d:\Keil2\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //18B20单线温度检测的应用样例程序
   2          #include<REG52.H>
   3          #include<math.h>
   4          #include<INTRINS.H>
   5          
   6          #define uchar unsigned char
   7          #define uint   unsigned int;
   8          /*****************************************************************************/
   9          sbit seg1=P2^0;
  10          sbit seg2=P2^1;
  11          sbit seg3=P2^2;
  12          sbit DQ=P1^7;//ds18b20 端口
  13          sfr dataled=0x80;//显示数据端口
  14          /**********************************************************************/ 
  15          uchar temp;
  16          uchar flag_get,count,num,minute,second;
  17          uchar code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//7段数码管段码表共阳
  18          uchar  str[3];
  19          /***********************************************************************/
  20          void delay1(uchar MS);
  21          unsigned char ReadTemperature(void);
  22          void Init_DS18B20(void);
  23          unsigned char ReadOneChar(void);
  24          void WriteOneChar(unsigned char dat);
  25          void delay(unsigned int i);
  26          /************************************************************************/
  27          main()
  28          {
  29   1      
  30   1      TMOD=0x01;//定时器设置
  31   1      TH0=0xef;
  32   1      TL0=0xf0;
  33   1      IE=0x82;
  34   1      TR0=1;
  35   1      P2=0x00;  
  36   1      count=0;
  37   1      
  38   1      
  39   1      while(1)
  40   1      {
  41   2         str[0]=0xc6;//显示C符号
  42   2         str[2]=tab[temp/10]; //十位温度
  43   2         str[1]=tab[temp%10]; //个位温度
  44   2        if(flag_get==1)
  45   2          {
  46   3        temp=ReadTemperature();
  47   3        flag_get=0;
  48   3          }
  49   2        }
  50   1      }
  51          
  52          
  53          
  54          void tim(void) interrupt 1 using 1//中断,用于数码管扫描和温度检测间隔
  55          {
C51 COMPILER V7.06   18B20                                                                 08/07/2008 11:38:21 PAGE 2   

  56   1      TH0=0xff;
  57   1      TL0=0xf0;
  58   1      num++;
  59   1      if (num==100)
  60   1          {num=0;
  61   2                flag_get++;
  62   2            second++;
  63   2             if(second>=60)
  64   2               {second=0;
  65   3                 minute++;  
  66   3                }
  67   2            }
  68   1      count++;
  69   1      if(count==1)
  70   1         {P2=0xf7;
  71   2          dataled=str[2];}//数码管扫描
  72   1      if(count==2)
  73   1         {P2=0xfb;
  74   2          dataled=str[1];}
  75   1      if(count==3)
  76   1         { P2=0xfd;
  77   2           dataled=str[0];
  78   2           count=0;}
  79   1      }
  80          
  81          /*************************************************************************************/
  82          void delay(unsigned int i)//延时函数
  83          {
  84   1       while(i--);
  85   1      }
  86          /***************************************************************************************/
  87          //18b20初始化函数
  88          void Init_DS18B20(void)
  89          {
  90   1       unsigned char x=0;
  91   1       DQ = 1;    //DQ复位
  92   1       delay(8);  //稍做延时
  93   1       DQ = 0;    //单片机将DQ拉低
  94   1       delay(80); //精确延时 大于 480us
  95   1       DQ = 1;    //拉高总线
  96   1       delay(10);
  97   1       x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  98   1       delay(5);
  99   1      }
 100          
 101          //读一个字节
 102          unsigned char ReadOneChar(void)
 103          {
 104   1      unsigned char i=0;
 105   1      unsigned char dat = 0;
 106   1      for (i=8;i>0;i--)
 107   1       {
 108   2        DQ = 0; // 给脉冲信号
 109   2        dat>>=1;
 110   2        DQ = 1; // 给脉冲信号
 111   2        if(DQ)
 112   2         dat|=0x80;
 113   2        delay(5);
 114   2       }
 115   1       return(dat);
 116   1      }
 117          
C51 COMPILER V7.06   18B20                                                                 08/07/2008 11:38:21 PAGE 3   

 118          //写一个字节
 119          void WriteOneChar(unsigned char dat)
 120          {
 121   1       unsigned char i=0;
 122   1       for (i=8; i>0; i--)
 123   1       {
 124   2        DQ = 0;
 125   2        DQ = dat&0x01;
 126   2        delay(5);
 127   2        DQ = 1;
 128   2        dat>>=1;
 129   2       }
 130   1      delay(5);
 131   1      }
 132          
 133          //读取温度
 134          unsigned char ReadTemperature(void)
 135          {
 136   1      unsigned char a=0;
 137   1      unsigned char b=0;
 138   1      unsigned char t=0;
 139   1      //float tt=0;
 140   1      Init_DS18B20();
 141   1      WriteOneChar(0xCC); // 跳过读序号列号的操作
 142   1      WriteOneChar(0x44); // 启动温度转换
 143   1      delay(200);
 144   1      Init_DS18B20();
 145   1      WriteOneChar(0xCC); //跳过读序号列号的操作 
 146   1      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 147   1      a=ReadOneChar();
 148   1      b=ReadOneChar();
 149   1      
 150   1      b<<=4;
 151   1      b+=(a&0xf0)>>4;
 152   1      t=b;
 153   1      //tt=t*0.0625;
 154   1      //t= tt*10+0.5; //放大10倍输出并四舍五入
 155   1      return(t);
 156   1      }
 157          
 158          


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