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

📄 lcd_18b20.lst

📁 DS18B20(已通过)测试
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.08   LCD_18B20                                                             05/14/2007 10:50:25 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE LCD_18B20
OBJECT MODULE PLACED IN LCD_18b20.OBJ
COMPILER INVOKED BY: D:\工具安装目录二\Keil C51\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          #include <keyscan.h>                    //键盘扫描头文件
  11          sbit alarm=P2^6;                                        //报警信号
  12          //sbit DQ = P3^7;                                       //定义DQ引脚为P3.7
  13          unsigned char key_value;            //存放键盘扫描值
  14          bit up_one,down_one;                            //加1和减1标志
  15          bit alarm_up_flag,alarm_down_flag;      //上限报警和下限报警设置标志
  16          bit set_temper_flag;                            //设置控制标志温度标志
  17          bit alarm_switch;                                       //报警开关
  18          
  19          unsigned char user_temper;                       //用户标定温度 
  20          unsigned char TH=110,TL=-20,RS=0x3f; //上限温度110,下限-20,分辨率10位,也就是0.25C
  21          unsigned char t[2],*pt;                         //用来存放温度值,测温程序就是通过这个数组与主函数通信的
  22          unsigned char  TempBuffer1[17]={0x2b,0x20,0x30,0x30,0x2e,0x30,0x30,0x20,
  23                                                                          0x53,0x45,0x54,0x2b,0x20,0x30,0x30,0x43,'\0'};
  24                                                                          //显示实时温度,上电时显示+ 00.00 SET+ 00C
  25          unsigned char  TempBuffer0[17]={0x54,0x48,0x3a,0x2b,0x20,0x30,0x30,0x20,
  26                                                                          0x54,0x4c,0x3a,0x2b,0x20,0x30,0x30,0x43,'\0'};
  27                                                                          //显示温度上下限,上电时显示TH:+ 00 TL:+ 00C                                                     
  28          unsigned char code dotcode[4]={0,25,50,75};
  29          /***因显示分辨率为0.25,但小数运算比较麻烦,故采用查表的方法*******
  30          再将表值分离出十位和个位后送到十分位和百分位********************/
  31          
  32          
  33          
  34          /***********用户设定温度转换为LCD显示数据**************
  35          *功能:将用户设定温度user_temper,分离出符号位,百、十、个位
  36                    并将它们转化为ACSII码,送到液晶显示缓冲区
  37          ******************************************************/
  38          void user_temper_LCD(unsigned char temper)
  39          {
  40   1              if(temper>0x7f)                         //判断正负,如果为负温,将其转化为其绝对值
  41   1              {
  42   2                      TempBuffer1[11]=0x2d;   //0x2d为"-"的ASCII码
  43   2                      temper=~temper;                 //将负数的补码转换成绝对值
  44   2                      temper++;
  45   2              }
  46   1              else TempBuffer1[11]=0x2b;      ////0x2B为"+"的ASCII码
  47   1              TempBuffer1[12]=temper/100+0x30;                             //分离出temper的百十个位
  48   1              if( TempBuffer1[12]==0x30) TempBuffer1[12]=0xfe;     //百位数消隐
  49   1              TempBuffer1[13]=(temper%100)/10+0x30;                                //分离出十位
  50   1              TempBuffer1[14]=(temper%100)%10+0x30;                                //分离出个位
  51   1      }
  52          
  53          
  54          
  55          /***************温度上下限转换为LCD显示数据************
C51 COMPILER V7.08   LCD_18B20                                                             05/14/2007 10:50:25 PAGE 2   

  56          *功能:将上下限报警温度,分离出符号位,百、十、个位
  57                    并将它们转化为ACSII码,送到液晶显示缓冲区
  58          ******************************************************/
  59          void alarm_LCD( unsigned char TH, unsigned char TL)     
  60          { 
  61   1         if(TH>0x7F)                    //判断正负,如果为负温,将其转化为其绝对值
  62   1         {
  63   2          TempBuffer0[3]=0x2d;             //0x2d为"-"的ASCII码
  64   2              TH=~TH;                                          //将负数的补码转换成绝对值
  65   2              TH++;
  66   2         }
  67   1         else TempBuffer0[3]=0x2b;    //0x2B为"+"的ASCII码
  68   1      
  69   1         if(TL>0x7f)
  70   1         {
  71   2         TempBuffer0[11]=0x2d;             //0x2d为"-"的ASCII码
  72   2         TL=~TL+1;
  73   2         }
  74   1         else TempBuffer0[11]=0x2b;   //0x2B为"+"的ASCII码
  75   1      
  76   1        TempBuffer0[4]=TH/100+0x30;                        //分离出TH的百十个位
  77   1        if( TempBuffer0[4]==0x30) TempBuffer0[4]=0xfe; //百位数消隐
  78   1        TempBuffer0[5]=(TH%100)/10+0x30;                              //分离出十位
  79   1        TempBuffer0[6]=(TH%100)%10+0x30;                              //分离出个位
  80   1        TempBuffer0[12]=TL/100+0x30;                       //分离出TL的百十个位
  81   1        if( TempBuffer0[12]==0x30) TempBuffer0[12]=0xfe; //百位数消隐
  82   1        TempBuffer0[13]=(TL%100)/10+0x30;                             //分离出十位
  83   1        TempBuffer0[14]=(TL%100)%10+0x30;                             //分离出个位
  84   1      }
  85          
  86          /**********温度转换为LCD显示数据****************
  87          *功能:将两个字节的温度值,分离出符号位,整数及小数
  88                    并将它们转化为ACSII码,送到液晶显示缓冲区
  89          ************************************************/
  90          void temper_LCD(void)   
  91          {
  92   1         unsigned char x=0x00,y=0x00;
  93   1         t[0]=*pt;
  94   1         pt++;
  95   1         t[1]=*pt;
  96   1         if(t[1]>0x07)                    //判断正负温度
  97   1         {
  98   2          TempBuffer1[0]=0x2d;             //0x2d为"-"的ASCII码
  99   2              t[1]=~t[1];                      /*下面几句把负数的补码*/
 100   2              t[0]=~t[0];              /* 换算成绝对值*********/
 101   2              x=t[0]+1;                                /***********************/
 102   2              t[0]=x;                                  /***********************/
 103   2              if(x>255)                /**********************/
 104   2              t[1]++;                          /*********************/
 105   2         }
 106   1         else TempBuffer1[0]=0x2b;    //0xfe为变"+"的ASCII码
 107   1        t[1]<<=4;             //将高字节左移4位
 108   1        t[1]=t[1]&0x70;               //取出高字节的3个有效数字位
 109   1        x=t[0];                                       //将t[0]暂存到X,因为取小数部分还要用到它
 110   1        x>>=4;                                        //右移4位
 111   1        x=x&0x0f;                                     //和前面两句就是取出t[0]的高四位        
 112   1        t[1]=t[1]|x;                  //将高低字节的有效值的整数部分拼成一个字节
 113   1        TempBuffer1[1]=t[1]/100+0x30;                      //+0x30 为变 0~9 ASCII码
 114   1         if( TempBuffer1[1]==0x30) TempBuffer1[1]=0xfe; //百位数消隐
 115   1        TempBuffer1[2]=(t[1]%100)/10+0x30;                            //分离出十位
 116   1        TempBuffer1[3]=(t[1]%100)%10+0x30;                            //分离出个位
 117   1        t[0]=t[0]&0x0c;                                                       //取有效的两位小数
C51 COMPILER V7.08   LCD_18B20                                                             05/14/2007 10:50:25 PAGE 3   

⌨️ 快捷键说明

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