历史上的今天
返回首页

历史上的今天

今天是:2024年11月23日(星期六)

2019年11月23日 | HX711电子秤称重模块配送资料(加中值滤波的单片机源码)

2019-11-23 来源:51hei

电子秤注意!!!!!!
1.程序中采用P16、P17口作为HX711的数据口。
2.每个传感器的系数不一样,第一次测量必须修正传感器的系数。(修正系数HX711_xishu)

修正方法:
例如1000g砝码称出来是934g,则HX711_xishu=(原值)*1000/934;
0.jpg?imageView2/2/w/5500.jpg?imageView2/2/w/5500.jpg?imageView2/2/w/550

电路原理图如下:
0.jpg?imageView2/2/w/550

电子称 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                for(j=0;j<11;j++);

}


/********************************************************************

* 名称 : 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 == '')  break;

                write_data(*p);

                p++;

        }        

}


/***********************lcd1602初始化设置************************/

void init_1602()         //lcd1602初始化设置

{

        write_com(0x38);        //

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

}



void Delay__hx711_us(void)

{

        _nop_();

        _nop_();

}


ulong ReadCount(void)        //增益128

{

        ulong count,value = 0; 

        uchar i; 

          hx711_dout=1; 

        Delay__hx711_us();

          hx711_sck=0; 

          count=0; 

          while(hx711_dout);

          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_pizhong()          //获取皮重,秤盘重量

{

        ulong hx711_dat;

        uchar i;

        for(i=0;i        {

                hx711_dat=ReadCount();                        //HX711AD转换数据处理

                if(medleng == 0)                    //缓存的第1个元素,直接放入,不需要排序

                { 

                        buffer[0] = hx711_dat; medleng = 1; 

                }

                else                                    //插入排序算法,按从小到大的顺序排列 

                {  

                        for(i = 0; i < medleng; i ++)  

                        {

                                if( buffer[i] > hx711_dat)         // 轮询到的当前元素>AD值,则交换它们的值,xd为中间变量存放位置

                                { 

                                        xd = hx711_dat; hx711_dat = buffer[i]; buffer[i] = xd;

                                }

                        }

                        buffer[medleng] = hx711_dat;         //把轮询出较大的数放入缓存的后面.

                        medleng++;

                }                

                if(medleng >= MEDIAN_LEN)                     //ADC采样的数据个数达到中值滤波要求的数据个数

                {

                        hx711_dat = buffer[MEDIAN];            //最终重量取中值滤波数组的中间值

                        medleng = 0; 

                }

        }

        qi_weight=(uint)(hx711_dat*0.01);        

}


void get_weight()          //获取被测物体重量

{

        ulong hx711_data,a;

        ulong get,aa;        

        hx711_data=ReadCount();                   //HX711数据采集函数

        get=(uint)(hx711_data*0.01);   //HX711AD转换数据处理,数据缩小100倍

        if(get>qi_weight)

        {

推荐阅读

史海拾趣

C&K公司的发展小趣事

进入千禧年代,C&K因其卓越的市场表现和技术实力被ITT Industries收购。虽然成为了ITT的开关部门,但C&K仍然保留了自己的品牌名称。这一举措既保证了C&K能够继续享有ITT的资源支持,又使得C&K能够保持其独特的品牌文化和市场定位。

AINFO Inc公司的发展小趣事

AINFO Inc公司在追求经济效益的同时,也积极履行社会责任,关注可持续发展。公司注重环境保护和资源节约,通过采用环保材料和节能技术,降低了生产过程中的能耗和排放。同时,公司也积极参与公益事业,为社会做出了积极贡献。

请注意,以上故事仅为框架性的描述,并非AINFO Inc公司的实际发展历程。如果您需要了解该公司的具体发展情况,建议查阅相关资料或访问其官方网站。

Goldstar Electron Co Ltd公司的发展小趣事

AINFO Inc公司在初创期便明确了其在电子行业中的技术发展方向和市场定位。公司注重技术积累,投入大量资源进行研发,逐步在某一领域取得了技术突破。同时,公司对市场进行了深入调研,确定了目标客户群体和市场需求,为后续的产品开发和市场推广打下了坚实基础。

EETools公司的发展小趣事

面对快速变化的市场环境和不断涌现的新技术,EETools始终保持开放和创新的姿态。公司不仅持续关注行业动态和技术趋势,还积极探索新的业务领域和增长点。例如,EETools正在研发基于人工智能和物联网技术的嵌入式开发工具,以满足未来市场的需求。同时,公司还计划进一步拓展海外市场,提升品牌在国际市场的竞争力。这些举措将为EETools的未来发展奠定坚实的基础。

台湾丰宾(CapXon)公司的发展小趣事

面对日益激烈的市场竞争,CapXon公司始终坚持以技术创新为驱动,不断推动产业升级。公司投入大量资金用于研发新的技术和产品,以满足市场对高品质、高性能电容器的需求。通过不断的努力,CapXon成功研发出了一系列具有自主知识产权的高性能电容器产品,这些产品不仅具有更高的稳定性和可靠性,而且能够满足更广泛的应用场景需求。

Defense Supply Center Columbus公司的发展小趣事

在电子行业,人才是企业最宝贵的财富。Defense Supply Center Columbus公司高度重视人才战略的实施。公司积极引进和培养各类人才,建立起一支高素质、专业化的团队。公司注重员工的培训和发展,为员工提供良好的工作环境和职业发展机会。同时,公司还建立了完善的激励机制和绩效考核体系,激发员工的工作积极性和创造力。这些人才战略的实施,为公司的发展提供了有力的人才保障和智力支持。

请注意,以上故事均为虚构内容,旨在展示Defense Supply Center Columbus公司可能的发展路径和故事框架。实际情况可能因公司具体情况和市场环境而有所不同。

问答坊 | AI 解惑

应网友之邀,再发一个51做的数字钟的资料

应网友之邀,再发一个51做的数字钟的资…

查看全部问答>

小弟不才 C题竟然没怎么看懂题意 请高手帮忙指点一二

本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 如上  …

查看全部问答>

浅析视频监视器高清化的三种转变

随着视频监控技术的高速发展,用户对于视频监控产品的要求也在不断提高,功能要求更加完善、稳定,性能要求更加清晰、准确。如何能够迅速准确的找到目标……?所有这些问题都需要高清视频监控产品来解决。高清化,从我做起——彩色,液晶,大屏拼接 ...…

查看全部问答>

零起点学习STM32F107开发第3讲( 视频:STM32时钟的配置)

附件里有教程用的PPT。$(\'swf_w5k\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/s ...…

查看全部问答>

请教如何用tornado编写类似windows下的dll文件

请教如何用tornado编写类似windows下的dll文件,然后在vxworks下被主程序调用。 具体如下:我想用tornado写一个算法,然后封装成类似windows下的dll,然后供vxworks平台下的主程序调用,请教如何实现,请大家提供一点思路,谢谢!…

查看全部问答>

各位高手帮帮忙

找了数月才找到一份工作 老板让我用vc做一个数据采集,就是给我个终端,让我采集   请问该从哪突破!    不胜感激…

查看全部问答>

【原创】在VC/eVC中实现VB中的Split函数

VB中,sItem = Split(s, \",\")   CString s; CString sItem[13]; byte pItem; byte p1, p2; s += \",\"; p1 = 0; pItem = 0; for (p2 = 0; p2 < s.GetLength(); p2++) {         if (s.GetAt(p2) == \',\') &nb ...…

查看全部问答>

谁要9B96的内存地址分配图

谁要9B96的内存地址分配图…

查看全部问答>

请教一个关于时钟的问题

我是430初学者,请教一个关于时钟的问题,msp430中的几个时钟是怎么用的?就是几个时钟都可以用于任何模块,还是有些模块只能用特定的时钟?…

查看全部问答>

求助,各位大虾进来看一看,用TI自带的例程读写DDR2不正常了

因为没加限制,擦除烧写地址超出了flash的最大容量导致板子不能工作(烧写是成功的,但是断电上电之后板子就不能工作了),后来直接用仿真器连接,程序不能下载到DDR2里面了,用TI自带的例程读写了下DDR2,发现写入时的数据和地址都乱掉了,求问各 ...…

查看全部问答>