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

📄 ds18b20.lst

📁 DS18B20温度传感器
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 10:51:33 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          #include <reg52.h>
   2          #include <DS18B20.h>
   3          #include<intrins.h>
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          uchar temp_value,current_temp[2],wei;
   7          //uchar code table[]={0x03,0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x09};
   8          //uchar code ditab[16]=
   9          //{0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  10          //
  11          uchar code table[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};
  12          //uchar code scan_con[4]={0xf7,0xfb,0xfd,0xfe};    //列扫描控制字
  13          uchar data temp_data[2]={0x00,0x00};             //读出温度暂放
  14          uchar data display[5]={0x00,0x00,0x00,0x00,0x00};     //显示单元数据,共4个数据和一个运算暂用
  15          
  16           void   delay(uint n)  //延时子程序
  17          {
  18   1               uint  j,k;     
  19   1              for(k=0;k<n;k++)                        
  20   1              for(j=0;j<500;j++);
  21   1      }
  22          
  23          void display1(uchar bai,uchar shi,uchar ge)      //显示子程序
  24          {
  25   1              P0=table[bai];
  26   1              wei=0xfd;
  27   1              P2=wei;
  28   1              delay(1);
  29   1              P2=0xff;
  30   1      
  31   1              P0=table[shi];
  32   1              wei=0xfb;
  33   1              P2=wei;
  34   1              delay(1);
  35   1              P2=0xff;
  36   1      
  37   1              P0=table[ge];
  38   1              wei=0xf7;
  39   1              P2=wei;
  40   1              delay(1);
  41   1              P2=0xff;
  42   1      
  43   1      }sbit  DQ18B20 = P2^7;
*** ERROR C231 IN LINE 43 OF DS18B20.C: 'DQ18B20': redefinition
  44          
  45          void  Delayus(unsigned int t)
  46          {
  47   1      for (;t>0;t--);
  48   1      }
*** ERROR C237 IN LINE 48 OF DS18B20.C: '_Delayus': function already has a body
  49          
  50          void Write_18b20(uchar val)
  51          { 
  52   1        uchar i;
  53   1        for(i=8;i>0;i--)
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 10:51:33 PAGE 2   

  54   1        {
  55   2         DQ18B20=1;_nop_();_nop_();                  //从高拉倒低
  56   2         DQ18B20=0;_nop_();_nop_();_nop_();_nop_();  //5 us
  57   2         DQ18B20=val&0x01;                           //最低位移出
  58   2         Delayus(5);                              //55 us 15us~120us
  59   2         val=val/2;                             //右移1位
  60   2         }
  61   1         DQ18B20=1;
  62   1         Delayus(1);
  63   1      }                                                                                                                                                                         
*** ERROR C237 IN LINE 63 OF DS18B20.C: '_Write_18b20': function already has a body
  64          
  65          /*void Write_18b20(unsigned char ddata)     //写18B20数据
  66          {
  67              unsigned char i;
  68                  for(i=0;i<8;i++) 
  69                  {
  70                 DQ18B20=1;_nop_();_nop_();                  //从高拉倒低
  71                     DQ18B20 = 0;
  72                  _nop_();_nop_();_nop_();_nop_();  //5 us           
  73                 DQ18B20 = ddata&0x01;
  74                     ddata=ddata >> 1;
  75                     Delayus(6);            // Delay68us
  76                     DQ18B20 = 1;
  77                  }
  78                 DQ18B20 = 1;
  79                     Delayus(1);            // Delay 18us   
  80          }
  81          
  82          /*Write_18b20(unsigned char WriteData)
  83          {
  84              unsigned char i;
  85              unsigned char tmpData;
  86              for(i=0;i<8;i++)
  87              {
  88                  tmpData=WriteData&0x01;
  89                  WriteData>>=1;
  90                  if(tmpData)
  91                  {
  92                      DQ18B20=0;
  93                      DQ18B20=1;
  94                      Delayus(4);
  95                  }
  96                  else
  97                  {
  98                      DQ18B20=0;
  99                      Delayus(4);
 100                      DQ18B20=1;
 101                  }
 102               }
 103          }
 104          
 105          unsigned char Read_18b20(void)      //读18B20  
 106          {
 107              unsigned char   i,temp;
 108                  for(i=0;i<8;i++)
 109                  {
 110                   DQ18B20 =1;
 111                           temp=temp>>1;
 112                           DQ18B20 = 0;
 113                           Delayus(1);
 114                           DQ18B20 =1;
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 10:51:33 PAGE 3   

 115                           Delayus(1);    
 116                           if(DQ18B20 ==0)
 117                           {
 118                              temp=temp&0x7f;
 119                           }
 120                           else
 121                           {
 122                              temp=temp|0x80;
 123                           }
 124                           Delayus(5);          //Delay 58us
 125                  }
 126              DQ18B20=1;
 127                  return temp;
 128          }
 129          /*
 130          //读一个字节
 131          unsigned char Read_18b20()
 132          {
 133              unsigned char i;
 134              unsigned char ReadData=0;
 135              for(i=0;i<8;i++)
 136              {
 137                  DQ18B20=0;
 138                  ReadData>>=1;
 139                  DQ18B20=1;
 140                  if(DQ18B20) 
 141                  ReadData|=0x80;
 142                  Delayus(4);
 143              }
 144              return ReadData;
 145          }  */
 146          
 147          unsigned  char Read_18b20(void)
 148          {
 149   1       unsigned char i;
 150   1       unsigned char value=0;
 151   1       for(i=8;i>0;i--)
 152   1       {
 153   2        DQ18B20=1;_nop_();_nop_();
 154   2        value>>=1;
 155   2        DQ18B20=0;_nop_();_nop_();_nop_();_nop_();         //4 us
 156   2        DQ18B20=1;_nop_();_nop_();_nop_();_nop_();         //4 us
 157   2        if(DQ18B20)value|=0x80;
 158   2        Delayus(6);                                     //66 us
 159   2       }
 160   1          DQ18B20=1;
 161   1          return(value);
 162   1      }
