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

📄 温度计.lst

📁 基于AT89C2051单片机控制DS18B20传感器的数字温度计
💻 LST
字号:
C51 COMPILER V8.08   蝊度计                                                                07/23/2008 16:59:22 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE 蝊度计
OBJECT MODULE PLACED IN 温度计.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 温度计.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #include <reg52.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sbit DQ=P3^0;                         
   6          uchar flag1;                     
   7          uchar tempL=0; 
   8          uchar tempH=0; 
   9          uint tt;
  10          float temperature;              
  11          unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; 
  12          uchar code table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};  
  13          uchar code scan_con[4]={0x01,0x02,0x04,0x08};  
  14          uchar data Dis_play[4]={0X00,0x00,0x00,0x00};
  15          
  16           void delay(uint i)    
  17             {
  18   1            while(i--);
  19   1         }
  20           Init_DS18B20(void)
  21            {
  22   1           uchar x=0;
  23   1           DQ = 1;               //DQ复位
  24   1           delay(8);        
  25   1           DQ = 0;               //单片机将DQ拉低
  26   1           delay(80);            //精确延时 大于 480us
  27   1           DQ = 1;               
  28   1           delay(14);
  29   1           x=DQ;                 //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  30   1           delay(20);
  31   1        }
  32          
  33          
  34          //           读字节子函数                    
  35          
  36           ReadOneChar(void)
  37            {
  38   1           uchar i = 0;
  39   1           uchar dat = 0;
  40   1         for (i=8;i>0;i--)
  41   1          {
  42   2            DQ = 0;              
  43   2            dat>>=1;             // 数据右移一位
  44   2            DQ = 1;             
  45   2            if(DQ)               // DQ为1
  46   2            dat|=0x80;          // 读出数据
  47   2            delay(4);       
  48   2           }
  49   1         return(dat);
  50   1        }
  51          
  52          //             写字节子函数                   
  53          
  54           WriteOneChar(unsigned char dat)
  55            {
C51 COMPILER V8.08   蝊度计                                                                07/23/2008 16:59:22 PAGE 2   

  56   1           uchar i = 0;
  57   1           for (i=8; i>0; i--)
  58   1                   {
  59   2                     DQ = 0;
  60   2                     DQ = dat&0x01;   //写入一位数据
  61   2                     delay(5);
  62   2                     DQ = 1;
  63   2                     dat>>=1;       
  64   2                   }
  65   1        }
  66          
  67          
  68          //       发送温度转换命令               
  69          ReadTemperature(void)
  70          
  71          { 
  72   1                      Init_DS18B20(); 
  73   1                      WriteOneChar(0xcc); 
  74   1                      WriteOneChar(0x44); //启动温度转换
  75   1                      delay(125); 
  76   1                      Init_DS18B20();
  77   1                      WriteOneChar(0xcc); //跳过读序列号的操作
  78   1                      WriteOneChar(0xbe); //读温度寄存器(头两个值分别为温度的低位和高位)
  79   1                      tempL=ReadOneChar(); 
  80   1                      tempH=ReadOneChar(); 
  81   1              if(tempH>0xfd)
  82   1                      {
  83   2                          flag1=1;
  84   2                          temperature=(65536-((tempH*256)+tempL))*0.0625; 
  85   2                              tt=temperature*10+0.5;
  86   2                              delay(200);
  87   2                              return(tt); 
  88   2                      }               
  89   1                      else
  90   1                      {
  91   2                              temperature=((tempH*256)+tempL)*0.0625;  
  92   2                              tt=temperature*10+0.5;
  93   2                              delay(200);
  94   2                              return(tt);
  95   2                      }
  96   1      }
  97           void    tem_deal(uint tem)
  98                    
  99            {     
 100   1                       Dis_play[0]=0xff;
 101   1                       Dis_play[0]=tem/1000;  
 102   1                       Dis_play[1]=tem/100%10;    
 103   1                   Dis_play[2]=tem%100/10;
 104   1                   Dis_play[3]=tem%10;
 105   1                                       
 106   1                 if(!Dis_play[0])       
 107   1                         {
 108   2                            Dis_play[0]=0x0a;   
 109   2                            if(!Dis_play[1])
 110   2                                 {
 111   3                                   Dis_play[1]=0x0a; 
 112   3                                 }
 113   2                         }
 114   1                 if(flag1)
 115   1                         {
 116   2                            Dis_play[0]=0x0b;   
 117   2                         }  
C51 COMPILER V8.08   蝊度计                                                                07/23/2008 16:59:22 PAGE 3   

 118   1        }
 119          
 120           void display()
 121            {
 122   1             char k;
 123   1               for(k=0;k<4;k++)                    
 124   1                                {                             
 125   2                                       if (k==2)
 126   2                                          {   
 127   3                                                       P2=scan_con[k];                
 128   3                                                   P0=table1[Dis_play[k]];        
 129   3                                               }
 130   2                                       else
 131   2                                           {
 132   3                                                    P2=scan_con[k];                 
 133   3                                                    P0=table[Dis_play[k]];          
 134   3                                               }                           
 135   2                                   delay(500);                         
 136   2                                }
 137   1        }
 138          
 139          
 140          
 141           void main()
 142           {
 143   1         do
 144   1         {
 145   2            flag1=0;
 146   2           tem_deal(ReadTemperature()); 
 147   2           display();
 148   2         }
 149   1           while(1);
 150   1       }
 151          
 152          
 153          
 154          
 155          
 156          


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