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

📄 ds18b20.lst

📁 51单片机开发
💻 LST
字号:
C51 COMPILER V7.06   DS18B20                                                               03/02/2007 11:18:48 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN ds18b20.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE ds18b20.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                   测温+显示程序                         */                                       
             -                                                                                                                        
             -            
   4          /*功能:           读取当前18B20温度,由数码管显示出来。            */                                    
             -                
   5          /*难度等级:                   中                                */                                       
             -                              
   6          /* 作者:                  zengrenliang                          */
   7          /* 版权:           http://www.51kaifa.com                       */
   8          /*编写日期:        2006.05.19                                   */                                       
             -                                                                                                                        
             -                                              
   9          /*****************************************************************/
  10          
  11          
  12          #include<reg52.h>
  13          #define  uchar  unsigned char
  14          
  15          sbit DQ =P3^2;//18B20数据线引脚
  16          sbit LED_Disp = P3^3;
  17          
  18          sbit addr0 = P1^4;//系统片选地址线0
  19          sbit addr1 = P1^5;//系统片选地址线1
  20          sbit addr2 = P1^6;//系统片选地址线2
  21          sbit addr3 = P1^7;//系统片选地址线3
  22          //行扫描数组
  23          uchar code scan[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//row0--row7
  24          //数码管显示的段码表
  25          uchar code table[18] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,//0,1,2,3,4,5
  26                                 0x82,0xf8,0x80,0x90,0x88,0x83,//6,7,8,9,a,b
  27                                 0xc6,0xa1,0x86,0x8e,0xbf,0xff};//c,d,e,f,-,空格
  28          
  29          uchar dispbuf[8]; //显示缓冲区   
  30          uchar  temper[2];//存放温度的数组                      
  31          
  32          /*****************************延时函数**************************/
  33          
  34          void delay (unsigned int us)  
  35          {
  36   1        while(us--);
  37   1      }
  38          
  39          void reset(void)   //复位
  40          {
  41   1        uchar x=0;
  42   1        DQ = 1;
  43   1        delay(8);   //稍做延时
  44   1        DQ = 0;
  45   1        delay(80);   //精确延时 大于 480us
  46   1        DQ = 1;   //拉高总线
  47   1        delay(14);
  48   1        x=DQ;
C51 COMPILER V7.06   DS18B20                                                               03/02/2007 11:18:48 PAGE 2   

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

 111   2             P0 = value;
 112   2             P2 = scan[i];//取row0--row7行扫描数据
 113   2             delay(50); //延时50us
 114   2             }
 115   1       }
 116          
 117          /*******************************主函数***********************/
 118          
 119          main()
 120          { uchar i;
 121   1        uchar temp;
 122   1        float backbit; 
 123   1        P1 = 0x80;//"温度"指示灯亮  
 124   1        for(i=0;i<8;i++)
 125   1         dispbuf[i] = 17;
 126   1        while(1){
 127   2            vLedKey_Scan(); //显示,读键扫描 
 128   2            
 129   2             readtemp();//读18B20
 130   2             backbit = temper[0];//换成浮点数
 131   2             backbit = backbit * 6.25;//乘以0.0625*100
 132   2             temp = backbit;//取低2位整数部分
 133   2             dispbuf[4] = temp%10 ;
 134   2             
 135   2             temp = temp/10;
 136   2             dispbuf[3] = temp%10 ;
 137   2             
 138   2             temp = temper[1];//取整数部分
 139   2             dispbuf[2] = temp%10;
 140   2             
 141   2             temp = temp/10;
 142   2             dispbuf[1]= temp%10;
 143   2        }
 144   1      }
 145          
 146          /********************************结束************************/


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