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

📄 温度采集ds18b20lcd.lst

📁 一些51单片机基础模块的程序
💻 LST
字号:
C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 温度采集DS18B20LCD
OBJECT MODULE PLACED IN 温度采集DS18B20LCD.OBJ
COMPILER INVOKED BY: E:\Program Files\Keil\C51\BIN\C51.EXE 温度采集DS18B20LCD.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /********************************************************************
   2          * 文件名  : 温度采集DS18B20.c
   3          * 描述    :  该文件实现了用温度传感器件DS18B20对温度的采集,并在液晶1602
   4                                   上显示出来。
   5          * 创建人  : 东流,2009年4月10日
   6          * 版本号  : 2.0
   7          * 技术支持论坛:www.zidh.com/bbs(请进入“赞助商板块”中的“东流电子工作室”)
   8          * 感谢“中国自动化资讯网”对本工作室的大力支持。
   9          ***********************************************************************/
  10          #include<reg52.h>
  11          #define uchar unsigned char
  12          #define uint  unsigned int
  13          
  14          #define jump_ROM 0xCC
  15          #define start 0x44
  16          #define read_EEROM 0xBE
  17          
  18          sbit DQ = P3^4;            //DS18B20数据口
  19          
  20          unsigned char TMPH,TMPL; 
  21          
  22          //这三个引脚参考资料
  23          sbit E=P2^7;            //1602使能引脚
  24          sbit RW=P2^6;           //1602读写引脚  
  25          sbit RS=P2^5;           //1602数据/命令选择引脚
  26          
  27          /********************************************************************
  28          * 名称 : delay()
  29          * 功能 : 延时,延时时间大概为140US。
  30          * 输入 : 无
  31          * 输出 : 无
  32          ***********************************************************************/
  33          
  34          void delay_1()
  35          {
  36   1              int i,j;
  37   1              for(i=0; i<=10; i++)
  38   1              for(j=0; j<=2; j++)
  39   1      ;
  40   1      }
  41          
  42          /********************************************************************
  43          * 名称 : Convert(uchar In_Date)
  44          * 功能 : 因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
  45          * 输入 : 1602资料上的值
  46          * 输出 : 送到1602的值
  47          ***********************************************************************/
  48          uchar Convert(uchar In_Date)
  49          {
  50   1          uchar i, Out_Date = 0, temp = 0;
  51   1          for(i=0; i<8; i++)
  52   1          {
  53   2              temp = (In_Date >> i) & 0x01;
  54   2              Out_Date |= (temp << (7 - i));
  55   2          }
C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 2   

  56   1          return Out_Date;
  57   1      }
  58          /********************************************************************
  59          * 名称 : enable(uchar del)
  60          * 功能 : 1602命令函数
  61          * 输入 : 输入的命令值
  62          * 输出 : 无
  63          ***********************************************************************/
  64          
  65          void enable(uchar del)
  66          {
  67   1              P0 = Convert(del);
  68   1              RS = 0;
  69   1              RW = 0;
  70   1              E = 0;
  71   1              delay_1();
  72   1              E = 1;
  73   1              delay_1();
  74   1      }
  75          
  76          /********************************************************************
  77          * 名称 : write(uchar del)
  78          * 功能 : 1602写数据函数
  79          * 输入 : 需要写入1602的数据
  80          * 输出 : 无
  81          ***********************************************************************/
  82          
  83          void write(uchar del)
  84          {
  85   1              P0 = Convert(del);
  86   1              RS = 1;
  87   1              RW = 0;
  88   1              E = 0;
  89   1              delay_1();
  90   1              E = 1;
  91   1              delay_1();
  92   1      }
  93          
  94          /********************************************************************
  95          * 名称 : L1602_init()
  96          * 功能 : 1602初始化,请参考1602的资料
  97          * 输入 : 无
  98          * 输出 : 无
  99          ***********************************************************************/
 100          void L1602_init(void)
 101          {
 102   1              enable(0x01);
 103   1              enable(0x38);
 104   1              enable(0x0c);
 105   1              enable(0x06);
 106   1              enable(0xd0);
 107   1      }
 108          
 109          /********************************************************************
 110          * 名称 : L1602_char(uchar hang,uchar lie,char sign)
 111          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符显示"b" ,调用该函数如下
 112                           L1602_char(1,5,'b')
 113          * 输入 : 行,列,需要输入1602的数据
 114          * 输出 : 无
 115          ***********************************************************************/
 116          void L1602_char(uchar hang,uchar lie,char sign)
 117          {
C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 3   

 118   1              uchar a;
 119   1              if(hang == 1) a = 0x80;
 120   1              if(hang == 2) a = 0xc0;
 121   1              a = a + lie - 1;
 122   1              enable(a);
 123   1              write(sign);
 124   1      }
 125          
 126          /********************************************************************
 127          * 名称 : L1602_string(uchar hang,uchar lie,uchar *p)
 128          * 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下
 129                           L1602_string(1,5,"ab cd ef;")
 130          * 输入 : 行,列,需要输入1602的数据
 131          * 输出 : 无
 132          ***********************************************************************/
 133          void L1602_string(uchar hang,uchar lie,uchar *p)
 134          {
 135   1              uchar a;
 136   1              if(hang == 1) a = 0x80;
 137   1              if(hang == 2) a = 0xc0;
 138   1              a = a + lie - 1;
 139   1              enable(a);
 140   1              while(1)
 141   1              {
 142   2                      if(*p == '\0') break;
 143   2                      write(*p);
 144   2                      p++;
 145   2              }
 146   1      }
 147          
 148          /********************************************************************
 149          * 名称 : delay()
 150          * 功能 : 延时函数
 151          * 输入 : 无
 152          * 输出 : 无
 153          ***********************************************************************/
 154          void delay(uint N)
 155          {
 156   1              int i;
 157   1              for(i=0; i<N; i++)
 158   1              ;
 159   1      }
 160          
 161          /********************************************************************
 162          * 名称 : Reset()
 163          * 功能 : 复位DS18B20
 164          * 输入 : 无
 165          * 输出 : 无
 166          ***********************************************************************/
 167          uchar Reset(void)
 168          {
 169   1              uchar deceive_ready;
 170   1              DQ = 0;
 171   1              delay(29);
 172   1              DQ = 1;
 173   1              delay(3);
 174   1              deceive_ready = DQ;
 175   1              delay(25);
 176   1              return(deceive_ready);
 177   1      }
 178          
 179          /********************************************************************
C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 4   

 180          * 名称 : read_bit()
 181          * 功能 : 从DS18B20读一个位值
 182          * 输入 : 无
 183          * 输出 : 从DS18B20读出的一个位值
 184          ***********************************************************************/
 185          uchar read_bit(void)
 186          {
 187   1              uchar i;
 188   1              DQ = 0;
 189   1              DQ = 1;
 190   1              for(i=0; i<3; i++);
 191   1              return(DQ);
 192   1      }
 193          
 194          /********************************************************************
 195          * 名称 : write_bit()
 196          * 功能 : 向DS18B20写一位
 197          * 输入 : bitval(要对DS18B20写入的位值)
 198          * 输出 : 无
 199          ***********************************************************************/
 200          void write_bit(uchar bitval)
 201          {
 202   1      DQ=0;if(bitval==1)
 203   1      DQ=1;
 204   1      delay(5);
 205   1      DQ=1;
 206   1      }
 207          
 208          /********************************************************************
 209          * 名称 : read_byte()
 210          * 功能 : 从DS18B20读一个字节
 211          * 输入 : 无
 212          * 输出 : 从DS18B20读到的值
 213          ***********************************************************************/
 214          uchar read_byte(void)
 215          {
 216   1              uchar i,m,receive_data;
 217   1              m = 1;
 218   1              receive_data = 0;
 219   1              for(i=0; i<8; i++)
 220   1              {
 221   2                      if(read_bit())
 222   2                      {
 223   3                              receive_data = receive_data + (m << i);
 224   3                      }
 225   2                      delay(6);
 226   2              }
 227   1              return(receive_data);
 228   1      }
 229          
 230          /********************************************************************
 231          * 名称 : write_byte()
 232          * 功能 : 向DS18B20写一个字节
 233          * 输入 : val(要对DS18B20写入的命令值)
 234          * 输出 : 无
 235          ***********************************************************************/
 236          void write_byte(uchar val)
 237          {
 238   1              uchar i,temp;
 239   1              for(i=0; i<8; i++)
 240   1              {
 241   2                      temp = val >> i;
C51 COMPILER V7.50   温度采集DS18B20LCD                                                    04/10/2009 19:54:21 PAGE 5   

 242   2                      temp = temp & 0x01;
 243   2                      write_bit(temp);
 244   2                      delay(5);
 245   2              }
 246   1      }
 247          
 248          
 249          /********************************************************************
 250          * 名称 : Main()
 251          * 功能 : 主函数
 252          * 输入 : 无
 253          * 输出 : 无
 254          ***********************************************************************/
 255          void main()
 256          {
 257   1              float tt;
 258   1              uint temp;
 259   1              P2 = 0x00;
 260   1              L1602_init();
 261   1              L1602_string(1,1,"  DS18B20 TEST  ");
 262   1              L1602_string(2,1,"Temperature:00`C");
 263   1              while(1)
 264   1              {
 265   2                      Reset();
 266   2                      write_byte(jump_ROM);
 267   2                      write_byte(start);
 268   2                      Reset();
 269   2                      write_byte(jump_ROM);
 270   2                      write_byte(read_EEROM);
 271   2                      TMPL = read_byte();
 272   2                      TMPH = read_byte();
 273   2                      temp = TMPH;
 274   2                      temp <<= 8;       
 275   2                      temp = temp | TMPL;
 276   2                      tt = TMPL * 0.0625;
 277   2                      temp = TMPL / 16 + TMPH * 16;
 278   2                      L1602_char(2,13,temp/10%10 + 48);
 279   2                      L1602_char(2,14,temp%10 + 48);  
 280   2              }
 281   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    551    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      10
   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 + -