
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源
去关联
STC15W408读取HX711称重数据串口发送
#include "STC15Fxxxx.H"
#include <stdio.h>
#include <string.h>
unsigned long HX711_Buffer = 0;
unsigned long Weight_Maopi = 0;
long Weight_Shiwu = 0;
unsigned char flag = 0;
bit Flag_ERROR = 0;
sbit HX711_DOUT=P1^1;
sbit HX711_SCK=P3^7;
//校准参数
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
//当发现测试出来的重量偏大时,增加该数值。
//如果测试出来的重量偏小时,减小改数值。
//该值可以为小数
#define GapValue 430
//****************************************************
//延时函数
//****************************************************
void Delay__hx711_us(void)
{
_nop_();
_nop_();
}
//****************************************************
//读取HX711
//****************************************************
unsigned long HX711_Read(void) //增益128
{
unsigned long count;
unsigned char i;
HX711_DOUT=1;
Delay__hx711_us();
HX711_SCK=0;
count=0;
EA = 1;
while(HX711_DOUT);
EA = 0;
for(i=0;i<24;i++)
{
HX711_SCK=1;
count=count<<1;
HX711_SCK=0;
if(HX711_DOUT)
count++;
}
HX711_SCK=1;
count=count^0x800000;//第25个脉冲下降沿来时,转换数据
Delay__hx711_us();
HX711_SCK=0;
return(count);
}
//****************************************************
//称重
//****************************************************
void Get_Weight()
{
Weight_Shiwu = HX711_Read();
Weight_Shiwu = Weight_Shiwu - Weight_Maopi; //获取净重
if(Weight_Shiwu > 0)
{
Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/GapValue); //计算实物的实际重量
if(Weight_Shiwu > 5000) //超重报警
{
Flag_ERROR = 1;
}
else
{
Flag_ERROR = 0;
}
}
else
{
Weight_Shiwu = 0;
Flag_ERROR = 1; //负重报警
}
}
//****************************************************
//获取毛皮重量
//****************************************************
void Get_Maopi()
{
Weight_Maopi = HX711_Read();
}
//****************************************************
//MS延时函数(12M晶振下测试)
//****************************************************
void Delay_ms(unsigned int n)
{
unsigned int i,j;
for(i=0;i<n;i++)
for(j=0;j<123;j++);
}
void Uart_Init()
{
SCON = 0x50;
AUXR |= 0x01;
AUXR |= 0x04;
T2L = 0xE8;
T2H = 0xFF;
AUXR |= 0x10;
ES=1;
EA=1;
TI=1;
}
void Send_Word(unsigned char *p) //发送字符串
{
while(*p)
{
SBUF=*(p++);
while(TI==0)
{
;
;
;
};
TI=0;
}
}
void Send_ASCII(unsigned char c) //发送一个字符
{
TI=0;
SBUF=c;
while(TI==0);
TI=0;
}
//****************************************************
//主函数
//****************************************************
void main()
{
Uart_Init();
Delay_ms(3000); //延时,等待传感器稳定
Get_Maopi(); //称毛皮重量
while(1){
EA = 0;
Get_Weight(); //称重
EA = 1;
//显示当前重量
if( Flag_ERROR == 1)
{
Send_Word("ERROR\n");
}else{
Send_ASCII(Weight_Shiwu/1000 + 0X30);
Send_ASCII(Weight_Shiwu%1000/100 + 0X30);
Send_ASCII(Weight_Shiwu%100/10 + 0X30);
Send_ASCII(Weight_Shiwu%10 + 0X30);
Send_Word(" g\n");
}
}
}