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

📄 text1.lst

📁 实现51单片机的温度控制系统!传感器采用DS18B20!实现精度可达0.001摄氏度!
💻 LST
字号:
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 18:22:01 PAGE 1   


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

line level    source

   1          /******************************************************** 
   2          file name: temprature control system
   3          date     :  2007-8-9
   4          author   :  dalfer
   5          instruction:关于温度显示的简单程
   6          序为ds18b20单总线温度传感器,dq端接这p1.7, 
   7          *********************************************************/
   8          #include  <reg51.h>
   9          #include  <stdio.h>
  10          #include  <ctype.h>
  11          #include  <intrins.h>
  12          #include <absacc.h>
  13          /***************************************************************/
  14          #define  bit_add    XBYTE[0X7FFF]
  15          #define  seg_add    XBYTE[0XBFFF]
  16          #define  uchar unsigned char
  17          #define  uint unsigned  int
  18                                                                                  
  19          #define  SET    5000//设定
  20          #define  K      3//比例系数
  21          #define  TI     2//积分常数
  22          #define  TD     1//微分常数
  23          #define  T      1//采样周期
  24          /***************************************************************/
  25          char  table[]= {0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  26          char disp_dot[11]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0};
  27          
  28          int     ek=0;
  29          int     ek_1=0;
  30          int     ek_2=0;
  31          int     pt;
  32          int     it;
  33          int     dt;
  34          int     departure;
  35          int     result;
  36          uint   time;
  37          uint   point;
  38          /***************************************************************/
  39          sbit  DQ=P1^0;
  40          sbit  con=P1^1;//低电平加热
  41          sbit  set_dis=P1^2;
  42          sbit  add=P1^3;
  43          sbit  sub=P1^4;
  44          /***************************************************************/
  45          bit   inc_flag=0;//增频
  46          bit   dec_flag=0;//减频
  47          bit   dis_flag=0;//显示设定
  48          /***************************************************************
  49          *函数名称(function name):       delay_18B20  
  50          *函数功能(function funcation):  delay
  51          *入口参数(in parameter):        i      
  52          *出口参数(out parameter):       NO
  53          *备注(remark):                  晶振12MHz
  54          ****************************************************************/ 
  55          void delay_18B20(unsigned int i)
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 18:22:01 PAGE 2   

  56          {
  57   1       while(i--);
  58   1      }
  59          /***************************************************************
  60          *函数名称(function name):       Init_DS18B20  
  61          *函数功能(function funcation):  Initialize DS18B20
  62          *入口参数(in parameter):        NO      
  63          *出口参数(out parameter):       NO
  64          *备注(remark):                  NO
  65          ****************************************************************/
  66          void Init_DS18B20(void) 
  67              {
  68   1           unsigned char x=0;
  69   1           DQ = 1;          //DQ复位
  70   1           delay_18B20(8);  //稍做延时
  71   1           DQ = 0;          //单片机将DQ拉低
  72   1           delay_18B20(80); //精确延时 大于 480us
  73   1           DQ = 1;          //拉高总线
  74   1           delay_18B20(14);
  75   1           x=DQ;            //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
  76   1           delay_18B20(20);
  77   1          }
  78          /***************************************************************
  79          *函数名称(function name):       ReadOneChar  
  80          *函数功能(function funcation):  Read a byte data
  81          *入口参数(in parameter):        NO      
  82          *出口参数(out parameter):       NO
  83          *备注(remark):                  NO
  84          ****************************************************************/  
  85          int ReadOneChar(void)
  86                  {
  87   1               unsigned char i=0;
  88   1               unsigned char dat = 0;
  89   1               for (i=8;i>0;i--)
  90   1                      {
  91   2                        DQ = 0; // 给脉冲信号
  92   2                        dat>>=1;
  93   2                        DQ = 1; // 给脉冲信号
  94   2                        if(DQ)
  95   2                              dat|=0x80;
  96   2                              delay_18B20(4);
  97   2                       }
  98   1              return(dat);
  99   1              }
 100          
 101          /***************************************************************
 102          *函数名称(function name):       WriteOneChar  
 103          *函数功能(function funcation):  Write a byte data
 104          *入口参数(in parameter):        dat      
 105          *出口参数(out parameter):       NO
 106          *备注(remark):                  NO
 107          ****************************************************************/                       //写一个字节  
 108          WriteOneChar(unsigned char dat)
 109          {
 110   1       unsigned char i=0;
 111   1       for (i=8; i>0; i--)
 112   1         {
 113   2          DQ = 0;
 114   2          DQ = dat&0x01;
 115   2          delay_18B20(5);
 116   2          DQ = 1;
 117   2          dat>>=1;
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 18:22:01 PAGE 3   

 118   2         }
 119   1       }
 120          /***************************************************************
 121          *函数名称(function name):       ReadTemperature  
 122          *函数功能(function funcation):  Read temprature
 123          *入口参数(in parameter):        NO      
 124          *出口参数(out parameter):       NO
 125          *备注(remark):                  NO
 126          ****************************************************************/
 127          int ReadTemperature(void)
 128          {
 129   1       unsigned char a=0;
 130   1                       unsigned char b=0;
 131   1                       unsigned int  t=0;
 132   1              
 133   1                       Init_DS18B20();
 134   1                       WriteOneChar(0xCC); // 跳过读序号列号的操作
 135   1                       WriteOneChar(0x44); // 启动温度转换
 136   1                       delay_18B20(100);
 137   1                       Init_DS18B20();
 138   1                       WriteOneChar(0xCC); //跳过读序号列号的操作
 139   1                       WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 140   1                       a=ReadOneChar();
 141   1                       b=ReadOneChar();
 142   1                       //传感器返回值除16得实际温度值
 143   1                       //为了得到2位小数位,先乘100,再除16,考虑整型数据长度,
 144   1                       //技巧处理后先乘25,再除4,除4用右移实现
 145   1               t = (b*256+a)*25;      
 146   1                       return( t >> 2 );
 147   1      }
 148          /***************************************************************
 149          *名称(name):       time1  
 150          *功能(funcation):  PWM
 151          *备注(remark):     NO
 152          ****************************************************************/      
 153          void time1(void) interrupt 3 using 3
 154           {  
 155   1        TR1=0;
 156   1        ET1=0;
 157   1        EA=0;
 158   1        if(dec_flag==1)//低电平变窄,高电平变宽
 159   1              {
 160   2               ++time;
 161   2               if(time<(point))
 162   2                 {
 163   3                  con=0;
 164   3                 }
 165   2               if(time>=(point))
 166   2                 {
 167   3                  con=1;
 168   3                 }
 169   2               if(time>500)
 170   2                 {
 171   3                 time=0;
 172   3                 }              
 173   2          }
 174   1        TR1=1;
 175   1        ET1=1;
 176   1        TH1=0xff;//100um
 177   1        TL1=0xfe;
 178   1       }
 179          /***************************************************************
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 18:22:01 PAGE 4   

 180          *函数名称(function name):       disp  
 181          *函数功能(function funcation):  Display temprature on 7SEG-LED
 182          *入口参数(in parameter):        NO      
 183          *出口参数(out parameter):       NO
 184          *备注(remark):                  NO
 185          ****************************************************************/
 186          void disp(void)
 187          {  
 188   1       unsigned int tmp;                                          
 189   1       tmp =ek;
 190   1       bit_add = 0xff;
 191   1       seg_add = table[tmp%10];
 192   1       bit_add = 0xf7;
 193   1       delay_18B20(100);
 194   1       bit_add = 0xff;
 195   1       seg_add = table[tmp/10%10];
 196   1       bit_add=0xfb;
 197   1       delay_18B20(100);
 198   1       bit_add = 0xff;
 199   1       seg_add = disp_dot[tmp/100%10];
 200   1       bit_add = 0xfd;
 201   1       delay_18B20(100);
 202   1       bit_add = 0xff;
 203   1       seg_add = table[tmp/1000];
 204   1       bit_add= 0xfe;
 205   1       delay_18B20(100);
 206   1      }                        
 207          /***************************************************************
 208          *函数名称(function name):       control 
 209          *函数功能(function funcation):  
 210          *入口参数(in parameter):        NO      
 211          *出口参数(out parameter):       NO
 212          *备注(remark):                  NO
 213          ****************************************************************/                                
 214          void control(void)
 215          {                                   
 216   1       delay_18B20(100);
 217   1       disp();
 218   1       if(ek<4500)     //一直加热
 219   1         {con=0;
 220   2          EA=0;
 221   2          dec_flag=0;
 222   2         }
 223   1       if((ek>=4500)&&(ek<=5000))//PID
 224   1         {  
 225   2          TR1=1;
 226   2              ET1=1;
 227   2              EA=1;
 228   2              if((ek>=4500)&&(ek<5000))//pid
 229   2                {                                               
 230   3                 point=SET-ek;//5000-45**的值                                                    
 231   3                 dec_flag=1;//低电平变窄,高电平变宽
 232   3                }
 233   2          if(ek==5000)
 234   2                {
 235   3                 con=1;
 236   3                }
 237   2         }
 238   1       if(ek>5000)     //保持停止加热
 239   1         {
 240   2          con=1;
 241   2              EA=0;
C51 COMPILER V8.02   TEXT1                                                                 05/19/2008 18:22:01 PAGE 5   

 242   2              dec_flag=0;                     
 243   2         }
 244   1      }
 245          /***************************************************************
 246          *函数名称(function name):       main 
 247          *函数功能(function funcation):  realize temprature controlled
 248          *入口参数(in parameter):        NO      
 249          *出口参数(out parameter):       NO
 250          *备注(remark):                  NO
 251          ****************************************************************/                         
 252          void main(void)
 253          {
 254   1       PT1=1;//中断优先
 255   1       TH1=0xff;//100um
 256   1       TL1=0xfe;
 257   1       con=0;
 258   1       while(1)
 259   1          {
 260   2               ek=ReadTemperature();
 261   2               control();
 262   2               if((dec_flag==1))
 263   2                 {
 264   3                  TR1=1;
 265   3                  ET1=1;
 266   3                  EA=1;
 267   3                 }                            
 268   2               if((dec_flag==0))
 269   2                 {
 270   3                  TR1=0;
 271   3                  ET1=0;
 272   3                  EA=0;
 273   3                 }
 274   2          }
 275   1      }
 276                                          
 277                                    
 278                                          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    572    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     41    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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