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

📄 lcd_18b20.lst

📁 DS18B20,单片机,C语言开发,proteus仿真
💻 LST
字号:
C51 COMPILER V7.08   LCD_18B20                                                             04/30/2007 21:28:33 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE LCD_18B20
OBJECT MODULE PLACED IN LCD_18b20.OBJ
COMPILER INVOKED BY: D:\Program Files\keil 7.08\C51\BIN\C51.EXE LCD_18b20.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <at89x51.h>//用AT89C51时就用这个头文件
   2          //#include <reg52.h>//用华邦W78E58B时必须用这个头文件
   3          #include <absacc.h>
   4          #include <ctype.h>
   5          #include <math.h>
   6          #include <stdio.h>
   7          #include <string.h>
   8          #include <DS18B20.h>
   9          #include "LCD1602.h"                    ////液晶显示头文件
  10          //sbit DQ = P3^4;                                       //定义DQ引脚为P3.4
  11          unsigned char t[2],*pt;                         //用来存放温度值,测温程序就是通过这个数组与主函数通信的
  12          unsigned char  TempBuffer1[9]={0x2b,0x31,0x32,0x32,0x2e,0x30,0x30,0x43,'\0'};
  13                                                                          //显示实时温度,上电时显示+125.00C
  14          unsigned char  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x31,0x32,0x35,0x20,
  15                                                                          0x54,0x4c,0x3a,0x2b,0x31,0x32,0x34,0x43,'\0'};
  16                                                                          //显示温度上下限,上电时显示TH:+125 TL:+124C                                                     
  17          unsigned char code dotcode[4]={0,25,50,75};
  18          /***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******
  19          再将表值分离出十位和个位后送到十分位和百分位********************/
  20          
  21          
  22          void covert0( unsigned char TH, unsigned char TL)       //将温度上下限转换为LCD显示的数据
  23          { 
  24   1         if(TH>0x7F)                    //判断正负,如果为负温,将其转化为其绝对值
  25   1         {
  26   2          TempBuffer0[3]=0x2d;             //0x2d为"-"的ASCII码
  27   2              TH=~TH;
  28   2              TH++;
  29   2         }
  30   1         else TempBuffer0[3]=0x2b;    //0x2B为"+"的ASCII码
  31   1      
  32   1         if(TL>0x7f)
  33   1         {
  34   2         TempBuffer0[11]=0x2d;             //0x2d为"-"的ASCII码
  35   2         TL=~TL+1;
  36   2         }
  37   1         else TempBuffer0[11]=0x2b;   //0x2B为"+"的ASCII码
  38   1      
  39   1        TempBuffer0[4]=TH/100+0x30;                        //分离出TH的百十个位
  40   1        if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐
  41   1        TempBuffer0[5]=(TH%100)/10+0x30;                              //分离出十位
  42   1        TempBuffer0[6]=(TH%100)%10+0x30;                              //分离出个位
  43   1        TempBuffer0[12]=TL/100+0x30;                       //分离出TL的百十个位
  44   1        if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐
  45   1        TempBuffer0[13]=(TL%100)/10+0x30;                             //分离出十位
  46   1        TempBuffer0[14]=(TL%100)%10+0x30;                             //分离出个位
  47   1      }
  48          
  49          
  50          void covert1(void)      //将温度转换为LCD显示的数据
  51          {
  52   1         unsigned char x=0x00,y=0x00;
  53   1         t[0]=*pt;
  54   1         pt++;
  55   1         t[1]=*pt;
C51 COMPILER V7.08   LCD_18B20                                                             04/30/2007 21:28:33 PAGE 2   

  56   1         if(t[1]>0x07)                    //判断正负温度
  57   1         {
  58   2          TempBuffer1[0]=0x2d;             //0x2d为"-"的ASCII码
  59   2              t[1]=~t[1];                      /*下面几句把负数的补码*/
  60   2              t[0]=~t[0];              /* 换算成绝对值*********/
  61   2              x=t[0]+1;                                /***********************/
  62   2              t[0]=x;                                  /***********************/
  63   2              if(x>255)                /**********************/
  64   2              t[1]++;                          /*********************/
  65   2         }
  66   1         else TempBuffer1[0]=0x2b;    //0xfe为变"+"的ASCII码
  67   1        t[1]<<=4;             //将高字节左移4位
  68   1        t[1]=t[1]&0x70;               //取出高字节的3个有效数字位
  69   1        x=t[0];                                       //将t[0]暂存到X,因为取小数部分还要用到它
  70   1        x>>=4;                                        //右移4位
  71   1        x=x&0x0f;                                     //和前面两句就是取出t[0]的高四位        
  72   1        t[1]=t[1]|x;                  //将高低字节的有效值的整数部分拼成一个字节
  73   1        TempBuffer1[1]=t[1]/100+0x30;                      //+0x30 为变 0~9 ASCII码
  74   1         if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐
  75   1        TempBuffer1[2]=(t[1]%100)/10+0x30;                            //分离出十位
  76   1        TempBuffer1[3]=(t[1]%100)%10+0x30;                            //分离出个位
  77   1        t[0]=t[0]&0x0c;                                                       //取有效的两位小数
  78   1        t[0]>>=2;                                                                     //左移两位,以便查表
  79   1        x=t[0];                                                                               
  80   1        y=dotcode[x];                                                                 //查表换算成实际的小数
  81   1        TempBuffer1[5]=y/10+0x30;                                                     //分离出十分位
  82   1        TempBuffer1[6]=y%10+0x30;                                                     //分离出百分位
  83   1      }                       
  84          
  85          void delay(unsigned char i)
  86          {
  87   1              while(i--);
  88   1      }
  89          
  90          main()
  91          {
  92   1       unsigned char TH=110,TL=-20;                                           //下一步扩展时可能通过这两个变量,调节上下限
  93   1                                                                               //测温函数返回这个数组的头地址
  94   1       while(1)
  95   1       {      
  96   2          pt=ReadTemperature(TH,TL,0x3f);              //上限温度-22,下限-24,分辨率10位,也就是0.25C
  97   2                                                                                       //读取温度,温度值存放在一个两个字节的数组中,
  98   2              delay(100); 
  99   2              covert1();
 100   2              covert0(TH,TL);
 101   2              LCD_Initial();                                                  //第一个参数列号,第二个为行号,为0表示第一行
 102   2                                                                                              //为1表示第二行,第三个参数为显示数据的首地址
 103   2              LCD_Print(0,0,TempBuffer0);     
 104   2              LCD_Print(0,1,TempBuffer1);                             
 105   2       }
 106   1      }
 107            
 108          
 109          
 110          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    687    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.08   LCD_18B20                                                             04/30/2007 21:28:33 PAGE 3   

   DATA SIZE        =     31       6
   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 + -