求助帖:DIY40kg电子秤遇到的问题
Jav2021/12/22电子技术 IP:河南

我基于stc89c52Rc单片机以hx711做ad转换制作一个40kg的电子秤。由于刚接触单片机不久,不能独立完成整个项目,于是上网各种借鉴。

在csdn上借鉴的代码,在坛子上借鉴以前几位大佬做电子秤留下的经验。一切就绪,给电子秤上电后,按压电子秤无数值变化。如视频所示。恳请各位高手帮忙解决一下。

V11222-221026.mp4  点击下载



来自:电子信息 / 电子技术动手实践:社会实践
6
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
Jav 作者
3年0个月前 IP:河南
899721

附完整代码。

#include <reg52.h>

#include <intrins.h>


/*I/O口声明*/

sbit LCD1602_RS = P2^6;

sbit LCD1602_RW = P2^5;

sbit LCD1602_EN = P2^7;

sbit HX711_DOUT = P2^1; 

sbit HX711_SCK = P2^0;

sbit key1 = P3^1;

sbit key2 = P3^0;


/*全局变量定义*/

unsigned long Weight_Shiwu = 0;

unsigned long Weight_Maopi = 0;


/*函数声明*/

void Delay(unsigned int n);

void Init_LCD1602();

void LCD1602_write_com(unsigned char com);

void LCD1602_write_word(unsigned char *s);

void LCD1602_write_data(unsigned char dat);

unsigned long HX711_Read(void);

void Keyscan();

void Get_Maopi();

void Get_Weight();


int main()

Init_LCD1602(); //LCD1602初始化

LCD1602_write_com(0x80); //移动光标到第一行首位

LCD1602_write_word(" Dian Zi Cheng! "); //显示 Dian Zi Cheng! 

LCD1602_write_com(0x80 + 0x40); //移动光标到第二行首位

LCD1602_write_word("Weight :"), //显示Weight :

Delay(1000); //1s延时

while(1)

{

Keyscan();

Get_Weight();

LCD1602_write_com(0x80+0x49); //移动光标到第二行第九位

LCD1602_write_data(Weight_Shiwu%10000/1000 + 0X30);

        LCD1602_write_data(Weight_Shiwu%1000/100 + 0X30);

        LCD1602_write_data(Weight_Shiwu%100/10 + 0X30);

        LCD1602_write_data(Weight_Shiwu%10 + 0X30);

LCD1602_write_word(" g");

}

return 0;

}


/*称实物重*/

void Get_Weight()

{

Weight_Shiwu = HX711_Read();

Weight_Shiwu = (unsigned int)((float)Weight_Shiwu/108);

Weight_Shiwu = Weight_Shiwu - Weight_Maopi;

}


/*延时子函数*/

void Delay(unsigned int n)

{

int i, j;

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

for(j=0; j<110; j++);

}


/*写指令*/

void LCD1602_write_com(unsigned char com)

{

LCD1602_RS = 0;

Delay(10);

LCD1602_EN = 1;

P0 = com;

Delay(10);

LCD1602_EN = 0;

}


/*写数据*/

void LCD1602_write_data(unsigned char dat)

{

LCD1602_RS = 1;

Delay(10);

P0 = dat;

LCD1602_EN = 1;

Delay(10);

LCD1602_EN = 0;

}


/*写连续字符(字符串)*/

void LCD1602_write_word(unsigned char *s)

{

while(*s>0)

{

LCD1602_write_data(*s);

s++;

}

}


/*初始化LCD1602*/

void Init_LCD1602()

{

LCD1602_EN = 0;

LCD1602_RW = 0;

LCD1602_write_com(0x38);

LCD1602_write_com(0x0c);

LCD1602_write_com(0x06);

LCD1602_write_com(0x01);

}


/*获取ad值*/

unsigned long HX711_Read(void)

{

unsigned long count; 

unsigned char i; 

  HX711_DOUT = 1; 

_nop_();

_nop_();

  HX711_SCK = 0; 

  count=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;

_nop_();

_nop_();

HX711_SCK = 0;  

return(count);

}


/*称毛皮重*/

void Get_Maopi()

{

Weight_Maopi = HX711_Read();

Weight_Maopi = (unsigned int)((float)Weight_Maopi/108); 

}


/*按键扫描*/

void Keyscan()

{

if(key1 == 0)

Delay(10);

if(key1 == 0){

Get_Maopi();

while(!key1);

}

if(key2 == 0)

Delay(10);

if(key2 == 0)

{

Weight_Maopi = 0;

while(!key2);

}

}


引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Jav作者
3年0个月前 IP:河南
899722

内容补充:代码中的去皮功能可正常实现。于是我联系电子秤卖家询问相关问题,可惜卖家是个只卖的主,提供不了其他帮助。晚上查阅相关问题,未能找到。我探索时的断开与电子秤连接的杜邦线,lcd显示屏上的数值“光速变化”。

补充:hx711为绿色板,为提高HX711的输出速率已经按照前人(刘上同学)的经验进行了引脚改动。

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h
3年0个月前 IP:上海
899726

看了一下代码 hx711 dout不该被赋值 而是应该等待它变低再进行读取

此外读取的时间太快 建议每步之间插入适当延时

引用
评论(3)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
ZZJ2019
3年0个月前 IP:广东
899748

给你一个我用过的吧

unsigned long HX711_Read(void)    
{
    unsigned long count;
    unsigned char i;
      HX711_DOUT=1;
    _nop_();
    _nop_();
      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;
    _nop_();
    _nop_();
    HX711_SCK=0;  
    return(count);
}


引用
评论(3)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Jav作者
3年0个月前 IP:河南
899761

我甚至找到卖家用了他们店铺给的代码,结果还是按压电子秤没数值变化。将hx711与电子秤断电后,出现如下现象。

V11223-183804.mp4  点击下载


引用
评论(3)
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
m24h
3年0个月前 修改于 3年0个月前 IP:上海
899768
引用Jav发表于5楼的内容
我甚至找到卖家用了他们店铺给的代码,结果还是按压电子秤没数值变化。将hx711与电子秤断电后,出现如...

视频看不太准 但是好像你线接到了B通道 代码发送25个时钟应该采的是A通道

。。。。又仔细看了一下 原来接头是4脚的 好像又没接错

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}