历史上的今天
今天是:2024年11月23日(星期六)
2019年11月23日 | HX711电子秤称重模块配送资料(加中值滤波的单片机源码)
2019-11-23 来源:51hei
电子秤注意!!!!!!
1.程序中采用P16、P17口作为HX711的数据口。
2.每个传感器的系数不一样,第一次测量必须修正传感器的系数。(修正系数HX711_xishu)
修正方法:
例如1000g砝码称出来是934g,则HX711_xishu=(原值)*1000/934;


电路原理图如下:
电子称 LCD1602(加中值滤波)单片机源程序如下:
#include #include #define uchar unsigned char //无符号字符型 宏定义 变量范围0~255 #define uint unsigned int //无符号整型 宏定义 变量范围0~65535 #define ulong unsigned long sbit rs=P0^5 //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit rw=P0^6; //寄存器选择信号 H:数据寄存器 L:指令寄存器 sbit e =P0^7; //片选信号 下降沿触发 sbit hx711_dout=P1^7; sbit hx711_sck =P1^6; sbit beep = P3^0; //蜂鸣器 sbit K1 = P3^5; //加 sbit K2 = P3^6; //长按去皮键 sbit K3 = P3^7; //减 uchar K2_num; uint time1; uint time2; uint time3; long weight; //实际重量值 long qi_weight; //皮重 ulong warn_weight; ulong HX711_xishu=35386; //这是一个修正系数,例如1000g砝码称出来是934g,则HX711_xishu=原数据*1000/934; #define MEDIAN_LEN 5 //中值滤波的滤波长度,一般取奇数 #define MEDIAN 3 //中值在滤波数组中的位置 ulong buffer[MEDIAN_LEN]; //中值滤波的数据缓存 int medleng = 0; //一组中值滤波数据中,进入滤波缓存的数据个数 ulong xd,xd1; //数据对比大小中间变量 /*************** 删除键 去皮 价格清零 ***************/ /******1ms延时函数***11.0592M晶振**************/ void delay_1ms(uint q) { ulong i,j; for(i=0;i } /******************************************************************** * 名称 : delay_uint() * 功能 : 小延时。 * 输入 : 无 * 输出 : 无 ***********************************************************************/ void delay_uint(uint q) { while(q--); } /******************************************************************** * 名称 : write_com(uchar com) * 功能 : 1602命令函数 * 输入 : 输入的命令值 * 输出 : 无 ***********************************************************************/ void write_com(uchar com) { e=0; rs=0; rw=0; P2=com; delay_uint(3); e=1; delay_uint(25); e=0; } /******************************************************************** * 名称 : write_data(uchar dat) * 功能 : 1602写数据函数 * 输入 : 需要写入1602的数据 * 输出 : 无 ***********************************************************************/ void write_data(uchar dat) { e=0; rs=1; rw=0; P2=dat; delay_uint(3); e=1; delay_uint(25); e=0; } /***********************lcd1602上显示这字符函数************************/ void write_string(uchar hang,uchar add,uchar *p) { if(hang==1) write_com(0x80+add); else write_com(0x80+0x40+add); while(1) { if(*p == ' for(j=0;j<11;j++);




