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

📄 ds18b20-shuma-c51.lst

📁 基于51的DS18B20_1Wire温度控制等C,ASM源程序
💻 LST
字号:
C51 COMPILER V8.02   DS18B20_SHUMA_C51                                                     08/21/2006 15:47:52 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS18B20_SHUMA_C51
OBJECT MODULE PLACED IN DS18B20-SHUMA-C51.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20-SHUMA-C51.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************/
   2          /*                                                                 */
   3          /* ME500单片机开发系统演示程序 - DS18B20温度显示                   */
   4          /*                                                                 */
   5          /* 8数码管显示两个DS18B20的温度值                                  */
   6          /*                                                                 */
   7          /* 版本: V1.0 (2006/11/20)                                        */
   8          /* 作者: gguoqing (Email: gguoqing@willar.com)                    */
   9          /* 网站: www.willar.com(伟纳电子)   www.mcusj.com(伟纳单片机世界) */
  10          /* 时间: 2006/08/15                                               */
  11          /*                                                                 */                                     
             -                          
  12          /*【版权】Copyright(C)伟纳电子 www.willar.com  All Rights Reserved */
  13          /*【声明】此程序仅用于学习与参考,引用请注明版权和作者信息!       */
  14          /*                                                                 */
  15          /*******************************************************************/
  16          
  17          #include <reg51.h>
  18          
  19          sbit DQ = P3^3;  //定义DS18B20端口DQ  
  20          sbit BEEP=P3^7 ;
  21          
  22          unsigned char presence,ch;
  23          
  24          unsigned char code  LEDData[ ]   = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
  25                                              0x80,0x90,0xff,0xbf}; 
  26          
  27          unsigned char data  temp_data[2] = {0x00,0x00};
  28          
  29          unsigned char data  display[5] =   {0x00,0x00,0x00,0x00,0x00};
  30          
  31          unsigned char code  ditab[16] =    {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
  32                        /*小数位的值*/        0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  33          
  34          unsigned char code RomCode[2][8] = {0x28,0xd6,0x31,0x8a,0x00,0x00,0x00,0xe3,
  35                                              0x28,0x0e,0x4e,0xb3,0x00,0x00,0x00,0x5f};
  36          
  37          void beep(); 
  38          sbit DIN = P0^7; //小数点
  39          bit  flash=0;    //显示开关标记
  40          
  41          /*********************************************************/
  42          //延时函数
  43          /*********************************************************/
  44          void Delay(unsigned int num)//延时函数
  45          {
  46   1        while( --num );
  47   1      }
  48          
  49          /*********************************************************/
  50          //初始化函数
  51          /*********************************************************/
  52           Init_DS18B20(void)
  53          {
  54   1        
C51 COMPILER V8.02   DS18B20_SHUMA_C51                                                     08/21/2006 15:47:52 PAGE 2   

  55   1           DQ = 1;      //DQ复位
  56   1           Delay(8);    //稍做延时
  57   1      
  58   1           DQ = 0;      //单片机将DQ拉低
  59   1           Delay(90);   //精确延时 大于 480us
  60   1      
  61   1           DQ = 1;       //拉高总线
  62   1           Delay(8);
  63   1      
  64   1           presence = DQ;    //如果=0则初始化成功 =1则初始化失败
  65   1           Delay(100);
  66   1           DQ = 1; 
  67   1           
  68   1           return(presence); //返回信号,0=presence,1= no presence
  69   1      }
  70          /*********************************************************/
  71          //读一个字节函数
  72          /*********************************************************/
  73          ReadOneChar(void)
  74          {
  75   1      unsigned char i = 0;
  76   1      unsigned char dat = 0;
  77   1      
  78   1      for (i = 8; i > 0; i--)
  79   1        {
  80   2          DQ = 0;         
  81   2          dat >>= 1;
  82   2          DQ = 1;         
  83   2      
  84   2          if(DQ)
  85   2           dat |= 0x80;
  86   2          Delay(4);
  87   2        }
  88   1      
  89   1          return (dat);
  90   1      }
  91          
  92          /**********************************************************/
  93          //写一个字节函数
  94          /*********************************************************/
  95          WriteOneChar(unsigned char dat)
  96          {
  97   1        unsigned char i = 0;
  98   1        for (i = 8; i > 0; i--)
  99   1        {
 100   2          DQ = 0;
 101   2          DQ = dat&0x01;
 102   2          Delay(5);
 103   2      
 104   2          DQ = 1;
 105   2          dat>>=1;
 106   2        }
 107   1      }
 108          
 109          /*********************************************************/
 110          //读取温度函数
 111          /*********************************************************/
 112          Read_Temperature(unsigned char x)
 113          {
 114   1        unsigned char i;
 115   1        Init_DS18B20();
 116   1        if(presence==1)        
C51 COMPILER V8.02   DS18B20_SHUMA_C51                                                     08/21/2006 15:47:52 PAGE 3   

 117   1         { beep();flash=1;}      //DS18B20不正常,蜂鸣器报警
 118   1         else 
 119   1         {
 120   2           flash=0;
 121   2           WriteOneChar(0xCC);  // 跳过读序号列号的操作
 122   2           WriteOneChar(0x44);  // 启动温度转换
 123   2      
 124   2           Init_DS18B20();
 125   2      //       WriteOneChar(0xCC);  //跳过读序号列号的操作
 126   2      
 127   2           WriteOneChar(0x55);  //匹配ROM命令
 128   2           for(i=0;i<8;i++)
 129   2           {
 130   3             WriteOneChar(RomCode[x][i]);
 131   3           }  
 132   2           WriteOneChar(0xBE);  //读取温度寄存器
 133   2      
 134   2           temp_data[0] = ReadOneChar();   //温度低8位
 135   2           temp_data[1] = ReadOneChar();   //温度高8位 
 136   2         }
 137   1      }
 138          
 139          /*********************************************************/
 140          //温度值显示函数
 141          /*********************************************************/
 142          Disp_Temperature()
 143          {
 144   1        unsigned char  n=0;
 145   1      
 146   1        display[4]=temp_data[0]&0x0f;
 147   1        display[0]=ditab[display[4]];     //查表得小数位的值
 148   1        
 149   1        display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 150   1        display[3]=display[4]/100;
 151   1        display[1]=display[4]%100;
 152   1        display[2]=display[1]/10;
 153   1        display[1]=display[1]%10;
 154   1      
 155   1        if(!display[3])        //高位为0,不显示
 156   1        { 
 157   2          display[3]=0x0a;              
 158   2          if(!display[2])      //次高位为0,不显示
 159   2           display[2]=0x0a;
 160   2        }
 161   1      
 162   1      P0 = 0xc6;    //显示 C
 163   1      P2 = 0x7f;
 164   1      Delay(250);
 165   1      
 166   1      P0 = 0x9c;    //显示 °  
 167   1      P2 = 0xbf;
 168   1      Delay(250);
 169   1      
 170   1      P0 =LEDData[display[0]] ;  //显示小数位
 171   1      P2 = 0xdf;
 172   1      Delay(250);
 173   1      
 174   1      P0 =LEDData[display[1]];  //显示个位
 175   1      DIN = 0;
 176   1      P2 = 0xef;
 177   1      Delay(250);
 178   1      
C51 COMPILER V8.02   DS18B20_SHUMA_C51                                                     08/21/2006 15:47:52 PAGE 4   

 179   1      P0 =LEDData[display[2]];  //显示十位
 180   1      P2 = 0xf7;
 181   1      Delay(250);
 182   1      
 183   1      P0 =LEDData[display[3]];  //显示百位
 184   1      P2 = 0xfb;
 185   1      Delay(250);
 186   1      
 187   1      P0 =LEDData[0x0b];        //显示 "-"
 188   1      P2 = 0xfd; 
 189   1      Delay(250);
 190   1      
 191   1      P0 =LEDData[ch+1];        //显示通道号
 192   1      P2 = 0xfe; 
 193   1      Delay(250);
 194   1      
 195   1      P2 = 0xff; 
 196   1      }
 197          
 198          /*********************************************************/
 199          //驱动蜂鸣器函数
 200          /*********************************************************/
 201          void beep()
 202            {
 203   1          unsigned char i;
 204   1          for (i=0;i<100;i++)
 205   1          {
 206   2            Delay(60);
 207   2            BEEP=!BEEP;                //BEEP取反
 208   2          } 
 209   1          BEEP=1;                      //关闭蜂鸣器
 210   1        }
 211          
 212          /*********************************************************/
 213          //主函数
 214          /*********************************************************/
 215          void main(void)
 216          {
 217   1        unsigned int  time;
 218   1        while(1)
 219   1        {
 220   2          ch = 0;                      //第一个DS18B20
 221   2              for(time=0;time<200;time++)
 222   2              {
 223   3            Read_Temperature(ch);          //读温度值          
 224   3            if(flash==1)
 225   3                 {P2 = 0xff;}              //DS18B20不正常,关闭显示
 226   3                else  Disp_Temperature();  //显示温度
 227   3          }
 228   2          
 229   2              ch = 1;                      //第二个DS18B20
 230   2          for(time=0;time<200;time++)
 231   2              {     
 232   3            Read_Temperature(ch);      //读温度值
 233   3                if(flash==1)             
 234   3                 {P2 = 0xff ;}             //DS18B20不正常,关闭显示 
 235   3                else  Disp_Temperature();  //显示温度
 236   3          }
 237   2        }
 238   1      }
 239          
 240          /*********************************************************/
C51 COMPILER V8.02   DS18B20_SHUMA_C51                                                     08/21/2006 15:47:52 PAGE 5   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    488    ----
   CONSTANT SIZE    =     44    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       4
   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 + -