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

📄 ds18b20.lst

📁 用单片机实现对温度的测量
💻 LST
字号:
C51 COMPILER V7.01  DS18B20                                                                12/09/2008 15:46:43 PAGE 1   


C51 COMPILER V7.01, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN E:\佳佰51\NEW51\试验程序\温度试验\DS18B20\DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\佳佰51\NEW51\试验程序\温度试验\DS18B20\DS18B20.C DB SB OE

stmt level    source

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

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

 111   2             P0 = value;
 112   2             addr3 = 1; 
 113   2             addr3 = 0;//在U4的11脚(锁存信号)产生上升沿
 114   2             P2 = scan[i];//取row0--row7行扫描数据
 115   2             delay(50); //延时50us
 116   2             P2 = 0xff;//关显示
 117   2             }
 118   1       }
 119          
 120          /*******************************主函数***********************/
 121          
 122          main()
 123          { uchar i;
 124   1        uchar temp;
 125   1        float backbit;   
 126   1        for(i=0;i<8;i++)
 127   1         dispbuf[i] = 17;
 128   1        while(1){
 129   2            vLedKey_Scan(); //显示,读键扫描 
 130   2            
 131   2             readtemp();//读18B20
 132   2             backbit = temper[0];//换成浮点数
 133   2             backbit = backbit * 6.25;//乘以0.0625*100
 134   2             temp = backbit;//取低2位整数部分
 135   2             dispbuf[5] = temp%10 ;
 136   2             
 137   2             temp = temp/10;
 138   2             dispbuf[4] = temp%10 ;
 139   2             
 140   2             temp = temper[1];//取整数部分
 141   2             dispbuf[3] = temp%10;
 142   2             
 143   2             temp = temp/10;
 144   2             dispbuf[2]= temp%10;
 145   2        }
 146   1      }
 147          
 148          /********************************结束************************/
C51 COMPILER V7.01  DS18B20                                                                12/09/2008 15:46:43 PAGE 4   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


P0 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0080H  1
P1 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0090H  1
P2 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A0H  1
P3 . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B0H  1
table. . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0008H  18
IE . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00A8H  1
temper . . . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0000H  2
DQ . . . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0094H  1
IP . . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00B8H  1
vLedKey_Scan . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
  value. . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
reset. . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  x. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  temp . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
  backbit. . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0000H  4
scan . . . . . . . . . . . . . . . . .  PUBLIC   CODE   ARRAY    0000H  8
SCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0098H  1
TCON . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   0088H  1
_writebyte . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  dat. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
addr0. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0094H  1
addr1. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0095H  1
addr2. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0096H  1
addr3. . . . . . . . . . . . . . . . .  ABSBIT   -----  BIT      0097H  1
readbyte . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  i. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0005H  1
  dat. . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0003H  1
readtemp . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  a. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0002H  1
  b. . . . . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
T2CON. . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00C8H  1
_delay . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  us . . . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
dispbuf. . . . . . . . . . . . . . . .  PUBLIC   DATA   ARRAY    0002H  8
PSW. . . . . . . . . . . . . . . . . .  SFR      DATA   U_CHAR   00D0H  1


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    318    ----
   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 + -