*** ERROR C237 IN LINE 162 OF DS18B20.C: 'Read_18b20': function already has a body
 163          
 164          /*void Init_18b20(void)      //18b20的初始化   
 165          {
 166              DQ18B20 =0;
 167                  Delayus(50);            //Delay 508us
 168                  DQ18B20 =1;
 169                  Delayus(5);            //Delay 108us
 170              while(DQ18B20);
 171                  Delayus(10);            //Delay 108us 
 172              DQ18B20 =1;  
 173          }*/
 174          void Init_18b20()
 175          {
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 10:51:33 PAGE 4   

 176   1          DQ18B20=0;
 177   1          Delayus(60);        //下拉500us
 178   1          DQ18B20=1;          //释放总线
 179   1          Delayus(6);
 180   1          while(DQ18B20);     //等待应答信号
 181   1          while(~DQ18B20);    //等待释放总线
 182   1      } 
*** ERROR C237 IN LINE 182 OF DS18B20.C: 'Init_18b20': function already has a body
 183          
 184          /*Init_18b20(void)
 185          {
 186          char presence=1;
 187          while(presence)
 188          {
 189            while(presence)
 190             {
 191              DQ18B20=1;_nop_();_nop_();//从高拉倒低
 192              DQ18B20=0;                                       
 193              Delayus(50);           //550 us
 194              DQ18B20=1;                                        
 195              Delayus(6);            //66 us
 196              presence=DQ18B20;         //presence=0 复位成功,继续下一步
 197             } 
 198              Delayus(45);            //延时500 us
 199              presence=~DQ18B20;         
 200          }
 201              DQ18B20=1;                   //拉高电平
 202          } */
 203          
 204          unsigned char Get_temp_value()         //获取温度值
 205          {     
 206   1           Init_18b20();
 207   1           Delayus(200);            
 208   1           Write_18b20(0xcc);  //跳过ROM地址 
 209   1           Write_18b20(0x44); //温度变换
 210   1           Init_18b20();
 211   1           Delayus(1);        
 212   1           Write_18b20(0xcc);
 213   1           Write_18b20(0xbe);//读温度
 214   1      
 215   1           databuff[0]=Read_18b20();
 216   1           databuff[1]=Read_18b20();
 217   1           temp=databuff[1];
 218   1           temp<<=8;                                               
 219   1           temp=temp|databuff[0];      // 两字节合成一个整型变量。
 220   1               //temp_value_integer=(((databuff[0]<<4)&0xf0)|((databuff[1]>>4)&0x0f));
 221   1           // temp_value_decimal=(databuff[0]&0x000f)*625;
 222   1           return temp;
 223   1      }
*** ERROR C237 IN LINE 223 OF DS18B20.C: 'Get_temp_value': function already has a body
 224          
 225          
 226          void main()
 227          {
 228   1          Init_18b20( );
 229   1          Write_18b20(0xcc);  //跳过ROM地址 
 230   1          Write_18b20(0x44);    
 231   1              while(1)
 232   1              {
 233   2              //Get_temp_value();//获取温度值
 234   2              display[3]=Get_temp_value()%100;     // 取后两位数据暂存
 235   2              display[2]=Get_temp_value()/100;     // 取百位数据暂存
C51 COMPILER V8.02   DS18B20                                                               12/20/2008 10:51:33 PAGE 5   

 236   2              display[1]=display[2]/10;      // 取十位数据暂存
 237   2              display[0]=display[2]%10;
 238   2              display1(display[2],display[1],display[0]) ;            
 239   2              }
 240   1      }

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

⌨️ 快捷键说明

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