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

📄 ds18b20.lst

📁 我做的畢業設計,用AT89S51 控制LCD1602作為顯示. DS1302時鐘芯片顯示時間,DS18B20測量溫度,還有4X4的鍵盤驅動.實現了一個計算功能.可以用PROTUES 仿真軟件仿真,當時
💻 LST
字号:
C51 COMPILER V7.50   DS18B20                                                               04/09/2007 18:39:44 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS18B20
OBJECT MODULE PLACED IN DS18B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS18B20.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /**************************************************************************
   2            
   3                           
   4            
   5             File Name:       DS18b20.h
   6             Author:          liao xu ming
   7             Created:         2007/03/23
   8             Modified:            2007/04/09
   9             Revision:            1.0
  10            
  11          ***************************************************************************/
  12          
  13          
  14          #include"ds18b20.h"
  15          sbit DQ=P2^1;
  16          sbit x=P3^6;
  17          bit Calculator_To_DS18B20;
  18          void delay(unsigned char  i)
  19          {
  20   1           while(i--);
  21   1          
  22   1      }
  23          
  24          void Init_DS18B20(void)       //初始化函数
  25          {
  26   1      
  27   1       DQ = 1;                       //DQ复位
  28   1       //delay(8);                   //稍做延时
  29   1       _nop_();
  30   1       DQ = 0;                       //单片机将DQ拉低
  31   1       delay(86);                    //精确延时 大于 480us
  32   1       _nop_();
  33   1       DQ = 1;                       //拉高总线
  34   1       delay(14);
  35   1       _nop_();
  36   1       _nop_();
  37   1       _nop_();
  38   1       x=DQ;                         //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  39   1       delay(20);
  40   1       _nop_();
  41   1       _nop_();
  42   1       DQ = 1;
  43   1      }
  44          
  45          unsigned char ReadOneChar(void) //读一个字节
  46          {
  47   1      unsigned char i=0;
  48   1      unsigned char dat = 0;
  49   1      for (i=8;i>0;i--)
  50   1      {
  51   2        DQ = 0;     // 给脉冲信号
  52   2        dat>>=1;
  53   2        DQ = 1;     // 给脉冲信号
  54   2        if(DQ==1)
  55   2         dat|=0x80;
C51 COMPILER V7.50   DS18B20                                                               04/09/2007 18:39:44 PAGE 2   

  56   2        delay(4);
  57   2        _nop_();
  58   2      }
  59   1      return(dat);
  60   1      }
  61          
  62          void WriteOneChar(unsigned char dat)  //写一个字节
  63          {
  64   1      unsigned char i=0;
  65   1      for (i=8; i>0; i--)
  66   1      {
  67   2        DQ = 0;
  68   2        _nop_();
  69   2        DQ = dat&0x01;
  70   2        _nop_();
  71   2        _nop_();
  72   2        delay(5);
  73   2        DQ = 1;
  74   2        dat>>=1;
  75   2      }
  76   1      delay(4);
  77   1      }
  78          
  79          unsigned int  ReadTemperature(void)   //读取温度
  80          {
  81   1      unsigned char a=0;
  82   1      unsigned char b=0;
  83   1      unsigned int  t=0;
  84   1      Init_DS18B20();
  85   1      WriteOneChar(0xCC);  // 跳过读序号列号的操作
  86   1      WriteOneChar(0x44);  // 启动温度转换
  87   1      
  88   1      
  89   1      
  90   1      Init_DS18B20();
  91   1      WriteOneChar(0xCC);  //跳过读序号列号的操作
  92   1      WriteOneChar(0xBE);  //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
  93   1      a=ReadOneChar();     //读取温度值低位
  94   1      b=ReadOneChar();     //读取温度值高位
  95   1      //a=a>>4;            //低位右移4位,舍弃小数部分
  96   1      t=b<<8;              //高位左移4位,舍弃符号位
  97   1      t=t|a;             
  98   1      return(t);
  99   1      }
 100          
 101          
 102          void DS18B20(void)
 103          {unsigned char T_L;            
 104   1       unsigned int  T,T_H,T_L_int;
 105   1       float T_L_float;                      
 106   1       if(Calculator_To_DS18B20==1)   //功能切换,从计算器切换到温度计时要处理的一些事情                    
 107   1        { LCD_send_command(LCD_DISPLAY_ON|LCD_CURSOR_OFF);//不显示光标
 108   2          Calculator_To_DS18B20=0;
 109   2              State_Switch_Flag=1;        
 110   2          EA=0;                       //关中断
 111   2          LCD_send_command(LCD_CLEAR_SCREEN);  //清屏
 112   2          State_Switch_Flag=1;
 113   2          GotoXY(0,0);               
 114   2          Print(" Temperature : ");
 115   2          GotoXY(13,1);
 116   2          LCD_send_data(0XDF);       //显示温度的符号
 117   2          LCD_send_data('C');        //显示字符 C
C51 COMPILER V7.50   DS18B20                                                               04/09/2007 18:39:44 PAGE 3   

 118   2               GotoXY(8,1);
 119   2              LCD_send_data('.');        //
 120   2      
 121   2        }
 122   1      
 123   1       T=ReadTemperature();          //启动温度转换,而且读取温度
 124   1       if(T<=0X07D0)                 //如果温度是正的!!大于0!!
 125   1         {
 126   2          GotoXY(4,1);  
 127   2              LCD_send_data('+');        //显示正温度
 128   2          T_H=T>>4;                  
 129   2              T_L=(unsigned char )T&0X000F;
 130   2              if(T_H>=100)
 131   2               {
 132   3            GotoXY(5,1);
 133   3                LCD_send_data(T_H/100+0X30);
 134   3               }
 135   2          if(T_H>=10)
 136   2               {
 137   3                GotoXY(6,1);
 138   3                LCD_send_data((T_H%100)/10+0X30);
 139   3               }
 140   2           GotoXY(7,1);
 141   2               LCD_send_data((T_H%100)%10+0X30);
 142   2           T_L_float=0.0625*T_L;
 143   2               T_L_int=T_L_float*10000;
 144   2           GotoXY(9,1);
 145   2           LCD_send_data((T_L_int/1000)+0X30);
 146   2               GotoXY(10,1);
 147   2           LCD_send_data((T_L_int%1000)/100+0X30);
 148   2               GotoXY(11,1);
 149   2           LCD_send_data(((T_L_int%1000)%100)/10+0X30);
 150   2               GotoXY(12,1);
 151   2           LCD_send_data(((T_L_int%1000)%100)%10+0X30);
 152   2           
 153   2          
 154   2         }
 155   1       else
 156   1         {
 157   2          GotoXY(4,1);
 158   2              LCD_send_data('-');
 159   2      
 160   2         }
 161   1      }


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