• STC 51单片机54——气压水压计HX710B 串口显示均值滤波+滑窗滤波


     

     

    //气压模块为红色模块,传感器型号未知,其信号放大器型号为HX710B
    // STC15W408AS 11.0592MHz 波特率9600,串口输出大气压强值
    // STC15W408AS没有定时器1,所以用定时器2做波特率发生器
    // 采用电脑USB供电会有很大的干扰,建议采用电池或者充电宝
    #include "reg52.h"

    #define Download_command 0xf1 //功能码

    sfr AUXR = 0x8e;
    sfr IAP_CONTR   =   0xC7;   //0000,x000 EEPROM控制寄存器
    sfr T2H         =   0xD6;   //0000,0000 T2高字节
    sfr T2L         =   0xD7;   //0000,0000 T2低字节

    sbit HX710_SCK = P1^4;
    sbit HX710_DT = P1^5;

    long HX710_Buffer = 0;
    long HX710_Sum =0;
    unsigned char nn=0;
    unsigned char FilterN=50; //平均数
    unsigned char HX710_Flag=0;

    unsigned int InitV=10900; //气压值的高5位有效数字(10进制),减少初次滤波误差
    unsigned char FilterWin=60; //窗口长度
    unsigned char nw=0;
    unsigned int xdata HX710_Uint[60]; //与FilterWin数值一致
    unsigned long HX710_SumUint =0;
    unsigned int HX710_Data;


    unsigned long HX710_Read(void);
    //void Delay1Ms(void);
    void Delay(void);
    void Timer0Init(void);
    void Init_Uart(void);
    void Send(unsigned char dat);
    void Show_Long(long num);
    void Show_Pressure(long num);
    void Show_Uint(unsigned int num);

    void Uart(void)interrupt 4
    {
        unsigned char dat;
        unsigned int ISP_i,ISP_j;

    //    if(TI==1)
    //    {
    //        TI=0;
    //    }
      if(RI==1)
        {
            dat=SBUF;
            RI=0;        
            SBUF=dat; //将串口接收到的数据再次发送出去            

            if(dat==Download_command)
            {
                for(ISP_j=500;ISP_j>0;ISP_j--)
                  for(ISP_i=200;ISP_i>0;ISP_i--);
                IAP_CONTR =0x60;//软件复位,并从ISP监控程序区启动
            }
        }
    }

    void Timer0 (void) interrupt 1
    {
        unsigned int temp;
        if(nn       HX710_Sum=HX710_Sum+HX710_Read();    
            nn++;
        }
        else{
            HX710_Flag=1;
            HX710_Buffer=HX710_Sum/FilterN;
          HX710_Sum=0;
            nn=0;
            
        temp=HX710_Buffer/1000; //temp单位为10Pa
    //        HX710_Data=temp;
            HX710_SumUint=HX710_SumUint-HX710_Uint[nw]+temp;
            HX710_Data=HX710_SumUint/FilterWin;    
            HX710_Uint[nw]=temp;        
            if(nw<(FilterWin-1))
                nw++;            
            else
                nw=0;            
        }

        TL0 = 0x33;        //设置定时初始值
        TH0 = 0x89;        //设置定时初始值
    }

    void InitData(void)
    {
      unsigned char k;
        for(k=0;k       HX710_Uint[k]=InitV;
        HX710_SumUint=(unsigned long)FilterWin*InitV; //注意:此处的数据类型强制转换不可以省略!!!    
    }

    void main()
    {
    //    unsigned int i;
        InitData();
      Timer0Init();
        Init_Uart();
      while(1){
            if(HX710_Flag==1){
    //          Show_Long(HX710_Buffer);
                Show_Pressure(HX710_Buffer); //显示均值滤波
                Show_Uint(HX710_Data);  //显示均值滤波+滑窗滤波
                HX710_Flag=0;
            }
            
    //      for(i=0;i<10;i++)
    //          Delay();
    //          Delay1Ms();
    //      SBUF='Q';        
        }

    }

    完整代码打包:

    51单片机读取气压水位传感器HX710B_HX710B-单片机文档类资源-CSDN下载气压模块为红色模块,传感器型号未知,其信号放大器型号为HX710B。所用单片机为STC15W408AHX710B更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/fengyuzhe13/85354856

  • 相关阅读:
    一个IT人员面试大都会人寿的过程
    EaselJS 源码分析系列--第三篇
    当线下门店遇上AI:华为云ModelBox携手佳华科技客流分析实践
    《uni-app》移动端纯CSS实现不等高的瀑布流效果
    uniapp页面通讯-uni.$emit、uni.$on、uni.$once、uni.$off
    Java作业3
    【每天学习一点新知识】浏览器的同源策略
    音视频基础
    Himall商城类型帮助类将string类型转换成Bool类型
    如何“使用Docker快速安装Jenkins,在CentOS7”?
  • 原文地址:https://blog.csdn.net/fengyuzhe13/article/details/128172064