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

📄 ds1820_show.lst

📁 18b20四位小数温度显示,18b20四位小数温度显示
💻 LST
字号:
C51 COMPILER V7.06   DS1820_SHOW                                                           10/27/2008 22:55:09 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1820_SHOW
OBJECT MODULE PLACED IN DS1820_show.OBJ
COMPILER INVOKED BY: D:\Cs1.6中文版\C51\BIN\C51.EXE DS1820_show.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /**********************************************************
   2          *采用DS1820+1602精确到4位小数的温度计
   3          *编程:沈阳
   4          *版本:V1.0
   5          *DS1820设置为12位精度
   6          **********************************************************/
   7          #include <reg52.h>
   8          #include "temp.h" 
   9          sbit RW =P1^1;//定义引脚
  10          sbit RS= P1^0;
  11          sbit E= P1^2;
  12          sbit light= P1^3;
  13          //声明外部温度读数数组
  14          extern unsigned char data temperature[2];
  15          //存放分解的7个ASCII码温度数据  
  16          unsigned char temp[7];
  17          unsigned char code string[16]={"TEMP: 28.5\'c"};
  18          unsigned char code DispStr[16]={"SN:12345678"};
  19          unsigned char fCode[8]; //存放序列号,CRC 
  20          /**********************************************************
  21          *主程序
  22          **********************************************************/
  23          void main()
  24          {
  25   1       unsigned char i;
  26   1       delayms(255);//等待电源稳定,液晶复位完成
  27   1       DS1820_Reset();//DS1820复位
  28   1       DS1820_WriteData(0x33);//读ROM指令
  29   1       for (i=0;i<8;i++)
  30   1        {//读取64位系列号
  31   2        fCode[i] = DS1820_ReadData();
  32   2        }
  33   1       DS1820_Reset();//DS1820复位
  34   1       delayms(250);
  35   1       delayms(250);
  36   1       LCDInit();                     //1602液晶初始化
  37   1       delayms(10);
  38   1       SetLight(1);
  39   1       DisplayStr(0,0,string);//显示"温度:"
  40   1       delayms(1);
  41   1       DisplayStr(0,1,DispStr);//显示"系列号"
  42   1       delayms(50);
  43   1       DispCode();
  44   1       RW=1;
  45   1       RS=1;
  46   1       light=0;
  47   1       //当1602的E和DB18B20共用一个端口时 必须使用以上两条语句隔离
  48   1       //当EW,RS,E=1时 1602为读数据 当E=0时 不会改变1602的数据 这样可以使1602的E和DB18B20可以共用
  49   1       do{
  50   2        read_temp(); //读取温度值
  51   2        delayms(50);
  52   2        display();  //显示温度值
  53   2        delayms(50);
  54   2        RW=1;
  55   2        RS=1;
C51 COMPILER V7.06   DS1820_SHOW                                                           10/27/2008 22:55:09 PAGE 2   

  56   2       //当1602的E和DB18B20共用一个端口时 必须使用以上两条语句隔离
  57   2       //当EW,RS,E=1时 1602为读数据 当E=0时 不会改变1602的数据 这样可以使1602的E和DB18B20可以共用
  58   2        delayms(1);
  59   2        }while (1); //无限循环
  60   1      }
  61          /**********************************************************
  62          *系列号显示子程序
  63          *显示顺序(从左到右)8位CRC编码->48位序列号->8位产品系列编码
  64          **********************************************************/
  65          void DispCode()
  66          {
  67   1       unsigned char i,temp;
  68   1       for (i=8;i>0;i--)
  69   1        {
  70   2       //显示高4位
  71   2       temp = fCode[i-1]>>4;
  72   2        if (temp<10) //ASCII码转换
  73   2            DisplayChar(3+8-i,1,temp += 0x30);
  74   2        else
  75   2            DisplayChar(3+8-i,1,temp += 0x37);
  76   2       //显示低4位
  77   2        temp = fCode[i-1]&0x0f;
  78   2        if (temp<10) //ASCII码转换
  79   2            DisplayChar(4+8-i,1,temp += 0x30);
  80   2        else
  81   2            DisplayChar(4+8-i,1,temp += 0x37);
  82   2                i--;
  83   2        }
  84   1      }
  85          /**********************************************************
  86          *转换显示子程序
  87          **********************************************************/
  88          void display()
  89          {
  90   1       unsigned char temp_data,temp_data_2;
  91   1       unsigned int TempDec; //用来存放4位小数
  92   1       temp_data = temperature[1];
  93   1       temp_data &= 0xf0;  //取高4位
  94   1       if (temp_data==0xf0) //判断是正温度还是负温度读数
  95   1        {
  96   2       //负温度读数求补,取反加1,判断低8位是否有进位
  97   2        if (temperature[0]==0)
  98   2         { //有进位,高8位取反加1
  99   3           temperature[0]=~temperature[0]+1;
 100   3          temperature[1]=~temperature[1]+1;
 101   3         }
 102   2        else
 103   2         { //没进位,高8位不加1
 104   3          temperature[0]=~temperature[0]+1;
 105   3          temperature[1]=~temperature[1];
 106   3         }
 107   2        }
 108   1       temp_data = temperature[1]<<4;  //取高字节低4位(温度读数高4位)
 109   1       temp_data_2 = temperature[0]>>4; //取低字节高4位(温度读数低4位)
 110   1       temp_data = temp_data|temp_data_2; //组合成完整数据
 111   1       temp[0] = temp_data/100+0x30;   //取百位转换为ASCII码
 112   1       temp[1] = (temp_data%100)/10+0x30;  //取十位转换为ASCII码
 113   1       temp[2] = (temp_data%100)%10+0x30;  //取个位转换为ASCII码
 114   1       temperature[0]&=0x0f;     //取小数位转换为ASCII码
 115   1       TempDec = ((temperature[0]&0x0f)*0.0625)*10000;//小数部分,扩大1万倍
 116   1       temp[3] = TempDec/1000+0x30;   //取小数个位转换为ASCII码
 117   1       temp[4] = (TempDec%1000)/100+0x30;  //取小数十位转换为ASCII码
C51 COMPILER V7.06   DS1820_SHOW                                                           10/27/2008 22:55:09 PAGE 3   

 118   1       temp[5] = ((TempDec%1000)%100)/10+0x30;//取小数百位转换为ASCII码
 119   1       temp[6] = ((TempDec%1000)%100)%10+0x30;//取小数千位转换为ASCII码
 120   1      if(temp[0]==0x30) DisplayChar(5,0,' ');//百位
 121   1      else DisplayChar(5,0,temp[0]);//百位
 122   1      DisplayChar(6,0,temp[1]);//十位
 123   1      DisplayChar(7,0,temp[2]);//个位
 124   1      DisplayChar(8,0,0x2e);//小数点 .
 125   1      DisplayChar(9,0,temp[3]);
 126   1      DisplayChar(10,0,temp[4]);
 127   1      DisplayChar(11,0,temp[5]);
 128   1      DisplayChar(12,0,temp[6]);
 129   1      DisplayChar(13,0,'\'');//显示'
 130   1      DisplayChar(14,0,'C');
 131   1      }
 132          
 133          
 134          
 135           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    578    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15       3
   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 + -