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

📄 tempture.lst

📁 温度传感器18B20的典型应用
💻 LST
字号:
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 1   


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

line level    source

   1          /*******************************************************************************************************
   2          程序名称:1602液晶温度显示
   3          实现功能:1602液晶温度显示
   4          作者:李灿松
   5          最后修改时间:2008.7.18
   6          =========================================
   7          数据说明:                                                              *
   8          P0_0=D0   P0_1=D1    P0_2=D2    P0_3=D3 *
   9          P0_4=D4   P0_5=D5    P0_6=D6    P0_7=D7 *   
  10          P2_0=RS   P2_1=RW    P2_2=E                             *
  11                                                                                          *
  12          P3_3为DS18B20的数据输入口                       *
  13          =========================================
  14          *******************************************************************************************************/
  15          #include<reg52.h>
  16          #include<intrins.h>
  17          #define T_cont  0.0625               //温度转换常数
  18          #define uchar  unsigned char
  19          #define uint  unsigned int             
  20          #define L1602_DB0_DB7 P0             //定义1602的数据总线
  21          bit T_sign=0;                        //温度正负符号        
  22          float  temp1=0;
  23          sbit DQ=P3^3;                        //单口线说明
  24          sbit L1602_RS=P2^0;                  //定义1602得RS控制线
  25          sbit L1602_RW=P2^1;                  //定义1602得RW控制线
  26          sbit L1602_E=P2^2;                   //定义1602的E控制线
  27          sbit L1602_Busy=P0^7;                //定义1602的测忙线
  28          uchar code Welcome[]={"wlecome"};
  29          uchar code Welcome1[]={"tempture"};
  30          uchar code Welcome2[]={"cansong:"};
  31          uchar code Temp[]={"temp"};
  32          unsigned char sdata,t_bai,t_shi,t_ge,t_feng,t_miao;
  33          typedef bit BOOL ; 
  34          
  35          /**********************************************************************************************
  36          函数名称:主函数
  37          函数功能:
  38          说明:
  39          **********************************************************************************************/
  40          void main(void)
  41          {
  42   1      void print(uchar a,uchar *str);
  43   1      void print1(uchar a,uchar t); 
  44   1      void LCM1602_Init();
  45   1      void LCM1602_Delay(uchar count);
  46   1      void ReadTemperature();
  47   1      void DS18B20_init();
  48   1      
  49   1      DS18B20_init();
  50   1      LCM1602_Init();
  51   1      print(0x80,Welcome);
  52   1      print(0xc0,Welcome1);
  53   1      LCM1602_Delay(5000);
  54   1      while(1)
  55   1        {
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 2   

  56   2         ReadTemperature();
  57   2         print(0x80, Welcome2);
  58   2         if(T_sign==1)
  59   2             print1(0xc0,0x2d);
  60   2         else 
  61   2             print1(0xc0,0x2b);    
  62   2         //if(t_bai!=0)
  63   2             print1(0xc1,t_bai+0x30);
  64   2        // else
  65   2            // print1(0xc1,t_shi+0x30);   //消隐,不显示
  66   2        // t_shi=3;
  67   2         print1(0xc2,t_shi+0x30);
  68   2         print1(0xc3,t_ge+0x30);
  69   2         print1(0xc4,0x2e);               //显示点
  70   2         print1(0xc5,t_feng+0x30);
  71   2         print1(0xc6,t_miao+0x30);
  72   2         print1(0xc7,0x43);              //显示'C
  73   2        }
  74   1      }        
  75          
  76          
  77          /**********************************************************************************************
  78          函数名称:读取温度函数
  79          函数功能:读取DS18B20的转换温度值
  80          说明:
  81          **********************************************************************************************/
  82          
  83          void ReadTemperature()               //获取温度源程序
  84          {
  85   1       void delay(unsigned int delay_time);
  86   1       void DS18B20_init();
  87   1       void DS18B20_send(unsigned char out_data);
  88   1       uchar DS18B20_read(void);
  89   1       unsigned int y=0;
  90   1       uchar a=0;
  91   1       uchar b=0;
  92   1      // unsigned char k;
  93   1       DS18B20_init();                   //初始化DS18B20
  94   1       DS18B20_send (0xcc);
  95   1       DS18B20_send (0x44);              //启动温度转换
  96   1       delay(125);
  97   1       DS18B20_init();       
  98   1       DS18B20_send (0xcc);
  99   1       DS18B20_send (0xbe);             //读取温度寄存器
 100   1       a=DS18B20_read();                     //读取低位
 101   1       b=DS18B20_read();                        //读取高位
 102   1       //k=b&0X08;
 103   1       //if(k==0x08)  T_sign=1;          //温度是负数
 104   1       //else T_sign=0;
 105   1      
 106   1              if(b>0x7f)
 107   1              {                                                   
 108   2                      a=~a;b=~b+1;              //补码转换,取反加一
 109   2                      T_sign=1;                //温度为负时flag=0
 110   2                       
 111   2              }
 112   1              sdata=a/16+b*16;
 113   1              t_bai=sdata/100;
 114   1              t_shi=sdata/10;
 115   1              t_ge=sdata%10;
 116   1              t_feng=(a&0x0f)*10/16;
 117   1              t_miao=(a&0x0f)*100/16%10;
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 3   

 118   1       
 119   1      } 
 120          
 121          
 122          /**********************************************************************************************
 123          函数名称:延时函数
 124          函数功能:转换延时和显示延时
 125          说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
 126          **********************************************************************************************/
 127          void delay(unsigned int delay_time) // 延时程序
 128          {
 129   1       while(delay_time--);
 130   1      }
 131          
 132          void LCM1602_Delay(uchar count)
 133          {
 134   1              uchar i;
 135   1              while(--count!=0)
 136   1                 {for(i=0;i<250;i++);}        
 137   1      }
 138          
 139          /**********************************************************************************************
 140          函数名称:初始化函数
 141          函数功能:对DS18B20进行初始化
 142          说明:
 143          **********************************************************************************************/
 144          void DS18B20_init()  //初始化DS18B20
 145          {
 146   1      unsigned char i=0;
 147   1      DQ=1;
 148   1      delay(8);
 149   1      DQ=0;
 150   1      delay(85);       //精确延时484 us
 151   1      DQ=1;
 152   1      delay(14);        //精确延时34us
 153   1      i=DQ;
 154   1      delay(20);
 155   1                                       
 156   1      }
 157          
 158          /**********************************************************************************************
 159          函数名称:写函数
 160          函数功能:向DS18B20写命令
 161          说明:
 162          **********************************************************************************************/
 163          void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
 164          {
 165   1       unsigned char i=0;
 166   1       
 167   1       for(i=8;i>0;i--)
 168   1         {
 169   2          DQ=0;
 170   2              DQ=out_data&0x01;                     //数据从低位送出
 171   2              delay(5);                            //精确延时61us
 172   2              DQ=1;
 173   2              out_data>>=1;
 174   2         }
 175   1        delay(4);
 176   1      }
 177          
 178          /**********************************************************************************************
 179          函数名称:读函数
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 4   

 180          函数功能:从DS18B20读取数据
 181          说明:
 182          **********************************************************************************************/
 183          uchar DS18B20_read(void)//主机从DS18B20中读取一字节
 184          {
 185   1       unsigned char i,in_data;
 186   1       in_data=0;
 187   1       for(i=8;i>0;i--)
 188   1          {
 189   2               DQ=1;
 190   2               delay(1);
 191   2               DQ=0;            //给脉冲信号
 192   2               in_data>>=1;
 193   2               DQ=1;           //给脉冲信号
 194   2               if(DQ) 
 195   2                 in_data|=0x80;
 196   2               delay(4);
 197   2              }
 198   1       return(in_data);
 199   1      }
 200          
 201          
 202          /**********************************************************************************************
 203          函数名称:初始化函数
 204          函数功能:液晶1602初始化
 205          说明:
 206          **********************************************************************************************/
 207          void  LCM1602_Init(void)
 208          {
 209   1       void LCM1602_WriteData(uchar LCM1602_data);
 210   1       void LCM1602_WriteCMD(uchar LCM1602_command);
 211   1       LCM1602_WriteCMD(0x38);    //显示两行,每个字符为5*7个像素
 212   1       delay(1);
 213   1       LCM1602_WriteCMD(0x06);    //光标移动设置,光标右移
 214   1       delay(1);
 215   1       LCM1602_WriteCMD(0x0c);    //现设开,光标开,闪烁开
 216   1       delay(1);
 217   1       LCM1602_WriteCMD(0x01);    //清屏
 218   1       delay(1);
 219   1      }
 220          void  print(uchar a,uchar *str)
 221          {
 222   1       void  LCM1602_WriteData(uchar LCM1602_data);
 223   1       void  LCM1602_WriteCMD(uchar LCM1602_command);
 224   1       LCM1602_WriteCMD(a);
 225   1       while(*str!='\0')
 226   1          {
 227   2          LCM1602_WriteData(*str++);
 228   2              }
 229   1       *str=0;
 230   1      }
 231          void print1(uchar a,uchar t)
 232          {
 233   1       LCM1602_WriteCMD(a);
 234   1       LCM1602_WriteData(t);
 235   1      }
 236          
 237          
 238          
 239          /**********************************************************************************************
 240          函数名称:写命令和写数据函数
 241          函数功能:向LCD写命令和数据
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 5   

 242          说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
 243          **********************************************************************************************/
 244          void LCM1602_WriteCMD(uchar LCM1602_command)
 245          {
 246   1      BOOL lcd_bz();
 247   1      while(lcd_bz());        //测忙
 248   1      L1602_RS=0;
 249   1      L1602_RW=0;
 250   1      L1602_E=0;
 251   1      _nop_();
 252   1      _nop_();
 253   1      L1602_DB0_DB7=LCM1602_command;
 254   1      _nop_();
 255   1      _nop_();_nop_();
 256   1      L1602_E=1;    //命令总送出
 257   1      _nop_();_nop_();_nop_();
 258   1      L1602_E=0; 
 259   1      }
 260          
 261          void LCM1602_WriteData(uchar LCM1602_data)
 262          {
 263   1      BOOL lcd_bz();
 264   1      while(lcd_bz());        //测忙
 265   1      L1602_RS=1;
 266   1      L1602_RW=0;
 267   1      L1602_E=0;
 268   1      L1602_DB0_DB7=LCM1602_data;
 269   1      _nop_();
 270   1      _nop_();
 271   1      _nop_();
 272   1      _nop_();
 273   1      L1602_E=1;   //数据送出
 274   1      _nop_();
 275   1      _nop_();
 276   1      _nop_();
 277   1      L1602_E=0;
 278   1      }
 279          
 280          
 281          /**********************************************************************************************
 282          函数名称:LCD检测忙函数
 283          函数功能:检测LCD是否处于忙状态
 284          说明: 
 285          **********************************************************************************************/
 286          BOOL lcd_bz()
 287          {                                                       // 测试LCD忙碌状态
 288   1              BOOL result;
 289   1              L1602_RS=0;
 290   1          L1602_RW=1;
 291   1          L1602_E=1;
 292   1              _nop_();
 293   1              _nop_();
 294   1              _nop_();
 295   1              _nop_();
 296   1              result = (BOOL)(P0 & 0x80);
 297   1              L1602_E = 0;
 298   1              return result;  
 299   1      }
 300          /**********************************************************************************************/ 


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V8.02   TEMPTURE                                                              07/18/2008 16:54:11 PAGE 6   

   CODE SIZE        =    560    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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