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