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

📄 18b20.lst

📁 基于c51单片机的18b20实时温度检测
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.12   18B20                                                                 07/31/2008 15:43:44 PAGE 1   


C51 COMPILER V8.12, COMPILATION OF MODULE 18B20
OBJECT MODULE PLACED IN 18b20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 18b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           #include<regx51.h>
   2          #include<intrins.h>
   3          #define uchar unsigned char
   4          #define uint unsigned int
   5          sbit  rs=P2^1   ;
   6          sbit  rw= P2^2  ;
   7          sbit  e=P2^3 ;
   8          sbit   DO=P1^0;
   9          
  10          uchar temp_l = 0;  //温度值存储低位字节
  11          uchar temp_h = 0;  //温度值存储高位字节
  12          
  13          uchar tempsign = 0;  //温度值符号位
  14          uchar temp_integer[4]; //温度整数存储数组
  15          uchar temp_dicimal[5]; //温度小数存储数组
  16          
  17          void delay(uint ms)
  18          {
  19   1       uint i;
  20   1       uchar j;
  21   1       for(i=0;i<ms;i++)
  22   1         for(j=0;j<250;j++)
  23   1         {
  24   2          _nop_();
  25   2              _nop_();
  26   2              _nop_();
  27   2          _nop_();
  28   2         }
  29   1      
  30   1      
  31   1      
  32   1      }
  33          void  write_com(uchar com)
  34          {
  35   1               rs=0;
  36   1               P3=com;
  37   1               delay(1);
  38   1               e=1;
  39   1               delay(1);
  40   1               e=0;
  41   1      
  42   1      }
  43          
  44          void  write_data(uchar date)
  45          {
  46   1               rs=1;
  47   1               P3=date;
  48   1               delay(1);
  49   1               e=1;
  50   1               delay(1);
  51   1               e=0;
  52   1      
  53   1      }
  54          void gotoxy(uchar x,uchar y)    //光标指针移动到x行y列
  55          {
C51 COMPILER V8.12   18B20                                                                 07/31/2008 15:43:44 PAGE 2   

  56   1              if(x==0)
  57   1              {
  58   2                      write_com(0x80+y);
  59   2          }
  60   1              else
  61   1              {
  62   2                      write_com(0x80+0x40+y);
  63   2              }
  64   1      }       
  65          /* ##########################################################################
  66          初始化:设置显示模式       ----  0x38  --设置16x2 显示,5x7点阵,8位数据接口
  67                  显示开/关及光标设置 --   0x08  --关显示
  68                                              --   0x0b  --开显示
  69                                                                           0x0e  --显示光标,不闪烁
  70                                                                           0x0c  --不显示光标,不闪烁
  71                                                                           0x0d  --光标闪烁,不显示
  72                                                                           0x0f  --光标显示+闪烁
  73                                                            ------ 0x06  --读或写一个字符后地址指针加一,且光标加一,整屏不移动
  74                                                            ------ 0x01  --显示清屏:数据指针清零,所有显示清零
  75                                                               0x02  --显示回车:数据指针清零    
  76           ######################################################################### */ 
  77          void init()
  78          {
  79   1                rw=0;    //开写状态
  80   1               // write_com(0x01);
  81   1                write_com(0x38);
  82   1                write_com(0x0f);
  83   1                write_com(0x06);
  84   1                write_com(0x0c);      
  85   1      }
  86          void print(uchar *p) //显示字符串        //void display_string(uchar *str,uchar len)
  87          {                                                                       //      {
  88   1          while(*p)                                           //              uchar i;
  89   1              {                                                               //              for(i=0;i<len;i++)
  90   2                      write_data(*p);                         //               {
  91   2                      p++;                                            //                 write_data(str【i】);
  92   2              }                                                               //                }
  93   1      }                                                                       //
  94          void display_number(uchar number)       //       }
  95          {
  96   1              write_data(0x30+number);  //转化为ASCII码
  97   1      } 
  98          
  99          /*us级延时,延时时间约4+2*i*/
 100          void Delayus(uchar i)
 101           {
 102   1        while(--i);
 103   1       }
 104          
 105          /*产生复位脉冲,等待应答信号*/
 106          bit Resetpaulse()
 107          {
 108   1      
 109   1       DO = 0; //拉低约600us
 110   1       Delayus(150);
 111   1       Delayus(150);
 112   1      
 113   1       DO = 1;//产生上升沿,延时约15~60us
 114   1       Delayus(30);
 115   1      
 116   1       return(~DO); //等待应答信号
 117   1      
C51 COMPILER V8.12   18B20                                                                 07/31/2008 15:43:44 PAGE 3   

 118   1      } 
 119          
 120          /*读取数据一位*/
 121          bit Readbit()
 122          {
 123   1       uint i = 0;
 124   1       bit b = 0;
 125   1      
 126   1       DO = 0; //产生读时隙  
 127   1       i++;    //维持低电平至少1us
 128   1      
 129   1       DO = 1; //1us以上后拉高
 130   1       Delayus(2); //延时8us,DO下降沿15内ds18b20输出的数据才有效
 131   1      
 132   1      
 133   1       b = DO; //读取数据
 134   1       Delayus(40);    //每个读时隙至少持续60us
 135   1      
 136   1       return(b);
 137   1      } 
 138          
 139          /*读取一个字节*/
 140          uchar Readbyte()
 141          {
 142   1       uchar byte_read = 0;
 143   1       uchar i, j;
 144   1      
 145   1       for(i=0; i<8; i++)
 146   1        {
 147   2         j = Readbit();
 148   2         byte_read = (j<<i) | byte_read; //低位读起
 149   2        }
 150   1      
 151   1       return(byte_read);
 152   1      } 
 153          
 154          /*写一个字节*/
 155          void Writebyte(uchar byte_to_write)
 156          {
 157   1       uchar i = 0;
 158   1       uchar j = 0;
 159   1       bit write_bit = 0;
 160   1      
 161   1       for(j=0; j<8; j++)
 162   1        {
 163   2         write_bit =  (byte_to_write & 0x01);
 164   2          if(write_bit == 1) //写1
 165   2               {
 166   3                DO = 0;  //产生写时隙
 167   3                Delayus(3);      //延时15us
 168   3                
 169   3                DO = 1;  //写1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -