找回密码
 注册
关于网站域名变更的通知
查看: 584|回复: 2
打印 上一主题 下一主题

HX711电子秤单片机源程序 已经投入实际应用

[复制链接]
  • TA的每日心情
    开心
    2019-11-20 15:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2018-10-19 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,4 f) e" e) H3 B
    //不做任何注释说明,大家能用就用 不能用就删
    5 F+ J2 r* I9 G  k' C//有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用( W/ B2 ?& v( Y9 `# z  }5 Q! \$ W
    * g; O" ]/ \# t5 e+ o
    HX711单片机源程序:! T1 `( U) ?9 G# z0 }. r# c
    #include <reg52.h>! u: A; [1 T3 g
    #include <intrins.h>
    2 V1 T! l" I& l8 n6 c#include <stdio.h>9 `6 W2 o% q  F

    2 {9 n8 @8 q9 x; |2 c* ]sbit ADDO=P2^0; : S/ K* q8 l9 l" r( J6 R) Z
    sbit ADSK=P2^1;7 r, {: D5 O3 Z, m! H
    sbit led1=P2^4;
    $ N5 F7 R( Y# h* |# Esbit led2=P2^5;  p5 s" k+ _" ]( H
    sbit led3=P2^6;
    5 g3 V$ g3 R' Y% T; t5 d4 ?sbit led4=P2^7;
    # C& _( e) @% A9 @# L6 T* k- e& z
    //unsigned char key;
    ) W! U5 \0 k8 A" B( {1 \6 l7 T: E+ Z) `& P1 W7 p5 y
    unsigned char code disp_code[] =
    & T" e% c. Y1 @  ?* f' F1 b+ I{8 U, a. n9 u9 _" L
      //显示码数组
    1 b: b' J1 B- |, M( d3 D  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    / A# x% y1 k$ K. X3 A  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
    " b2 {2 `, J$ E" a4 ]; r' F};* {( m* m: @" w( ~, Z
    2 W1 D3 D6 G5 {, F3 _! ]' x
    unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
    . D- x8 \! k' Z/ r0 J3 N/ R: o% m/ ~8 r8 }% d& j$ X- _
    /**********************************************************
    . G1 G( ^- b& p0 R. v, ~6 m
    9 X+ j* `  r- n: L- O7 ^/ }延时子函数' \; N6 ]' X/ ^% B) S/ n

    ' N4 b9 U) V, \5 l* V% U/ M **********************************************************/
    % O- E& R8 ]( N* q- Q# Dvoid delayms(unsigned int ms)+ O) A# N) ?5 @0 p& |1 {
    {
    1 _/ B0 H. G! E% M" D" Y3 w  unsigned char t;4 l: m2 F) K& K/ e
      while (ms--)& |  B4 j$ T' B. n4 A
      {
    3 g7 J5 a& Z7 j4 n$ h$ f# }( B: \1 `    for (t = 0; t < 114; t++)
    4 R+ o3 T1 ~8 N6 _+ w) Y  u" F      ;4 l7 |& D8 v6 J: {: z
      }
    9 Z( W0 \- F" }- U2 G}! ?! H6 Y+ F1 @& g6 g% r
    ( X$ ]3 q% M' Y  M* H
    /**********************************************************) G( d) X- q- J& C7 O" I/ U
    5 q5 s5 A5 y3 _, i( D1 B
    x*0.14MS 延时子函数
    / i" ^1 _. }. g: R1 B8 L* `
    1 ~% s! |8 o! Z, F/ N! [ **********************************************************/! m% ^/ ]( j8 [" }5 E7 n6 q) `
    void delayus(unsigned char x)
    5 f6 q0 v' f( v8 u% w5 o{
    ' g4 Y7 O$ t) r9 ]! Z# R5 T! r  unsigned char i;1 a$ k7 ^  W9 P: m" O, A& m
      while (x--)
    + k* F4 l0 _5 T' W' L# G  {
    3 w+ M& K  r2 t, o    for (i = 0; i < 14; i++), m  C* [+ ~3 k7 N! {
        {. W; b5 b- O5 |, j; c1 X% e! W
          ;9 M0 e  T) C1 K2 Q
        }
    ) K( n5 ]* p) o/ g  i7 N0 j& o  }
    - ^, Y9 @8 e; l3 K}
    + d  ?5 I# U8 t! s; L$ ?  E" u9 G# N9 S8 G  g) W, N. b4 N0 `
    /**********************************************************; v( N0 G2 ?" E3 {
    4 b* \8 M5 Q& E$ x4 P. I
    读711 AD数据子程序
    ( t+ v" D, C! q( [( Z2 |  i9 h+ L2 [% }- B4 _
    **********************************************************/" A: w$ n6 I: V6 R
    unsigned long ReadCount(void)+ f0 j* _; h" w- x9 G4 e
    { ' A/ M: c! V% h1 _2 T
            unsigned long Count; 2 V+ y( b& k2 o, l( h
            unsigned int ADval;
    # {4 D$ z- X$ d. V; X        unsigned char i; ) N& S2 C5 \9 t  a
            ADDO=1;
    3 J. T: N5 X9 m( {$ f" y/ y* e        ADSK=0;
    ' M* O$ f! ]# g- d        Count=0; $ ~4 R+ _7 A- G$ I
            while(ADDO);
    - O7 n& W1 k) m+ S+ K8 S        for(i=0;i<24;i++)   //读24个bit% C% x; Y, B7 a* {* ~9 m4 ]# {3 ?6 G4 L( C
            { 2 ~; y6 s. Q! S" V8 X9 x4 c6 K
                    ADSK=1;
    8 u6 w, V& N( N7 W                Count=Count<<1; & J2 I8 ]  n% D  ?
                    ADSK=0; . \0 a& U+ U1 U) ~
                      if(ADDO)Count++;
    8 H& U; `3 k, Q, t2 Q% S# Z        }
    # H9 E/ n( D  j4 M5 w( d        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
    % U# M8 [$ H# f- N  g) M//        Count=Count^0x800000; 0 w( h/ b# T/ m8 }2 \/ C
            ;7 D6 b0 C# V' p$ \$ c1 I1 x
            ADSK=0;         % `4 k0 b( _+ b1 `1 K
    /*        if((Count & 0x800000) == 0x800000)1 l. V# Y4 l2 |0 h- ^+ G9 {5 z7 o
            {6 Q8 c4 `! N9 C& S  W5 U, s
                    Count = ~(Count - 1);
    2 \: n% X9 u# Y: b7 F1 j. q        }                  */! Z2 r6 ?3 n2 x% x" Z
    //        ADval = (int)(Count >> 8);//取高十六位有效值 7 {% R4 N, g" D3 Q& G' ^
            ADval = (int)(Count>>8);
    , h- w! G& g# B6 v- [//        ADDO=1;
    ( M, Y$ t  Y8 r; R, e1 C        return(ADval);
    8 I; k7 v1 @) C* S9 H}
    $ s8 d1 x/ A3 h5 \! `) \& \* O3 N9 c: h6 T3 C
    /**********************************************************4 N. |4 [% C! m& l9 K! b
    - n9 |4 w* O" Q  W* r7 `$ \5 j9 V
    AD采样处理——算术平均数字滤波
    ' s  T7 V$ |7 j
    % j, R9 q' i3 [7 y- \, b$ I' c **********************************************************/
    & @1 `- p( v! c7 w9 T8 Runsigned long Sampling(void)
    + @) Q8 x" R* ]* P( A{ & J6 o* k' ^, ~
            unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
    ! J; L, H' n/ x( |0 f  L        unsigned char i;7 o$ D/ l& }" r1 [1 E
    ( B1 {( J: g9 V4 F/ c' v
            for(i=0;i<12;i++)
    - w7 S( Z$ q- I0 e! F        {
    * G- j4 ]7 \7 F) y1 N! s                Sam=ReadCount();2 r  {% d8 M$ [2 Q* ]: A2 S
                    if(i==0)6 B3 A/ i4 D0 @! B
                    {, o! \0 t" d4 C8 B' r! l" M5 S
                            tmpmax=Sam[0];
    6 L# ]; w7 [4 Y) d                        tmpmin=Sam[0];" X, E* F8 M' ~8 v  o- w* n! O
                    }
    2 O3 \# N& N& D$ r                if(i>0)1 M% U) x" y; W& D6 ^/ w7 ?
                    {- D9 ]1 d/ W3 p# W. k7 R0 \6 o9 f3 G
                            if(Sam>tmpmax)tmpmax=Sam;
    3 D( m" f/ H. a4 M$ {) A- a& l                        if(Sam<tmpmin)tmpmin=Sam;
    # b  Z: p" G4 w7 H: {4 _/ q- @                }
    7 h% `( p7 m, n# h% \* v8 ]: W8 X        }& ^/ K% u2 o' G/ m2 Z

    * `; j+ A+ R$ s" M1 M+ l0 i% r        for(i=0;i<12;i++)
    , `+ `* L  x$ x8 v. e6 @        {2 {/ D6 t+ N4 ]. ]
                    if(!(Sam==tmpmax||Sam==tmpmin)), {! ]7 G$ V6 d3 W$ ?
                    {- |* G1 ~1 G5 }' ^$ x. [3 s% X6 w
                            sum=sum+Sam;        
    / |% z; h1 X6 w7 l8 v5 G/ D                }- ^) d* }0 W: I& ]. d) _
            }
    4 p& K" l% s7 z6 H& ?! m        Average=sum/10;
    ) A4 Q9 s, A3 r  l. w1 |; E0 c+ _. A
    1 ]0 b2 f0 E: ^: Y( X7 Y0 ?' ]4 T1 {, W        return(Average);
    : x1 R' \( O9 G  R+ a}
    7 ^) D3 ]& r1 {3 A+ m* a3 ]# d$ f2 f& ^  q
    /**********************************************************& G2 b1 |: c& o
    ; k7 s2 W8 o% Y+ k3 i
    重量值数码管显示子程序, t1 |: U( e, ~" o4 g4 g( I

    9 t$ h" `+ I2 `, s& w. I **********************************************************/. b" M, D# k. O7 n9 v. L* ^
    void displayheight(void)0 b/ b/ w$ i4 H& }2 O! A
    {
    " E( O1 V! ?+ u0 `        unsigned int Lheight;/ @+ G( ]- k" ]. u4 J! P
            float Tempheight;, M$ s0 @$ U  _/ }- x& g% u& i" p
            unsigned char i,j,height[2],discode[4];/ W, z* \% T. H0 \- u6 [

    5 T5 T( J2 d0 y9 Q' M
    5 T. K$ H7 O7 q+ d# O2 W4 P: v//        while(1)
    2 y. J9 i1 g- M- a        {0 M3 Q4 e7 O4 ?2 ]
                    Lheight = ReadCount()-1500;/ x; x6 P- Y, H/ ^% ~
                    if(Lheight<0)Lheight=0;
    7 {0 Y' X. I  Y/ z( m                Tempheight=(float)(Lheight/1.4);- d( _" q  a8 s4 p0 |% z
                    Lheight=(int)(Tempheight);
    , ~* R4 W+ z: |  q/ z
    ! |" U7 W1 `1 o5 A" {
    & \* I( N1 U/ j, Z; u        /*        discode[0]=Lheight%16;
    4 G* }+ a! m( e4 B7 k                discode[1]=(Lheight%256)/16;" P$ t6 A2 K' \7 ]0 e
                    discode[2]=(Lheight%4096)/256;
    0 l7 J5 W: R4 ~5 O                discode[3]=(Lheight%65536)/4096;          */; g/ F! A% ]' B6 D, d! t

    / Y, }! D5 a1 L8 I5 I7 I        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         
    ' Y( n" T6 r; q2 M' q+ M: a! U8 q6 ^4 @: u( R
                    discode[0]=Lheight%10;
    ( y5 Q# v- a; f                discode[1]=(Lheight%100)/10;+ P. F, v8 N6 O* i. @5 {6 [
                    discode[2]=(Lheight%1000)/100;
    % N" v3 A; d; ~/ Y  }                discode[3]=(Lheight%10000)/1000;                  ' E3 l, N' i2 ^3 h& s$ h

    % K" }% ]8 N& e0 l2 R" k                for(j=0;j<250;j++)" D3 d4 r, l8 A+ M0 }3 \% ^
                    {; d0 d$ }& T+ _6 J/ x: S
                            for(i=0;i<4;i++)" X  p4 [5 o0 f4 o+ y. p8 o
                            {8 ~5 H3 a: ~3 ^
                                    if(i==0){led1=0;led2=1;led3=1;led4=1;}) T6 q# ]8 j  d: y3 l( X
                                    if(i==1){led1=1;led2=0;led3=1;led4=1;}. t" x% E7 o; r
                                    if(i==2){led1=1;led2=1;led3=0;led4=1;}0 f' n5 {$ w$ I. e9 [
                                    if(i==3){led1=1;led2=1;led3=1;led4=0;}, V+ L8 u% P( V) c8 i5 v( v1 c9 s
                                    P0 = disp_code[discode]; / Y6 u$ o! D/ h+ d
                                    delayms(2);
    ) m* S' k& E! ^$ _/ N                        }  A& o, L9 T  }2 l$ P
                    }
    1 i2 O3 V+ \4 I6 G- [                led1=1;led2=1;led3=1;led4=1;" m- m' i* h. L' c3 Z+ |
                    Lheight=0;
    6 y/ b7 a0 [5 _8 n8 R        }) F: Y3 C9 D! s
    }6 A/ O" M( W/ q! w7 U  p. S
    * F9 W) e; S- D
    /**********************************************************
    & F5 _. V. ^" m* t7 d8 w0 j8 R/ R+ a/ l: _" ~4 [3 u' s+ W
    主函数8 f. x, b0 I8 _

    4 q/ Y6 R( L2 G* n, l, n& s **********************************************************/( W0 E# U4 x) _2 X) a0 T! E
    void main(void)
    9 Q  `  l4 p5 `1 T# p{4 O& D9 e0 l# h; M
    //        unsigned long Lheight;) s; ]  ^! P% s
            unsigned char i;8 ^  k) E: |3 |: G& M# H* W

    9 V1 G, G) u: p/ f! f" z          P2 = 0x0f; //数码管初始显示"-"5 }6 [4 e9 h% V8 e: U/ K' `# s
              P1 = 0xff;" r/ {% Z9 I9 g0 U7 g
              P0 = 0xbf;
    # t0 s1 ^5 ^2 c5 n7 f- \' `4 A. U- z, \) J5 E3 B8 m
              while (1)
    ) d: g& E) @* i( G          {3 D8 `, C5 [/ X6 L4 V" D
                    displayheight();( u/ J6 O3 m4 V: V! V* H
                    /*        for(i=0;i<4;i++)
    + D% S6 O* T4 T" D                        {
    8 y1 H3 r) f0 d* X9 Z0 t% v                                P2 = seg;$ B3 K2 y+ U0 J) s. z* `* p

    ( B: d0 n; G. U5 s4 r: D, ^7 i, l! O; ]* M) O( w7 R
    …………限于本文篇幅 余下代码请从论坛下载附件…………
      d* Z! v# I/ Y, e" R: C$ x
    游客,如果您要查看本帖隐藏内容请回复
    - A( R  `4 ]* b% ]& d+ \

    9 x; d% X* _, r2 c

    该用户从未签到

    3#
    发表于 2021-10-13 11:00 | 只看该作者
    学习一下

    “来自电巢APP”

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-4 15:47 , Processed in 0.140625 second(s), 26 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表