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

📄 tempture2.lst

📁 温度传感器18B20的典型应用
💻 LST
字号:
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEMPTURE2
OBJECT MODULE PLACED IN tempture2.OBJ
COMPILER INVOKED BY: D:\安装程序\UV3\C51\BIN\C51.EXE tempture2.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          
   4          typedef unsigned char BYTE;
   5          typedef unsigned int WORD;
   6          typedef bit BOOL ; 
   7          
   8          sbit rs = P2^0;         //
   9          sbit rw = P2^1;
  10          sbit ep = P2^2;
  11          
  12          BYTE code dis1[] = {"temp"};
  13          unsigned int dis2[7]={0};
  14          sbit TMDAT=P3^3;
  15          WORD sdata=0;
  16          WORD xiaoshu1;
  17          WORD xiaoshu2;
  18          WORD xiaoshu;
  19          bit flag=1;                                        //温度正负标志
  20          BYTE seg7code[]={0,1,2,3,4,5,6,7,8,9};           
  21          
  22          
  23          delay(BYTE ms)
  24          {                                                       // 延时子程序
  25   1              BYTE i;
  26   1              while(ms--)
  27   1              {
  28   2                      for(i = 0; i< 250; i++)
  29   2                      {
  30   3                              _nop_();
  31   3                              _nop_();
  32   3                              _nop_();
  33   3                              _nop_();
  34   3                      }
  35   2              }
  36   1      }
  37          
  38          BOOL lcd_bz()
  39          {                                                       // 测试LCD忙碌状态
  40   1              BOOL result;
  41   1              rs = 0;
  42   1              rw = 1;
  43   1              ep = 1;
  44   1              _nop_();
  45   1              _nop_();
  46   1              _nop_();
  47   1              _nop_();
  48   1              result = (BOOL)(P0 & 0x80);
  49   1              ep = 0;
  50   1              return result;  
  51   1      }
  52          
  53          lcd_wcmd(BYTE cmd)
  54          {                                                       // 写入指令数据到LCD
  55   1              while(lcd_bz());
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 2   

  56   1              rs = 0;
  57   1              rw = 0;
  58   1              ep = 0;
  59   1              _nop_();
  60   1              _nop_();        
  61   1              P0 = cmd;
  62   1              _nop_();
  63   1              _nop_();
  64   1              _nop_();
  65   1              _nop_();
  66   1              ep = 1;
  67   1              _nop_();
  68   1              _nop_();
  69   1              _nop_();
  70   1              _nop_();
  71   1              ep = 0;         
  72   1      }
  73          
  74          lcd_pos(BYTE pos)
  75          {                                                       //设定显示位置
  76   1              lcd_wcmd(pos | 0x80);
  77   1      }
  78          
  79          lcd_wdat(BYTE dat)      
  80          {                                                       //写入字符显示数据到LCD
  81   1              while(lcd_bz());
  82   1              rs = 1;
  83   1              rw = 0;
  84   1              ep = 0;
  85   1              P0 = dat;
  86   1              _nop_();
  87   1              _nop_();
  88   1              _nop_();
  89   1              _nop_();
  90   1              ep = 1;
  91   1              _nop_();
  92   1              _nop_();
  93   1              _nop_();
  94   1              _nop_();
  95   1              ep = 0; 
  96   1      }
  97          
  98          lcd_init()
  99          {                                                       //LCD初始化设定
 100   1              lcd_wcmd(0x38);                 //
 101   1              delay(1);
 102   1              lcd_wcmd(0x0c);                 //
 103   1              delay(1);
 104   1              lcd_wcmd(0x06);                 //
 105   1              delay(1);
 106   1              lcd_wcmd(0x01);                 //清除LCD的显示内容
 107   1              delay(1);
 108   1      }
 109          
 110          /************************************************************
 111          程序名称:复位函数
 112          函数说明:向DS18B20发送484us复位信号
 113          功能:
 114          *************************************************************/
 115          void dmsec(WORD count)
 116          {
 117   1              int i;
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 3   

 118   1              while(count--)
 119   1              {
 120   2                      for(i=0;i<115;i++)
 121   2                      ;
 122   2              }
 123   1      }
 124          
 125          /************************************************************
 126          程序名称:复位函数
 127          函数说明:向DS18B20发送484us复位信号
 128          功能:
 129          *************************************************************/
 130          void tmreast(void)
 131          {
 132   1              int i;                    
 133   1              TMDAT=0;
 134   1              for(i=0;i<103;i++);
 135   1              TMDAT=1;
 136   1              for(i=0;i<4;i++);
 137   1      }
 138          
 139          /************************************************************
 140          程序名称:读位函数
 141          函数说明:读取DS18B20一位信号
 142          功能:
 143          *************************************************************/
 144          bit tmrbit(void)
 145          {
 146   1              int i;
 147   1              bit dat;
 148   1              TMDAT=0;                  //给脉冲信号
 149   1              i++;
 150   1              TMDAT=1;
 151   1              i++;i++ ;         //微量延时
 152   1              dat=TMDAT;                              //给脉冲信号
 153   1              for(i=0;i<8;i++);
 154   1              return(dat);
 155   1      
 156   1      }
 157          
 158          /************************************************************
 159          程序名称:读字函数
 160          函数说明:读取DS18B20一字节信号
 161          功能:
 162          *************************************************************/
 163          BYTE tmrbyte(void)
 164          {
 165   1              BYTE i,j,dat;
 166   1          dat=0;
 167   1              for(i=1;i<=8;i++)
 168   1              {
 169   2                      j=tmrbit();
 170   2                      dat=(j<<7)|(dat>>1);
 171   2              }                          
 172   1              return(dat);
 173   1      }
 174          
 175          /************************************************************
 176          程序名称:写函数
 177          函数说明:
 178          功能:
 179          *************************************************************/
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 4   

 180          void  tmwbyte(BYTE dat)   //写一个字节
 181          {
 182   1              BYTE i,j;
 183   1              bit testb;
 184   1              for(j=1;j<=8;j++)
 185   1              {
 186   2                      testb=dat&0x01;
 187   2                      dat=dat>>1;
 188   2                      if(testb)
 189   2                      {
 190   3                              TMDAT=0;           //写0
 191   3                              i++;i++;
 192   3                              TMDAT=1;
 193   3                              for(i=0;i<8;i++);
 194   3                                      
 195   3                      }
 196   2                  else
 197   2                      {
 198   3                              TMDAT=0;
 199   3                              for(i=0;i<8;i++);
 200   3                              TMDAT=1;
 201   3                              i++;i++;
 202   3                      }
 203   2              }
 204   1      }
 205          
 206          /************************************************************
 207          程序名称:温度转换函数
 208          函数说明:将读取的DS18B20的数据进行转换
 209          功能:
 210          *************************************************************/
 211          void  trstar(void)
 212          {
 213   1              tmreast();
 214   1              dmsec(1);
 215   1              tmwbyte(0xcc);             //跳过序列号命令
 216   1              tmwbyte(0x44);        //发送转换命令44H
 217   1      }
 218          
 219          
 220          /************************************************************
 221          程序名称:读温度函数
 222          函数说明:读取转换后的温度
 223          功能:
 224          *************************************************************/
 225          void  temp(void)
 226          {
 227   1              BYTE a,b;
 228   1              tmreast();
 229   1              dmsec(1);
 230   1              tmwbyte(0xcc);
 231   1              tmwbyte(0xbe);
 232   1              a=tmrbyte();          // 读取温度
 233   1              b=tmrbyte();
 234   1              if(b>0x7f)
 235   1              {
 236   2                      a=~a;b=~b+1;      //补码转换,取反加一
 237   2                      flag=0;            //温度为负时flag=0
 238   2                       
 239   2              }
 240   1              sdata=a/16+b*16;
 241   1              xiaoshu1=(a&0x0f)*10/16;
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 5   

 242   1              xiaoshu2=(a&0x0f)*100/16%10;
 243   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 244   1      /*      sdata=45;
 245   1              xiaoshu1=3;
 246   1              xiaoshu2=2;
 247   1              xiaoshu=xiaoshu1*10+xiaoshu2;
 248   1      */
 249   1                      
 250   1      }
 251          
 252          void DS18B20R(void)
 253          {
 254   1              trstar();
 255   1          dmsec(5);       //   不断读取数据
 256   1              temp();         //   读取数据后将温度存在TMP中
 257   1      }
 258          
 259          
 260          /************************************************************
 261          程序名称:显示函数
 262          函数说明:显示读取的数据
 263          功能:
 264          *************************************************************/
 265          void LED(void)
 266          {
 267   1          if(flag==1)
 268   1              {
 269   2                      dis2[0]='+';
 270   2                      dis2[1]='2';//sdata/10;
 271   2                      dis2[2]='5';//seg7code[sdata%10];
 272   2                      dis2[3]='.';
 273   2                      dis2[4]='6';//seg7code[xiaoshu1];
 274   2                      dis2[5]='4';
 275   2                      dis2[6]='C';
 276   2              }
 277   1      /*      if(flag==0)
 278   1              {
 279   1                      P2=0x7f;
 280   1                      P0=seg7code[11];                  //负号
 281   1                      Delay(8);
 282   1                      P0=seg7code[sdata/10];
 283   1                      Delay(8);
 284   1                      P2=0xbf;
 285   1                      P0=seg7code[sdata%10];
 286   1                      Delay(8);
 287   1                      P2=0xdf;
 288   1                      P0=seg7code[xiaoshu1];
 289   1                      Delay(8);
 290   1                      P2=P2|0xf0;
 291   1              } */
 292   1      
 293   1      }
 294          
 295          void main()
 296          {
 297   1              BYTE k;
 298   1              flag=1;
 299   1              DS18B20R();
 300   1              LED();
 301   1              lcd_init();                             // 初始化LCD                    
 302   1              delay(10);
 303   1              lcd_pos(4);                             // 设置显示位置为第一行的第5个字符
C51 COMPILER V8.02   TEMPTURE2                                                             07/18/2008 03:25:32 PAGE 6   

 304   1              k = 0;
 305   1              while(dis1[k] != '\0')
 306   1              {                                               // 显示字符"welcome!"
 307   2                      lcd_wdat(dis1[k]);
 308   2                      k++;
 309   2              }
 310   1              lcd_pos(0x41);                  // 设置显示位置为第二行第二个字符
 311   1              k = 0;
 312   1              while(dis2[k] != '\0')
 313   1              {
 314   2                      lcd_wdat(dis2[k]);      // 显示字符"  www.xingyan.com.cn  "
 315   2                      k++;
 316   2              }                 
 317   1              while(1);                               //      
 318   1      }
 319          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    567    ----
   CONSTANT SIZE    =      5    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     32    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       3
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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