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

📄 temperature.lst

📁 温度采集程序
💻 LST
字号:
C51 COMPILER V8.02   TEMPERATURE                                                           11/24/2008 15:05:18 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TEMPERATURE
OBJECT MODULE PLACED IN Temperature.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Temperature.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include <absacc.h>
   3          
   4          #define uchar unsigned char
   5          #define uint unsigned int 
   6          
   7          uchar code table[]={
   8          0x3f,0x06,0x5b,0x4f,
   9          0x66,0x6d,0x7d,0x07,
  10          0x7f,0x6f,0x77,0x7c,
  11          0x39,0x5e,0x79,0x71};
  12          
  13          
  14          sbit U138_A=P2^5;                 
  15          sbit U138_B=P2^6;
  16          sbit U138_C=P2^7;
  17          sbit U138_G2=P2^4;
  18          
  19          sbit wendu=P1^4;
  20          
  21          uint f,g,init_success,temperature;
  22          
  23          void Board_Init();
  24          
  25          void Init_DS18B20(void);
  26          
  27          
  28          void delay_18B20(uint i);
  29          unsigned char ReadOneChar(void);
  30          void WriteOneChar(uchar dat);
  31          
  32          void LED_A_ENABLE();
  33          void LED_B_ENABLE();
  34          void LED_DISABLE();
  35          
  36          void ReadTemperature(void);
  37          void LED_DISPLAY(uint);
  38          
  39          void main()
  40          {
  41   1              Board_Init();
  42   1              
  43   1              TMOD=0x20;      //定时器工作方式
  44   1              TH1=0xfd;       //采用定时器溢出方式设定波特率为9600
  45   1              TL1=0xfd;
  46   1              TR1=1;
  47   1              REN=1;
  48   1              SM0=0;
  49   1              SM1=1;
  50   1      
  51   1              while(1)
  52   1              {
  53   2                      ReadTemperature();
  54   2      
  55   2                      LED_DISPLAY(temperature);
C51 COMPILER V8.02   TEMPERATURE                                                           11/24/2008 15:05:18 PAGE 2   

  56   2      
  57   2                      SBUF=temperature;
  58   2              }
  59   1              
  60   1              
  61   1              
  62   1      }       
  63          
  64          /*
  65           * Board_Init - 初始化
  66           */
  67          void Board_Init()
  68          {
  69   1              /* 初始化IO口 */
  70   1              P0 = 0xff;
  71   1              P1 = 0xff;
  72   1              P2 = 0xff;
  73   1              P3 = 0xff;
  74   1      
  75   1          //初始化数码管
  76   1              P0=0x00;
  77   1              LED_A_ENABLE();
  78   1              LED_DISABLE();
  79   1              LED_B_ENABLE();
  80   1              LED_DISABLE();
  81   1              P0 = 0xff;
  82   1      
  83   1      
  84   1      }
  85          
  86          void LED_A_ENABLE()
  87          {
  88   1              
  89   1              U138_A=1;
  90   1              U138_B=0;
  91   1              U138_C=0;
  92   1              U138_G2=0;
  93   1      
  94   1      }
  95          
  96          void LED_B_ENABLE()
  97          {
  98   1              
  99   1              U138_A=0;
 100   1              U138_B=0;
 101   1              U138_C=0;
 102   1              U138_G2=0;
 103   1      
 104   1      }
 105                          
 106          void LED_DISABLE()
 107          {
 108   1              U138_A=1;
 109   1              U138_B=1;
 110   1              U138_C=1;
 111   1              U138_G2=1;
 112   1      }
 113          
 114          void LED_DISPLAY(uint num)
 115          {
 116   1              if(num>99||num<0)
 117   1              {
C51 COMPILER V8.02   TEMPERATURE                                                           11/24/2008 15:05:18 PAGE 3   

 118   2                      return;
 119   2              }
 120   1              
 121   1              f=num/10;
 122   1              g=num-f*10;
 123   1      
 124   1              P0=table[f];
 125   1              LED_A_ENABLE();
 126   1              LED_DISABLE();
 127   1              P0=table[g];
 128   1              LED_B_ENABLE();
 129   1              LED_DISABLE();  
 130   1      }
 131          
 132          
 133          /***********ds18b20延迟子函数(晶振11.0592MHz )*******/
 134          void delay_18B20(uint i)
 135          {
 136   1              while(i--);
 137   1      }
 138          /**********ds18b20初始化函数**********************/
 139          void Init_DS18B20(void) 
 140          {
 141   1              temperature=0;
 142   1              init_success=0;
 143   1      
 144   1              wendu = 1;          //wendu复位 ds18b20通信端口 
 145   1              delay_18B20(8); //稍做延时
 146   1              wendu = 0;          //单片机将wendu拉低
 147   1              delay_18B20(80); //精确延时 大于 480us
 148   1              wendu = 1;          //拉高总线
 149   1              delay_18B20(5);         //延时15-60微秒后 如果x=0则初始化成功 x=1则初始化失败           
 150   1      
 151   1              if(wendu==0)
 152   1              {
 153   2                       init_success=1;
 154   2              }
 155   1              else
 156   1              {
 157   2                      init_success=0;
 158   2                      
 159   2              }
 160   1      
 161   1              delay_18B20(20);
 162   1      }
 163          /***********ds18b20读一个字节**************/
 164          unsigned char ReadOneChar(void)
 165          {
 166   1              uchar i=0;
 167   1              uchar dat = 0;
 168   1      
 169   1              for (i=8;i>0;i--)
 170   1              {
 171   2                  wendu = 0; // 高电平拉成低电平时读周期开始
 172   2                  dat>>=1;
 173   2                  wendu = 1; // 给脉冲信号
 174   2                  if(wendu)
 175   2                  dat|=0x80;   // | *
 176   2                  delay_18B20(4);
 177   2              }
 178   1                 return(dat);
 179   1      }
