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

📄 baro.lst

📁 51单片机C语言常用模块与综合系统设计实例精讲
💻 LST
字号:
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE BARO
OBJECT MODULE PLACED IN baro.OBJ
COMPILER INVOKED BY: e:\Keil\C51\BIN\C51.EXE baro.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /***************************************************
   2          7段数码管动态显示程序
   3          ***************************************************/
   4          #include <reg52.h>
   5          #include <stdio.h>
   6          #include <stdlib.h>
   7          #include <absacc.h>
   8          #include <ctype.h>                   
   9          #include <string.h>
  10          #include <stddef.h>
  11          #include <intrins.h>
  12          #include <absacc.h>
  13          #include <stdarg.h>
  14          
  15          
  16          #define TIMER0H 0xFF;
  17          #define TIMER0L 0xE9;
  18          sbit MCLK=P1^4 ;
  19          sbit SCLK=P1^5 ;
  20          sbit DI=P1^6 ;
  21          sbit DOUT=P1^7 ;
  22          
  23          
  24          #define CLKDELAY 5
  25          #define RDINTERVAL 100
  26          #define FILTERPARA 0.125
  27          
  28          ////****          SPI接口DI线读不同内容时的输出数据×                       ****////
  29          const unsigned char SPI_RST[21]={1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0,0,0,0};
  30          const unsigned char SPI_D1[12]={1,1,1,1,0,1,0,0,0,0,0,0};
  31          const unsigned char SPI_D2[12]={1,1,1,1,0,0,1,0,0,0,0,0};
  32          const unsigned char SPI_W1[12]={1,1,1,0,1,0,1,0,1,0,0,0};
  33          const unsigned char SPI_W2[12]={1,1,1,0,1,0,1,1,0,0,0,0};
  34          const unsigned char SPI_W3[12]={1,1,1,0,1,1,0,0,1,0,0,0};
  35          const unsigned char SPI_W4[12]={1,1,1,0,1,1,0,1,0,0,0,0};
  36          ////****          气压高度转换表                   ****////
  37          const unsigned char SPI_HT[23][4]={     1000, 1130, 12256, 16212 ,
  38                                                                                          1130, 1300, 10758, 15434 ,
  39                                                                                          1300, 1500, 9329, 14541 ,
  40                                                                                          1500, 1730, 8085, 13630 ,
  41                                                                                          1730, 2000, 7001, 12722 ,
  42                                                                                          2000, 2300, 6069, 11799 ,
  43                                                                                          2300, 2650, 5360, 10910 ,
  44                                                                                          2650, 3000, 4816, 9994 ,
  45                                                                                          3000, 3350, 4371, 9171 ,
  46                                                                                          3350, 3700, 4020, 8424 ,
  47                                                                                          3700, 4100, 3702, 7737 ,
  48                                                                                          4100, 4500, 3420, 7014 ,
  49                                                                                          4500, 5000, 3158, 6346 ,
  50                                                                                          5000, 5500, 2908, 5575 ,
  51                                                                                          5500, 6000, 2699, 4865 ,
  52                                                                                          6000, 6500, 2523, 4206 ,
  53                                                                                          6500, 7100, 2359, 3590 ,
  54                                                                                          7100, 7800, 2188, 2899 ,
  55                                                                                          7800, 8500, 2033, 2151 ,
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 2   

  56                                                                                          8500, 9200, 1905, 1456 ,
  57                                                                                          9200, 9700, 1802, 805 ,
  58                                                                                          9700, 10300, 1720, 365 ,
  59                                                                                          10300, 11000, 1638, -139
  60                                                                                  };
  61          unsigned int d1,d2,w1,w2,w3,w4;
  62          ////****         SPI口CLK延迟宽度子程序                      ****????
  63          void spi_dly(int num)
  64          {  int i;
  65   1      
  66   1              for(i=0;i<num;i++)
  67   1              {       i=i;
  68   2         }
  69   1      }
  70          ////****         SPI口初始化                  **
  71          void spi_set(void)
  72          {                       
  73   1         SCLK=0;
  74   1         DI=0;
  75   1      
  76   1      }
  77          void spi_reset(void)
  78          {  int i;
  79   1      
  80   1              spi_dly(10);
  81   1              for(i=0;i<21;i++)
  82   1         {   
  83   2              DI=SPI_RST[i];
  84   2             spi_dly(CLKDELAY);
  85   2             SCLK=1;
  86   2             spi_dly(CLKDELAY);
  87   2             SCLK=0;
  88   2         }
  89   1         spi_dly(CLKDELAY);
  90   1         spi_dly(CLKDELAY*10);
  91   1      }
  92          unsigned int spi_rdd(unsigned char num)
  93          {  unsigned int retval;
  94   1         int i;
  95   1         unsigned char rdbit;
  96   1      
  97   1              spi_dly(CLKDELAY);
  98   1              for(i=0;i<12;i++)
  99   1         {   if(num==0)
 100   2              {       
 101   3              DI=SPI_D1[i];
 102   3              }
 103   2              else if(num==1)
 104   2              {  
 105   3              DI=SPI_D2[i];
 106   3              }
 107   2              else
 108   2              {       retval=0;
 109   3                      return 0;
 110   3              }
 111   2             spi_dly(CLKDELAY);
 112   2             SCLK=1;;
 113   2             spi_dly(CLKDELAY);
 114   2             SCLK=0;
 115   2         }
 116   1         spi_dly(CLKDELAY);
 117   1        // wait adc conversion
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 3   

 118   1        
 119   1        rdbit=DOUT;
 120   1        while(rdbit==1)
 121   1        {   
 122   2                      rdbit=DOUT;
 123   2        }
 124   1        retval=0;
 125   1        for(i=0;i<16;i++)
 126   1        {   SCLK=1;
 127   2              spi_dly(CLKDELAY);
 128   2            rdbit=DOUT;
 129   2            SCLK=0;
 130   2              spi_dly(CLKDELAY);
 131   2            if(rdbit==0)
 132   2            {   retval=retval+0;
 133   3            }
 134   2            else
 135   2            {   retval=retval+1;
 136   3            }
 137   2            if(i<15)
 138   2             {
 139   3              retval=retval<<1;
 140   3             }
 141   2        }
 142   1         return retval;
 143   1      }
 144          unsigned int spi_rdw(unsigned char num)
 145          {  unsigned int retval;
 146   1         int i;
 147   1         unsigned char rdbit;
 148   1      
 149   1              spi_dly(CLKDELAY);
 150   1              for(i=0;i<12;i++)
 151   1         {   if(num==0)
 152   2              {       
 153   3              DI=SPI_W1[i];
 154   3              }
 155   2              else if(num==1)
 156   2              {  
 157   3              DI=SPI_W2[i];
 158   3              }
 159   2            else if(num==2)
 160   2              {  
 161   3              DI=SPI_W3[i];;
 162   3                      }
 163   2            else if(num==3)
 164   2              {  DI=SPI_W4[i];
 165   3              }
 166   2              else
 167   2              {       retval=0;
 168   3                      return 0;
 169   3              }
 170   2             spi_dly(CLKDELAY);
 171   2             SCLK=1;
 172   2             spi_dly(CLKDELAY);
 173   2             SCLK=0;;
 174   2         }
 175   1         spi_dly(CLKDELAY);
 176   1         SCLK=1;
 177   1         spi_dly(CLKDELAY);
 178   1         SCLK=0;
 179   1         for(i=0;i<10;i++)
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 4   

 180   1         {    rdbit=DOUT;
 181   2         }
 182   1         retval=0;
 183   1        for(i=0;i<16;i++)
 184   1        {   SCLK=1;
 185   2              spi_dly(CLKDELAY);
 186   2            rdbit=DOUT;
 187   2            SCLK=0;
 188   2              spi_dly(CLKDELAY);
 189   2            if(rdbit==0)
 190   2            {   retval=retval+0;
 191   3            }
 192   2            else
 193   2            {   retval=retval+1;
 194   3            }
 195   2            if(i<15)
 196   2             {
 197   3              retval=retval<<1;
 198   3             }
 199   2        }
 200   1         return retval;
 201   1      }
 202          float spi_h(float p)
 203          {  int i,pos,flag;
 204   1         float h;
 205   1      
 206   1              flag=0;
 207   1         for(i=0;i<23;i++)
 208   1         {  if((p>=SPI_HT[i][0])&&(p<=SPI_HT[i][1]))
 209   2              {    pos=i;
 210   3                 flag=1;
 211   3                 break;
 212   3            }
 213   2         }
 214   1         if(flag!=1)
 215   1         {  if(p<SPI_HT[0][0])
 216   2              {  pos=0;
 217   3            }
 218   2            else if(p>SPI_HT[22][1])
 219   2            {  pos=22;
 220   3            }
 221   2            else
 222   2            { pos=0;
 223   3            }
 224   2         }
 225   1         h=SPI_HT[pos][3]-(p-SPI_HT[pos][0])*SPI_HT[pos][2]/2048;
 226   1         return h;
 227   1      }
 228          void spi_proc(void)
 229          {  unsigned int c1,c2,c3,c4,c5,c6;
 230   1              long utmp;
 231   1         float dt,temp,off,sens,x,p,h;
 232   1         float temp2,p2;
 233   1      
 234   1              //printf("D1=%x D2=%x W1=%x W2=%x W3=%x W4=%x\r\n",d1,d2,w1,w2,w3,w4);
 235   1         c1=(w1&0xfffe)>>1;
 236   1         c2=((w3&0x003f)<<6)+((w4&0x003f)>>0);
 237   1         c3=((w4&0xffc0)>>6);
 238   1         c4=((w3&0xffc0)>>6);
 239   1         c5=((w1&0x0001)<<10)+((w2&0xffc0)>>6);
 240   1         c6=(w2&0x003f);
 241   1         //printf("C1=%x C2=%x C3=%x C4=%x C5=%x C6=%x\r\n",c1,c2,c3,c4,c5,c6);
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 5   

 242   1         utmp=8*c5+20224;
 243   1         dt=(float)(d2-utmp);
 244   1         temp=200+dt*(c6+50)/1024;
 245   1         off=c2*4+((c4-512)*dt)/4096;
 246   1         sens=c1+(c3*dt)/1024+24567;
 247   1         x=(sens*(d1-7168))/16384-off;
 248   1         p=x*10/32+250*10;
 249   1      
 250   1         if(temp>450)
 251   1         {    temp2=3*(c6+24)*(450 - temp)*(450-temp)/1048576;
 252   2                      p2=temp2*(p-10000)/8192;
 253   2         }
 254   1         else if(temp<200)
 255   1         {  temp2=11*(c6+24)*(200-temp)*(200-temp)/1048576;
 256   2                      p2=3*temp2*(p-3500)/16384;
 257   2         }
 258   1         else
 259   1         {  temp2=0;
 260   2              p2=0;
 261   2         }
 262   1         temp=temp-temp2;
 263   1         p=p-p2;
 264   1         h=spi_h(p);
 265   1      }
 266          void time0(void) interrupt 1 
 267          {       
 268   1              
 269   1              TL0 = TIMER0L;
 270   1              TH0 = TIMER0H;
 271   1      }
 272          /*  初始化子程序  */
 273          void init(void)
 274          {       
 275   1      //timer0 init
 276   1              TL0 = TIMER0L;
 277   1              TH0 = TIMER0H;
 278   1              TR0=1;
 279   1              ET0=1;//test
 280   1      
 281   1              TMOD=0x21;
 282   1      // irq init
 283   1              EX0=0;
 284   1              IT0=0;
 285   1              EX1=0;  
 286   1              IT1=0;
 287   1      
 288   1              EA=1;
 289   1      
 290   1      }
 291          /* 主程序入口  */
 292          int main(void)
 293          {       init();
 294   1      spi_set();
 295   1              
 296   1              while(1)
 297   1              {
 298   2               spi_reset();
 299   2                spi_dly(RDINTERVAL);
 300   2               w1=spi_rdw(0);
 301   2                spi_dly(RDINTERVAL);
 302   2               w2=spi_rdw(1);
 303   2                spi_dly(RDINTERVAL);
C51 COMPILER V7.50   BARO                                                                  08/26/2006 16:36:54 PAGE 6   

 304   2               w3=spi_rdw(2);
 305   2                spi_dly(RDINTERVAL);
 306   2               w4=spi_rdw(3);
 307   2                spi_dly(RDINTERVAL);
 308   2               d1=spi_rdd(0);
 309   2                spi_dly(RDINTERVAL);
 310   2               d2=spi_rdd(1);
 311   2                spi_dly(RDINTERVAL);
 312   2              spi_proc();
 313   2              }
 314   1      }
 315          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2274    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =    197      65
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -