打印
[其他ST产品]

AD转换N次采样去最大最小求平均算法

[复制链接]
479|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hehhehee|  楼主 | 2023-5-30 23:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD转换N次采样去最大最小求平均算法

<p>#include "STC15.H"</p><p>#include "delay.h"</p><p>#include "STCAD.H"</p><p>#include "IO.C"</p><p>
</p><p>void AD_Init()     //AD初始化</p><p>{</p><p>    P1M1=0xF0;     //设置相应的I/O口为高阻    P1.4-P1.5-P1.6-P1.7</p><p>    P1M0=0x00;</p><p>    ADC_RES=0;</p><p>    ADC_RESL=0;     //ADC转换结果寄存器清0</p><p>    P1ASF=0xF0;     //设置相应的I/O口为ADC模拟通道   P1.4-P1.5-P1.6-P1.7</p><p>    ADC_CONTR |= ADC_POWER;     //打开AD转换电源</p><p>    ADC_CONTR |= ADC_SPEEDH;    //设置AD转换速度</p><p>    delay(1);</p><p>}</p><p>
</p><p>uint ADC_result(uchar x)    //AD转换结果</p><p>{</p><p>    uint result;</p><p>    ADC_CONTR &= 0xF8;    //清通道</p><p>    ADC_CONTR |= x;    //切换通道,x为通道,如x=5,就是P1.5</p><p>    delay_us(30);    //切换通道延时</p><p>    ADC_CONTR |= ADC_START;   //开启AD转换</p><p>    delay_us(4); </p><p>    while(!(ADC_CONTR & ADC_FLAG));   //等待AD转换结束</p><p>    ADC_CONTR &= ~ADC_FLAG;    //清除AD转换结束标志位</p><p>    result = ADC_RES << 2;     //ADC高8位结果左移2位</p><p>    result = result | ADC_RESL;     //合成10位转换结果</p><p>    return result;    //返回转换结果</p><p>}</p><p>
</p><p>uint U(uchar x)    //测量电压40次去除最大最小求平均</p><p>{</p><p>    uint U[40],min,max,S;</p><p>    uchar i;</p><p>    </p><p>    for(i=0;i<40;i++)</p><p>    {</p><p>        U[i]=ADC_result(x);   //获取x通道ADC结果</p><p>    }</p><p>    </p><p>    for(i=1,min=U[0];i<40;i++)</p><p>    {</p><p>          if(U[i]小于min)   min=U[i];</p><p>    }//求最小值</p><p>    </p><p>    for(i=1,max=U[0];i<40;i++)</p><p>    {</p><p>        if(U[i]>max)  max=U[i];</p><p>    }//求最大值</p><p>    </p><p>    for(i=0,S=0;i<40;i++)  S+=U[i];</p><p>    S=S-min-max;</p><p>    S /= 38 ;   //减去最大最小求平均</p><p>    return S;   //返回计算结果</p><p>}</p>


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

80

主题

945

帖子

0

粉丝