C51 COMPILER V8.02   TEMPERATURE                                                           11/24/2008 15:05:18 PAGE 4   

 180          /*************ds18b20写一个字节****************/
 181          void WriteOneChar(uchar dat)
 182          {
 183   1              unsigned char i=0;
 184   1      
 185   1          for (i=8; i>0; i--)
 186   1          {
 187   2                  wendu = 0; //从高电平拉至低电平时,写周期的开始
 188   2                  wendu = dat&0x01;   //数据的最低位先写入
 189   2                  delay_18B20(5); //60us到120us延时
 190   2                  wendu = 1;        
 191   2                  dat>>=1; //从最低位到最高位传入
 192   2          }
 193   1      }
 194          /**************读取ds18b20当前温度************/
 195          void ReadTemperature(void)
 196          {
 197   1              unsigned char r=0;
 198   1              unsigned char s=0;
 199   1      
 200   1              Init_DS18B20();
 201   1      
 202   1              if(init_success==1)
 203   1              {
 204   2                  WriteOneChar(0xCC);    // 跳过读序号列号的操作
 205   2                      WriteOneChar(0x44); // 启动温度转换
 206   2                      delay_18B20(100);       // this message is wery important
 207   2                      Init_DS18B20();
 208   2                      WriteOneChar(0xCC); //跳过读序号列号的操作
 209   2                      WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 210   2                      delay_18B20(100);
 211   2                      r=ReadOneChar();    //读取温度值低位
 212   2                      s=ReadOneChar();      //读取温度值高位
 213   2                      temperature=s<<4;            //高8位中后四位数的值
 214   2                      temperature+=(r&0xf0)>>4;      //低8位中的高4位值加上高8位中后四位数的值   temp1室温整数值
 215   2      
 216   2              }
 217   1       
 218   1      }
 219          
 220          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    372    ----
   CONSTANT SIZE    =     16    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8    ----
   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 + -