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

📄 ds1820.lst

📁 ds18b20温度传感器
💻 LST
字号:
C51 COMPILER V7.50   DS1820                                                                12/10/2008 23:14:22 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #include"start.h"
   3          #include"ds1820.h"
   4          #include<math.h>                                                          
   5          unsigned  templ,temph;
   6          sbit DQ=P3^7;
   7          //==================================
   8          //                延时微秒
   9          //==================================
  10          void delay_us(int us)
  11          {
  12   1              for(;us>0;us--);
  13   1      }
  14          
  15          //======================================================
  16          // 复位 和检测存在返回0表示没有器件,返回1表示有器件存在            
  17          //======================================================
  18          bit ds1820_reset()//
  19          {
  20   1              bit flag=0;
  21   1              DQ=1;
  22   1              delay_us(1);
  23   1              DQ=0;
  24   1              delay_us(60);//延时50*8微秒
  25   1              DQ=1;            //DQ=1表示释放总线,并不代表总线的电平就一定就是1。
  26   1              delay_us(8); 
  27   1              flag=DQ;        //
  28   1              delay_us(14);
  29   1              DQ=1;
  30   1              return ~flag;
  31   1      }
  32          
  33          //=============================================
  34          //                                读一个字节
  35          //=============================================
  36          unsigned ds1820_read_byte()  //
  37          {
  38   1              unsigned value=0,i;
  39   1              DQ=1;
  40   1              for(i=0;i<8;i++)
  41   1              {   
  42   2                      DQ=0;
  43   2                      value>>=1;
  44   2                      DQ=1;
  45   2      //              delay_us(1);  //加上此语句就不行,不能延时!
  46   2                      if(DQ)
  47   2                          value|=0x80;
  48   2                      delay_us(6);
  49   2                      DQ=1;
  50   2              }
  51   1              return value;  
  52   1      }
  53          
  54          
  55          //========================================
C51 COMPILER V7.50   DS1820                                                                12/10/2008 23:14:22 PAGE 2   

  56          //                 写一个字节
  57          //========================================
  58          void ds1820_write_byte(unsigned num)//
  59          {
  60   1              unsigned i;
  61   1              DQ=1;
  62   1              for(i=0;i<8;i++)
  63   1              {
  64   2                      DQ=0;
  65   2                      DQ=num&0x01;
  66   2                      num>>=1;
  67   2                      delay_us(7);
  68   2                      DQ=1;
  69   2              }
  70   1      
  71   1      }
  72          
  73          float tempeature_read()// 读温度
  74          {
  75   1              unsigned hi,low,i;
  76   1              float xiaoshu=0;
  77   1      //      bit flag=0;
  78   1              EA=0;
  79   1              ds1820_reset();
  80   1      
  81   1              ds1820_write_byte(0xcc);   //跳过读序号列号的操作
  82   1              ds1820_write_byte(0x44);   // 启动温度转换
  83   1      
  84   1              
  85   1              
  86   1              ds1820_reset();
  87   1        
  88   1              ds1820_write_byte(0xcc);         //跳过读序号列号的操作
  89   1              ds1820_write_byte(0xbe);           //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  90   1              
  91   1              low=ds1820_read_byte();
  92   1              hi=ds1820_read_byte();
  93   1              EA=1;
  94   1              hi=(hi&0x07)<<4;
  95   1              hi=hi|((low&0xf0)>>4);
  96   1              low=low&0x0f;
  97   1              for(i=4;i>0;i--)
  98   1              {
  99   2                      if(low&&0x01!=0)
 100   2                              xiaoshu=xiaoshu+1/pow(2,i);
 101   2                      low>>=1;
 102   2              }
 103   1              xiaoshu=xiaoshu+hi;
 104   1      
 105   1              return xiaoshu;
 106   1      
 107   1      }
 108          //==========================
 109          void delay5ms()
 110          {
 111   1         int i;
 112   1         for(i=0;i<800;i++);
 113   1      }
 114          
 115          
 116          /*
 117          unsigned to_bcd(unsigned char num)        // 时间转换成BCD吗
C51 COMPILER V7.50   DS1820                                                                12/10/2008 23:14:22 PAGE 3   

 118          {
 119               unsigned ge,shi;
 120                   shi=num/10;
 121                   ge=num%10;
 122                   shi=(shi<<4)|ge;
 123                   return shi;
 124          }
 125          
 126          */
 127          
 128          
 129          
 130          void led_display(unsigned i,unsigned num)//在第i位上显示num
 131          {    
 132   1                                                      // 
 133   1              unsigned char ledtable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
 134   1              LED1=1;
 135   1              LED2=1;                     
 136   1              LED3=1;
 137   1              if(i==2)
 138   1              {
 139   2                      P0=ledtable[num]|0x80; //在第二位加上小数点
 140   2              }
 141   1              else
 142   1              P0=ledtable[num];
 143   1              switch(i)
 144   1              {
 145   2                      case 1:LED1=0;break;
 146   2                      case 2:LED2=0;break;
 147   2                      case 3:LED3=0;break;
 148   2              //      case 4:LED4=1;break;
 149   2                      default:break;
 150   2              }
 151   1              delay5ms();
 152   1              
 153   1      }
 154          
 155          
 156          
 157          main()
 158          {   
 159   1      //      bit flag;
 160   1              
 161   1              float temper=45.6;
 162   1              unsigned char ge,shi,dot1,i=1; 
 163   1              
 164   1              //DQ=1; 
 165   1              LED1=0;
 166   1              LED2=0;
 167   1              LED3=0;          
 168   1              D8=0;
 169   1              D9=0;
 170   1              
 171   1      /*      TR0=0;
 172   1              TH0=0xee;
 173   1              TL0=0;
 174   1              TR0=1; 
 175   1              EA=1;
 176   1              ET0=1;   */
 177   1          while(1)
 178   1              {
 179   2              
C51 COMPILER V7.50   DS1820                                                                12/10/2008 23:14:22 PAGE 4   

 180   2                      temper=tempeature_read();
 181   2                      shi=(unsigned char)(temper/10);
 182   2                      ge=(unsigned char)((int)temper%10);
 183   2                      dot1=(unsigned char)(((int)(temper*10))%10);
 184   2                      if(i==1)
 185   2                      {
 186   3                              led_display(1,shi);
 187   3                              i++;
 188   3                      }
 189   2                      else if(i==2)
 190   2                      {
 191   3                              led_display(2,ge);
 192   3                              i++;
 193   3                      }
 194   2                      else if(i==3)
 195   2                      {
 196   3                              led_display(3,dot1);
 197   3                              i=1;
 198   3                      }
 199   2      
 200   2              
 201   2              } 
 202   1              
 203   1      
 204   1      }
 205          /*void timer() interrupt 1
 206          {
 207                  TR0=0;
 208                  TH0=0xee;
 209                  TL0=0;
 210          //      led_display();
 211                  TR0=1;
 212          }   */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    703    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      4      34
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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