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

📄 ad574.lst

📁 本研究设计的智能压力传感器系统具有成本低、可靠性好、响应速度快、智能化程度高等特点
💻 LST
字号:
C51 COMPILER V7.50   AD574                                                                 02/28/2008 18:26:20 PAGE 1   


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

line level    source

   1          #include<reg52.h>
   2          #include<db18b20.h>//DB18B20数字温度传感器模块
   3          #include<hd7279.h> //智能显示驱动模块
   4          #include<absacc.h>
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          #define ADCOM XBYTE[0XFFF8]  //A0=0,R/~C=0,~CS=0
   8          #define ADLO XBYTE[0XFFFB]  //A0=1,R/~C=1,~CS=0
   9          #define ADHI XBYTE[0XFFF9]  //A0=0,R/~C=1,~CS=0
  10          //#define dT -10  //运放零点输入及AD转换修正值
  11          sbit r=P3^7;
  12          sbit w=P3^6;
  13          sbit adbusy=P3^0;
  14          uint ADLast,ADMid,ADNext,Result;
  15          uint ad574(void);
  16          void delayms(uint k)
  17          {
  18   1        uchar i;
  19   1        while(k--)
  20   1        for(i=0;i<125;i++);
  21   1      }
  22          //A/D转换模块
  23          uint ad574(void)
  24          {
  25   1        uint result0,result1;
  26   1        r=0;
  27   1        w=0;
  28   1        ADCOM=0;
  29   1        while(adbusy==1);     //adbusy=0,表示一次转换结束
  30   1        result0=ADHI;
  31   1        result1=ADLO;
  32   1        result0=(uint)(result0<<4);//高八位
  33   1        result1=(uint)((result1&0xf0)>>4);//低四位
  34   1        return(result0+result1);      //输出12位
  35   1      //return ((uint)(ADHI<<4)+(ADLO&0xf0)>>4);
  36   1      }
  37          //递推滤波和加权平均滤波组成复合滤波
  38          void Filter()
  39          { uint k=0;
  40   1        uchar i;
  41   1        for(i=0;i<15;i++)
  42   1       {
  43   2         ADLast=ADMid;
  44   2         ADMid=ADNext;
  45   2         ADNext=AD574();
*** WARNING C206 IN LINE 45 OF AD574.C: 'AD574': missing function-prototype
  46   2         if((ADMid>ADLast&&ADMid>ADNext)||(ADMid<ADLast&&ADMid<ADNext))
  47   2           Result=ADMid=(ADLast+ADMid+ADNext+Result*5)/8; //可信度大的数权值大
  48   2           // ADMid 处于 ADLast 和 ADNext 中间
  49   2         else          
  50   2           Result=(ADLast+ADMid*3+ADNext+Result*3 )/8;
  51   2         delayms(20);
  52   2         k+=Result;
  53   2       }
  54   1       Result=k/15;
C51 COMPILER V7.50   AD574                                                                 02/28/2008 18:26:20 PAGE 2   

  55   1      }
  56          
  57          //非线性校正程序
  58          uint Linearity()
  59          {
  60   1      //  code uint DacCode[5]={dT+0,dT+1024,dT+2048,dT+3072,dT+4096};
  61   1        code uint DacCode[11]={50,322,741,1100,1526,1873,2303,2664,3034,3425,4096};
  62   1       // uchar k1,k2,k3,k4,b1,b2,b3,b4;
  63   1        uint y;
  64   1        Filter();
  65   1        if(Result>DacCode[0]&&Result<=DacCode[1])
  66   1          y=0.5017*Result+39;
  67   1        else if(Result>DacCode[1]&&Result<=DacCode[2])
  68   1          y=0.4773*Result+46;
  69   1        else if(Result>DacCode[2]&&Result<=DacCode[3])
  70   1          y=0.5571*Result-13;
  71   1        else if(Result>DacCode[3]&&Result<=DacCode[4])
  72   1          y=0.4695*Result+84;
  73   1        else if(Result>DacCode[4]&&Result<=DacCode[5])
  74   1          y=0.5764*Result-80;
  75   1        else if(Result>DacCode[5]&&Result<=DacCode[6])
  76   1          y=0.4651*Result+129;
  77   1        else if(Result>DacCode[6]&&Result<=DacCode[7])
  78   1          y=0.5540*Result-76;
  79   1        else if(Result>DacCode[7]&&Result<=DacCode[8])
  80   1          y=0.5405*Result-40;
  81   1        else if(Result>DacCode[8]&&Result<=DacCode[9])
  82   1          y=0.5115*Result+48;
  83   1        else if(Result>DacCode[9]&&Result<=DacCode[10])
  84   1          y=0.5076*Result+61;
  85   1        else y=0;
  86   1        return(y);
  87   1      }
  88          //压力显示子程序
  89          void DisplayP(void)
  90          { uint P;
  91   1        uchar p1,p2,p3,p4;
  92   1        P=Linearity();
  93   1        p1=(uint)P%10;//小数点第三位
  94   1        p2=(uint)P%100/10;//小数点第二位
  95   1        p3=(uint)P%1000/100;// 小数点第一位
  96   1        p4=(uint)P%10000/1000;// 个位 
  97   1        write7279(DECODE1,p1);
  98   1        write7279(DECODE1+1,p2);
  99   1        write7279(DECODE1+2,p3);
 100   1        write7279(DECODE1+3,0x80+p4);
 101   1      }
 102          
 103          //温度显示子程序
 104          void DisplayTemp(void)
 105          {
 106   1        uchar temp1,temp2,temp3;
 107   1        delayms(1);           // 延时1ms
 108   1        convert();            // 启动温度转换,需要750ms
 109   1       // delayms(1000);      // 延时1s
 110   1        RdTemp();             // 读取温度     
 111   1        temp1=tplsb%100/10;//小数点1位
 112   1        temp2=tpmsb%10;//个位
 113   1        temp3=tpmsb%100/10;//十位
 114   1        write7279(DECODE1+4,0X0C); //显示温度符号
 115   1        write7279(DECODE1+5,temp1);//显示小数点后一位
 116   1        write7279(DECODE1+6,0x80+temp2);//显示个位
C51 COMPILER V7.50   AD574                                                                 02/28/2008 18:26:20 PAGE 3   

 117   1        write7279(DECODE1+7,temp3); //显示十位 
 118   1      }
 119          /*
 120          //0~4096数字量输出显示
 121          void DisplayData(void)
 122          {
 123            uchar ge,ten,hun,thou;
 124            Filter();
 125            ge=Result%10;
 126            ten=Result%100/10;
 127            hun=Result%1000/100;
 128            thou=Result%10000/1000; 
 129            write7279(DECODE1,ge);
 130            write7279(DECODE1+1,ten);
 131            write7279(DECODE1+2,hun);
 132            write7279(DECODE1+3,thou);   
 133          } 
 134          
 135          //电压显示子程序
 136          void DisplayVot(void)
 137          {
 138            uchar vot1,vot2,vot3,vot4;
 139            float V; 
 140            Filter();
 141            V=Result*10.0/4.096+0.5;
 142            vot1=(uint)V%10;//小数点第三位
 143            vot2=(uint)V%100/10;//小数点第二位
 144            vot3=(uint)V%1000/100;// 小数点第一位
 145            vot4=(uint)V%10000/1000;// 个位 
 146            write7279(DECODE1,vot1);
 147            write7279(DECODE1+1,vot2);
 148            write7279(DECODE1+2,vot3);
 149            write7279(DECODE1+3,0x80+vot4);   
 150          }
 151          */
 152          //主程序
 153          main()
 154          { 
 155   1        ADLast=AD574();
 156   1        ADMid=AD574();
 157   1        ADNext=AD574();
 158   1        Result=(ADLast+ADMid+ADNext)/3;
 159   1        while(1)
 160   1        {
 161   2          DisplayTemp();
 162   2      //      DisplayData();
 163   2      //    DisplayVot();
 164   2              DisplayP();
 165   2        }
 166   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1666    ----
   CONSTANT SIZE    =     22    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12      17
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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