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

📄 tempereture.lst

📁 用单片机完成温度测量质量越高得到的下载个数越多
💻 LST
字号:
C51 COMPILER V8.09   TEMPERETURE                                                           11/28/2004 01:15:07 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE TEMPERETURE
OBJECT MODULE PLACED IN tempereture.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE tempereture.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <reg52.h>
   2          sbit DS1820_DQ= P0^0;
   3          bit ds1820_reset();
   4          void ds1820_write_data(unsigned char ds1820_wdat);
   5          unsigned char ds1820_read_data();
   6          unsigned char data temperature[2]; //将温度存储在低128RAM单元
   7          
   8          void read_temp()
   9          {
  10   1       unsigned char i;
  11   1       ds1820_reset();    //复位
  12   1       ds1820_write_data(0xcc); //跳过ROM命令
  13   1       ds1820_write_data(0x44); //温度转换命令
  14   1       ds1820_reset();    //复位
  15   1       ds1820_write_data(0xcc); //跳过ROM命令
  16   1       ds1820_write_data(0xbe); //读DS1820温度暂存器命令
  17   1       for (i=0;i<2;i++)
  18   1        {
  19   2       temperature[i]=ds1820_read_data();
  20   2       }
  21   1       ds1820_reset();    //复位,结束读数据
  22   1       }
  23          
  24          bit ds1820_reset()
  25          {
  26   1       unsigned char i;
  27   1       bit flag;    //DS1820存在标志位
  28   1       DS1820_DQ = 0;  //拉低总线
  29   1       for (i=240;i>0;i--);//延时480微秒,产生复位脉冲
  30   1       DS1820_DQ = 1;  //释放总线
  31   1       for (i=40;i>0;i--); //延时80微秒对总线采样
  32   1       flag =  DS1820_DQ;
  33   1       for (i=200;i>0;i--); //延时400微秒等待总线恢复
  34   1       return (flag);  //根据flag的值可以知道DS1820是否存在或损坏
  35   1      }     //可以加声音告警提示DS1820故障
  36          
  37          
  38          void ds1820_write_data(unsigned char ds1820_wdat)
  39          {
  40   1       unsigned char i,j;
  41   1       for (i=8;i>0;i--)
  42   1        {
  43   2        DS1820_DQ = 0;  //拉低总线,产生写信号
  44   2        for (j=2;j>0;j--); //延时4us
  45   2        DS1820_DQ = ds1820_wdat&0x01; //发送1位
  46   2        for (j=30;j>0;j--); //延时60us,写时序至少要60us
  47   2        DS1820_DQ = 1;  //释放总线,等待总线恢复
  48   2        ds1820_wdat>>=1; //准备下一位数据的传送
  49   2       }
  50   1      }
  51          
  52          
  53          unsigned char ds1820_read_data()
  54          {
  55   1       unsigned char i,j,ds1820_rdat;
C51 COMPILER V8.09   TEMPERETURE                                                           11/28/2004 01:15:07 PAGE 2   

  56   1       for (i=8;i>0;i--)
  57   1        {
  58   2        ds1820_rdat>>=1;
  59   2        DS1820_DQ = 0;   //拉低总线,产生读信号
  60   2        for (j=2;j>0;j--); //延时4us
  61   2         DS1820_DQ = 1; //释放总线,准备读数据
  62   2        for (j=4;j>0;j--); //延时8微秒读数据
  63   2         if (DS1820_DQ == 1)
  64   2          ds1820_rdat |= 0x80;
  65   2        for (j=30;j>0;j--); //延时60us
  66   2        DS1820_DQ = 1;  //拉高总线,准备下一位数据的读取.
  67   2       }
  68   1       return (ds1820_rdat);//返回读到的数据
  69   1      }
  70          
  71          
  72          void main()
  73          {
  74   1      unsigned char s,t,wendu,bai,shi,ge,fen,li,hao,si;      
  75   1      unsigned char display[]={0xc0,0xf9,0xA4,0xB0,0x99,0x92,0x82,0xf8,0x80,0x90};
  76   1      unsigned int i,TempDec;
  77   1      while(1)
  78   1      {
  79   2      read_temp();
  80   2      s= temperature[1]<<4;  //取高字节低4位(温度读数高4位)
  81   2      t = temperature[0]>>4; //取低字节高4位(温度读数低4位)
  82   2      wendu=s|t; //组合成完整数据(整数部分)
  83   2      bai=wendu/100;
  84   2      shi=wendu%100/10;
  85   2      ge=wendu%10;
  86   2      TempDec = (temperature[0]&0x0f)*625;//小数部分,扩大1万倍
  87   2      fen=TempDec/1000;
  88   2      li=TempDec%1000/100;
  89   2      hao=TempDec%100/10;
  90   2      si=TempDec%10;
  91   2      
  92   2      P1=0xfd;
  93   2      P2=display[bai];
  94   2       for(i=0;i<400;i++);
  95   2      
  96   2      P1= 0xfb;
  97   2      P2=display[shi];
  98   2       for(i=0;i<400;i++);
  99   2      
 100   2      P1= 0xf7;
 101   2      P2=display[ge]&0x7f;
 102   2       for(i=0;i<400;i++);
 103   2      
 104   2      P1= 0xef;
 105   2      P2=display[fen];
 106   2       for(i=0;i<400;i++);
 107   2      
 108   2      P1= 0xdf;
 109   2      P2=display[li];
 110   2       for(i=0;i<400;i++);
 111   2      
 112   2      P1= 0xbf;
 113   2      P2=display[hao];
 114   2      for(i=0;i<400;i++);
 115   2      
 116   2      P1= 0x7f;
 117   2      P2=display[si];
C51 COMPILER V8.09   TEMPERETURE                                                           11/28/2004 01:15:07 PAGE 3   

 118   2      //for(i=0;i<250;i++);
 119   2      
 120   2      }
 121   1      
 122   1      
 123   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    450    ----
   CONSTANT SIZE    =     10    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      17
   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 + -