//气压模块为红色模块,传感器型号未知,其信号放大器型号为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<FilterN){
      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<FilterWin;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

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

  1. 单片机数码管显示自行车里程c语言,基于51单片机的自行车里程计速度计设计.doc...

    信电学院课程设计报告 题目: 基于51单片机的自行车里程计/速度计设计 学生姓名 学 号 班 级 专 业 指导教师 说 明 1. 课程设计文本材料 2. 学生根据指导教师下达的任务书.指导书完成课程设 ...

  2. 利用51单片机+0.96寸iic接口oled显示图片或动图

    利用51单片机+0.96寸iic接口oled显示图片或动图 前言:之前讲过如何使用oled显示数字以及字符,但并未讲述如何显示BMP格式的图片, 这篇将在之前的基础上加以封装一些函数用来显示图片 硬件 ...

  3. 基于51单片机的多路温度检测调节串口传输系统

    本设计基于51单片机的多路温度检测调节串口传输系统(仿真+源码+视频讲解) 仿真:proteus8.9 程序编译器:keil 4 编程语言:C语言 编号C0009 [腾讯文档]C0009 网盘链接 资 ...

  4. 【031】基于51单片机的超声波倒车雷达系统(带温度显示补偿)Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计一份: (2).基于51单片机的超声波倒车雷达系统(带温度显示补偿)系统proteus仿真设计 ...

  5. 基于51单片机驱动HC-SR04超声波模块(LCD1602显示)

    基于51单片机驱动HC-SR04超声波模块(LCD1602显示) 一.基本参数 二.通信时序 三.部分代码展示 四.实际效果 总结 一.基本参数 点击图片购买 HC- SR04+是一款宽电压工作的超声 ...

  6. 两位数码管30秒倒计时c语言,基于51单片机共阴两位数码管显示倒计时

    <基于51单片机共阴两位数码管显示倒计时>由会员分享,可在线阅读,更多相关<基于51单片机共阴两位数码管显示倒计时(2页珍藏版)>请在人人文库网上搜索. 1.基于51单片机共阴 ...

  7. 51单片机LCD1602 定时器时钟 实现年月日时分秒显示

    实现功能:利用51单片机的定时器原理制作时钟,显示使用LCD1602,可以显示时分秒年月日和星期 ,识别平年闰年,按键可调整时间日期,整点报时. 1.定时器中断实现时钟基本原理 若系统晶振为12MHZ ...

  8. 基于51单片机的简易电子计算器——有温度显示和万年历等额外功能

    基于51单片机的简易电子计算器--有温度显示和万年历等额外功能 设计实际所实现的功能 模式一可显示日期.时钟.温度,模式二可进行计算器的计算,且显示日期温度模式和计算器模式可随意切换,模式三可以滚动显 ...

  9. 51单片机4x4矩阵键盘扫描+数码管显示

    51单片机4x4矩阵键盘扫描+数码管显示 个位闪烁感在这篇文章已经修复<51单片机4x4矩阵键盘扫描+数码管显示(二)(修bug篇)> 材料:AT89C52.2位数码管.74HC595. ...

最新文章

  1. python format 格式化字符串
  2. SCSI软件层对性能的影响
  3. ADODB.Connection 错误 '800a0e7a' 未找到提供程序。该程序可能未正确安装。解决办法...
  4. UML之构件图和部署图
  5. Tesla超越谷歌无人驾驶汽车雄心的背后,是以色列公司Mobileye
  6. 089_DOM节点动态创建、添加和删除
  7. 2021暑假每日一题 【week1 完结】
  8. uvalive5096(积分题)
  9. vuecli启动的服务器位置,VUE启动流程vue-cli
  10. 进销存中多计量单位解决方法
  11. 山东理工oj答案java_众数问题(山东理工OJ)
  12. 缺芯下的新造车“月考”成绩单来了!
  13. Python 按行读取文本文件 缓存 和 非缓存实现
  14. dataframe 查找特定值_C++初级编程NOIP题:11H1544: 查找特定的值
  15. 使用阿里云邮件推送服务群发邮件
  16. BIOS的全局变量gST gBS gDS
  17. mac被限制什么意思_苹果ip完美解决电脑ip被限制问题
  18. 科林明伦杯”哈尔滨理工大学第十届程序设计竞赛(同步赛)
  19. 2018年互联网技术岗(数据分析)暑期实习面试经验
  20. 使用百度网盘下载ed2k文件

热门文章

  1. jquery.fileupload.js插件使用--单视频或音频上传预览
  2. http、TCP、IP的形象比喻
  3. Win10日语输入法切换快捷键
  4. python3精要(39)-指数分布
  5. 拍脑袋建中小企业研发中心,该何去何从?
  6. 云智原生定义紫光云3.0,全面提速数字化转型升级
  7. Lr预设(手机+电脑):时尚Ins人像旅行风光电影大师Lightroom调色滤镜预设
  8. 数据可视化基础——js篇
  9. 电脑服务器显示一个f盘损坏,F盘异常如何修复呢?
  10. 西瓜视频破解js爬虫