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

📄 ds18b20.lst

📁 用单片机实现对温度的测量
💻 LST
字号:
C51 COMPILER V8.02   DS18B20                                                               03/08/2009 14:29:22 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          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                   测温+显示程序                         */                                       
             -                                                                                                                        
             -            
   4          /*功能:           读取当前18B20温度,由数码管显示出来。         */                                       
             -             
   5          /*难度等级:                   中                                */                                       
             -                              
   6          /*   E-mail:hbyuan2007@sina.com                                  */
   7          /*编写日期:        2009.03.07                                   */                                       
             -                                                                                                                        
             -                                              
   8          /*****************************************************************/
   9          
  10          
  11          #include<reg52.h>
  12          #define  uchar  unsigned char
  13          
  14          sbit DQ =P3^7;//18B20数据线引脚
  15          
  16          //行扫描数组
  17          uchar code scan[4] = {0x7f,0xbf,0xdf,0xef};//row0--row4
  18          //数码管显示的段码表
  19          uchar code table[20] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,//     0,1,2,3,4,5 ,6,7,8,9,
  20                                 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,};// 0.,1.,2.,3.,4.,5.,6.,
             -7.,8.,9.
  21          
  22          uchar dispbuf[4]; //显示缓冲区   
  23          uchar  temper[2];//存放温度的数组                      
  24          
  25          /*****************************延时函数**************************/
  26          
  27          void delay (unsigned int us)  
  28          {
  29   1        while(us--);
  30   1      }
  31          
  32          void reset(void)   //复位
  33          {
  34   1        uchar x=0;
  35   1        DQ = 1;
  36   1        delay(8);   //稍做延时
  37   1        DQ = 0;
  38   1        delay(80);   //精确延时 大于 480us
  39   1        DQ = 1;   //拉高总线
  40   1        delay(14);
  41   1        x=DQ;
  42   1        delay(20);
  43   1      }
  44          /**********************从DS18B20读一字节***************/
  45          uchar readbyte(void) //读1字节
  46          {
  47   1        uchar i=0;
C51 COMPILER V8.02   DS18B20                                                               03/08/2009 14:29:22 PAGE 2   

  48   1        uchar dat=0;
  49   1        for (i=8;i>0;i--)
  50   1        {
  51   2          DQ = 0;
  52   2          dat>>=1;
  53   2          DQ = 1;
  54   2          if(DQ)
  55   2          dat|=0x80;
  56   2          delay(4);
  57   2         }
  58   1        return(dat);
  59   1       }
  60          /***********************向DS18B20写一字节***********************/
  61          void writebyte(unsigned char dat) //写1字节
  62          {
  63   1        uchar i=0;
  64   1        for (i=8; i>0; i--)
  65   1        {
  66   2         DQ = 0;
  67   2         DQ = dat&0x01;
  68   2         delay(5);
  69   2         DQ = 1;
  70   2         dat>>=1;
  71   2         }
  72   1       delay(4);
  73   1      }
  74          /***********************CPU读取温度值***************************/
  75          void readtemp(void) //读取温度
  76          {
  77   1        uchar a=0,b=0;
  78   1        reset();
  79   1        writebyte(0xCC); // 跳过序列号
  80   1        writebyte(0x44); // 启动温度转换
  81   1        reset();
  82   1        writebyte(0xCC);
  83   1        writebyte(0xBE); //读9个寄存器,前两个为温度
  84   1        a=readbyte();   //低位
  85   1        b=readbyte();   //高位
  86   1        temper[0]=a&0x0f;
  87   1        a=a>>4;         //低位右移4位,舍弃小数部分
  88   1        temper[1]=b<<4;         //高位左移4位,舍弃符号位
  89   1        temper[1]=temper[1]|a;
  90   1        }
  91          
  92          /******************************显示+读键*************************/
  93          
  94          void vLedKey_Scan()
  95          {  unsigned char i,value;  
  96   1      
  97   1          for(i=0;i<=3;i++){
  98   2           
  99   2             value =table[dispbuf[i]]; //取一行显示数据 
 100   2             if(i==0)
 101   2             value &= 0x7f;
 102   2             P0 = value;
 103   2           
 104   2             P2 = scan[i];//取row0--row7行扫描数据
 105   2             delay(100); //延时50us
 106   2             P2 = 0xff;//关显示
 107   2             }
 108   1       }
 109          
C51 COMPILER V8.02   DS18B20                                                               03/08/2009 14:29:22 PAGE 3   

 110          /*******************************主函数***********************/
 111          
 112          main()
 113          { uchar i;
 114   1        uchar temp;
 115   1        float backbit;   
 116   1        for(i=0;i<=3;i++)
 117   1         dispbuf[i] = 17;
 118   1        while(1){
 119   2            vLedKey_Scan(); //显示,读键扫描 
 120   2            
 121   2             readtemp();//读18B20
 122   2             backbit = temper[0];//换成浮点数
 123   2             backbit = backbit * 6.25;//乘以0.0625*100
 124   2             temp = backbit;//取低2位整数部分
 125   2             dispbuf[3] = temp%10 ;
 126   2             
 127   2             temp = temp/10;
 128   2             dispbuf[2] = temp%10 ;
 129   2             
 130   2             temp = temper[1];//取整数部分
 131   2             dispbuf[1] = temp%10;
 132   2             dispbuf[1]+=10;
 133   2             temp = temp/10;
 134   2             dispbuf[0]= temp%10;
 135   2        }
 136   1      }
 137          
 138          /********************************结束************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    312    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      6       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 + -