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

📄 tempereture.lst

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

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

 118   2      ge=wendu%10;
 119   2      TempDec = (temperature[0]&0x0f)*625;//小数部分,扩大1万倍
 120   2      fen=TempDec/1000;
 121   2      li=TempDec%1000/100;
 122   2      hao=TempDec%100/10;
 123   2      si=TempDec%10;
 124   2      
 125   2      
 126   2      
 127   2      
 128   2      P1=0xfd;
 129   2      P2=display[bai];
 130   2       for(i=0;i<400;i++);
 131   2      
 132   2      P1= 0xfb;
 133   2      P2=display[shi];
 134   2       for(i=0;i<400;i++);
 135   2      
 136   2      P1= 0xf7;
 137   2      P2=display[ge]&0x7f;
 138   2       for(i=0;i<400;i++);
 139   2      
 140   2      P1= 0xef;
 141   2      P2=display[fen];
 142   2       for(i=0;i<400;i++);
 143   2      
 144   2      P1= 0xdf;
 145   2      P2=display[li];
 146   2       for(i=0;i<400;i++);
 147   2      
 148   2      P1= 0xbf;
 149   2      P2=display[hao];
 150   2      for(i=0;i<400;i++);
 151   2      
 152   2      P1= 0x7f;
 153   2      P2=display[si];
 154   2      //for(i=0;i<250;i++);
 155   2      
 156   2      }
 157   1      
 158   1      
 159   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    579    ----
   CONSTANT SIZE    =     11    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      21
   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 + -