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

📄 zlg7289demo2.lst

📁 使用89c51单片机实现单总线多个DS18B20测温
💻 LST
字号:
C51 COMPILER V7.07   ZLG7289DEMO2                                                          11/24/2007 15:09:08 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE ZLG7289DEMO2
OBJECT MODULE PLACED IN ZLG7289Demo2.OBJ
COMPILER INVOKED BY: E:\keil\C51\Bin\c51.exe ZLG7289Demo2.c DB OE

stmt level    source

   1           
   2          #include "ZLG7289.h" 
   3           
   4          
   5          volatile unsigned char Key = 0xFF; 
   6          
   7          sbit DQ = P1^3;  //定义DS18B20端口DQ  
   8          sbit BEEP=P1^7 ;
   9          
  10          unsigned char presence ;
  11          unsigned char data  temp_data[2] = {0x00,0x00};
  12          unsigned char data  display[5] =   {0x00,0x00,0x00,0x00,0x00};
  13          unsigned char code  ditab[16] =    {0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,
  14                                              0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
  15          void beep(); 
  16          sbit DIN = P0^7; //小数点
  17          bit  flash=0;    //显示开关标记
  18          
  19          void INT0_SVC() interrupt 0 
  20          { 
  21   1        Key = ZLG7289_Key(); 
  22   1      } 
  23           
  24           
  25          /* 
  26          函数:Delay() 
  27          功能:延时0.01 655.36s 
  28          参数: 
  29           t>0时,延时(t*0.01)s 
  30           t=0时,延时655.36s 
  31          说明: 
  32            晶振采用11.0592MHz 
  33          */ 
  34          void Delay(unsigned int t) 
  35          { 
  36   1        do 
  37   1       { 
  38   2        TH0 = 0xDC; 
  39   2        TL0 = 0x00; 
  40   2        TR0 = 1; 
  41   2         while ( !TF0 ); 
  42   2        TF0 = 0; 
  43   2        TR0 = 0; 
  44   2       } while (--t); 
  45   1      } 
  46           
  47           /**********************************************************/
  48          void Delayb20(unsigned int num)//延时函数
  49          {
  50   1        while( --num );
  51   1      }
  52          
  53          /**********************************************************/
  54           Init_DS18B20(void)//初始化ds1820
  55          {
C51 COMPILER V7.07   ZLG7289DEMO2                                                          11/24/2007 15:09:08 PAGE 2   

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

 118   2           WriteOneChar(0xCC);  // 跳过读序号列号的操作
 119   2           WriteOneChar(0x44);  // 启动温度转换
 120   2      
 121   2           Init_DS18B20();
 122   2           WriteOneChar(0xCC);  //跳过读序号列号的操作
 123   2           WriteOneChar(0xBE);  //读取温度寄存器
 124   2      
 125   2           temp_data[0] = ReadOneChar();   //温度低8位
 126   2           temp_data[1] = ReadOneChar();   //温度高8位 
 127   2         }
 128   1      }
 129          /*********************************************************/
 130          void beep()
 131            {
 132   1          unsigned char i;
 133   1          for (i=0;i<100;i++)
 134   1          {
 135   2            Delayb20(60);
 136   2            BEEP=!BEEP;                //BEEP取反
 137   2          } 
 138   1          BEEP=1;                      //关闭蜂鸣器
 139   1        }
 140          Disp_Temperature()//显示温度
 141          {
 142   1        unsigned char  n=0;
 143   1      
 144   1        display[4]=temp_data[0]&0x0f;
 145   1        display[0]=ditab[display[4]];     //查表得小数位的值
 146   1        
 147   1        display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);
 148   1        display[3]=display[4]/100;
 149   1        display[1]=display[4]%100;
 150   1        display[2]=display[1]/10;
 151   1        display[1]=display[1]%10;
 152   1      
 153   1        ZLG7289_Download(1,4,0,display[0]); 
 154   1        ZLG7289_Download(1,5,1,display[1]); 
 155   1        ZLG7289_Download(1,6,0,display[2]); 
 156   1        ZLG7289_Download(1,7,0,display[3]); 
 157   1        //ZLG7289_Hide(8);  
 158   1      }
 159          
 160          void main() 
 161          { 
 162   1      
 163   1      
 164   1        TMOD = 0x01; 
 165   1       Delay(30);    //延时300ms,等待ZLG7289复位完毕 
 166   1       ZLG7289_Init(4);  //调用ZLG7289的初始化函数 
 167   1       Delay(100); 
 168   1      //测试 
 169   1       ZLG7289_Test(); 
 170   1       Delay(200); 
 171   1      //复位 
 172   1       ZLG7289_Reset(); 
 173   1       Delay(100); 
 174   1       while(1)
 175   1      {
 176   2       
 177   2         Read_Temperature();
 178   2              if(flash==0)             
 179   2              {Disp_Temperature();}
C51 COMPILER V7.07   ZLG7289DEMO2                                                          11/24/2007 15:09:08 PAGE 4   

 180   2         Delay(100); 
 181   2      } 
 182   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    433    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      9       1
   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 + -