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

📄 temper.lst

📁 温度计的设计,单片机初学者必须程序,适用于proteus
💻 LST
字号:
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 1   


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

line level    source

   1             #include <AT89X52.H> 
   2          #include <INTRINS.H> 
   3            
   4          unsigned char code displaybit[]={0xfe,0xfd,0xfb,0xf7, 
   5                                           0xef,0xdf,0xbf,0x7f}; 
   6          unsigned char code displaycode[]={0x3f,0x06,0x5b,0x4f, 
   7                                              0x66,0x6d,0x7d,0x07, 
   8                                              0x7f,0x6f,0x77,0x7c, 
   9                                              0x39,0x5e,0x79,0x71,0x00}; 
  10            
  11          unsigned char code dotcode[32]={0,3,6,9,12,16,19,22, 
  12                                          25,28,31,34,38,41,44,48, 
  13                                          50,53,56,59,63,66,69,72, 
  14                                          75,78,81,84,88,91,94,97}; 
  15            
  16            
  17          sbit SDA=P1^6; 
  18          sbit SCL=P1^7; 
  19            
  20          unsigned char displaybuffer[8]={0,1,2,3,4,5,6,7}; 
  21          unsigned char eepromdata[8]; 
  22          unsigned char temperdata[2]; 
  23            
  24          unsigned char timecount; 
  25          unsigned char displaycount; 
  26            
  27          bit secondflag=0; 
  28          unsigned char secondcount=0; 
  29          unsigned char retn; 
  30          unsigned int result; 
  31          unsigned char x; 
  32          unsigned int k; 
  33          unsigned int ks; 
  34            
  35            
  36            
  37          void delay(void); 
  38          void delay10ms(void); 
  39          void i_start(void); 
  40          void i_stop(void); 
  41          void i_init(void); 
  42          void i_ack(void); 
  43          bit i_clock(void); 
  44          bit i_send(unsigned char i_data); 
  45          unsigned char i_receive(void); 
  46            
  47          bit start_temperature_T(void); 
  48          bit read_temperature_T(unsigned char *p); 
  49            
  50          void delay(void) 
  51          { 
  52   1        _nop_(); 
  53   1        _nop_(); 
  54   1        _nop_(); 
  55   1        _nop_(); 
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 2   

  56   1        _nop_(); 
  57   1        _nop_(); 
  58   1      } 
  59            
  60          void delay10ms(void) 
  61          { 
  62   1        unsigned int i; 
  63   1        for(i=0;i<1000;i++) 
  64   1          { 
  65   2            delay(); 
  66   2          } 
  67   1        
  68   1      } 
  69            
  70          void i_start(void) 
  71          { 
  72   1        SCL=1; 
  73   1        delay(); 
  74   1        SDA=0; 
  75   1        delay(); 
  76   1        SCL=0; 
  77   1        delay(); 
  78   1      } 
  79            
  80          void i_stop(void) 
  81          { 
  82   1        SDA=0; 
  83   1        delay(); 
  84   1        SCL=1; 
  85   1        delay(); 
  86   1        SDA=1; 
  87   1        delay(); 
  88   1        SCL=0; 
  89   1        delay(); 
  90   1      } 
  91            
  92          void i_init(void) 
  93          { 
  94   1        SCL=0; 
  95   1        i_stop(); 
  96   1      } 
  97            
  98          void i_ack(void) 
  99          { 
 100   1        SDA=0; 
 101   1        i_clock(); 
 102   1        SDA=1; 
 103   1      } 
 104            
 105          bit i_clock(void) 
 106          { 
 107   1        bit sample; 
 108   1        
 109   1        SCL=1; 
 110   1        delay(); 
 111   1        sample=SDA; 
 112   1        _nop_(); 
 113   1        _nop_(); 
 114   1        SCL=0; 
 115   1        delay(); 
 116   1        return(sample); 
 117   1      } 
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 3   

 118            
 119            
 120          bit i_send(unsigned char i_data) 
 121          { 
 122   1        unsigned char i; 
 123   1        
 124   1        for(i=0;i<8;i++) 
 125   1          { 
 126   2            SDA=(bit)(i_data & 0x80); 
 127   2            i_data=i_data<<1; 
 128   2            i_clock(); 
 129   2          } 
 130   1        SDA=1; 
 131   1        return(~i_clock()); 
 132   1      } 
 133            
 134          unsigned char i_receive(void) 
 135          { 
 136   1        unsigned char i_data=0; 
 137   1        unsigned char i; 
 138   1        
 139   1        for(i=0;i<8;i++) 
 140   1          { 
 141   2            i_data*=2; 
 142   2            if(i_clock()) i_data++; 
 143   2          } 
 144   1        return(i_data); 
 145   1      } 
 146            
 147          bit start_temperature_T(void) 
 148          { 
 149   1        i_start(); 
 150   1        if(i_send(0x90)) 
 151   1          { 
 152   2            if(i_send(0xee)) 
 153   2              { 
 154   3                i_stop(); 
 155   3                delay(); 
 156   3                return(1); 
 157   3              } 
 158   2              else 
 159   2                { 
 160   3                  i_stop(); 
 161   3                  delay(); 
 162   3                  return(0); 
 163   3                } 
 164   2          } 
 165   1          else 
 166   1            { 
 167   2              i_stop(); 
 168   2              delay(); 
 169   2              return(0); 
 170   2            } 
 171   1      } 
 172            
 173          bit read_temperature_T(unsigned char *p) 
 174          { 
 175   1        i_start(); 
 176   1        if(i_send(0x90)) 
 177   1          { 
 178   2            if(i_send(0xaa)) 
 179   2              { 
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 4   

 180   3                i_start(); 
 181   3                if(i_send(0x91)) 
 182   3                  { 
 183   4                    *(p+1)=i_receive(); 
 184   4                    i_ack(); 
 185   4                    *p=i_receive(); 
 186   4                    i_stop(); 
 187   4                    delay(); 
 188   4                    return(1); 
 189   4                  } 
 190   3                  else 
 191   3                    { 
 192   4                      i_stop(); 
 193   4                      delay(); 
 194   4                      return(0); 
 195   4                    } 
 196   3              } 
 197   2              else 
 198   2                { 
 199   3                  i_stop(); 
 200   3                  delay(); 
 201   3                  return(0); 
 202   3                } 
 203   2          } 
 204   1          else 
 205   1            { 
 206   2              i_stop(); 
 207   2              delay(); 
 208   2              return(0); 
 209   2            } 
 210   1      } 
 211            
 212            
 213          void main(void) 
 214          { 
 215   1        P1=0xff; 
 216   1        timecount=0; 
 217   1        displaycount=0;  
 218   1        
 219   1        TMOD=0x21; 
 220   1        TH1=0x06; 
 221   1        TL1=0x06; 
 222   1        TR1=1; 
 223   1        ET1=1; 
 224   1        ET0=1; 
 225   1        EA=1; 
 226   1        
 227   1        
 228   1        if(start_temperature_T())                     //向DS1624发送启动A/D温度转换命令,成功则启动T0定时1s。 
 229   1          { 
 230   2            secondflag=0; 
 231   2            secondcount=0; 
 232   2            TH0=55536/256; 
 233   2            TL0=55536%256; 
 234   2            TR0=1;      
 235   2          } 
 236   1        
 237   1        while(1) 
 238   1          { 
 239   2            if(secondflag==1) 
 240   2              { 
 241   3                secondflag=0; 
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 5   

 242   3                TR0=0; 
 243   3                if(read_temperature_T(temperdata))    //T0定时1s时间到,读取DS1624的温度值 
 244   3                  { 
 245   4                    for(x=0;x<8;x++) 
 246   4                      { 
 247   5                        displaybuffer[x]=16; 
 248   5                      } 
 249   4                    x=2; 
 250   4                    result=temperdata[1];                     //将读取的温度值进行数据处理,并送到显示缓冲区 
 251   4                    while(result/10) 
 252   4                      { 
 253   5                        displaybuffer[x]=result%10; 
 254   5                        result=result/10; 
 255   5                        x++; 
 256   5                      } 
 257   4                    displaybuffer[x]=result; 
 258   4                    result=temperdata[0]; 
 259   4                    result=result>>3; 
 260   4                    displaybuffer[0]=(dotcode[result])%10; 
 261   4                    displaybuffer[1]=(dotcode[result])/10;              
 262   4                    if(start_temperature_T()) //温度值数据处理完毕,重新启动DS1624开始温度转换 
 263   4                      { 
 264   5                        secondflag=0; 
 265   5                        secondcount=0; 
 266   5                        TH0=55536/256; 
 267   5                        TL0=55536%256; 
 268   5                        TR0=1;                        
 269   5                      } 
 270   4                  } 
 271   3              } 
 272   2          } 
 273   1      } 
 274            
 275            
 276          void t0(void) interrupt 1 using 0                       //T0用于定时1s时间到 
 277          { 
 278   1        secondcount++; 
 279   1        if(secondcount==100) 
 280   1          { 
 281   2            secondcount=0; 
 282   2            secondflag=1; 
 283   2          } 
 284   1        TH0=55536/256; 
 285   1        TL0=55536%256; 
 286   1      } 
 287            
 288            
 289          void t1(void) interrupt 3 using 0                       //T1定时1ms用数码管的动态刷新 
 290          { 
 291   1        timecount++; 
 292   1        if(timecount==4)                                      //T1定时1ms到 
 293   1          { 
 294   2            timecount=0; 
 295   2                 P2=0xff;
 296   2            if (displaycount==5) 
 297   2              { 
 298   3                P0=(displaycode[displaybuffer[7-displaycount]] | 0x80);       //在该位同时还要显示小数点 
 299   3              } 
 300   2              else 
 301   2                { 
 302   3                  P0=displaycode[displaybuffer[7-displaycount]]; 
 303   3                } 
C51 COMPILER V8.02   TEMPER                                                                08/21/2007 01:09:34 PAGE 6   

 304   2            P2=displaybit[displaycount]; 
 305   2            displaycount++; 
 306   2            if(displaycount==8) 
 307   2              { 
 308   3                displaycount=0; 
 309   3              } 
 310   2          } 
 311   1      } 
 312          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    567    ----
   CONSTANT SIZE    =     57    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     29       3
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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