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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
    ( z7 B' D4 [6 o# c//不做任何注释说明,大家能用就用 不能用就删. f, g( X& o. p, w% U0 @# A" Z& j
    //有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用0 v& q0 T/ k0 p- d: W+ Y/ X

    7 F+ R; V; E* {. EHX711单片机源程序:
    " o6 p0 C6 i$ z( J# X#include <reg52.h>
    3 K* D4 k; |) H) G& M) S#include <intrins.h>
    * C1 T# i5 Y( y9 Y#include <stdio.h>
    + E5 n( u6 X/ N$ h8 S
    ) ?$ v8 O6 [( u" F# |8 dsbit ADDO=P2^0;
    ; d& y& K" M4 I+ z8 r7 Y1 f* tsbit ADSK=P2^1;
    6 C* p  k; Q$ Y/ b; T3 ]  tsbit led1=P2^4;
    ' L) J: Q$ ~( f4 ?' Ksbit led2=P2^5;
    - T& i9 y) w1 F: f5 Bsbit led3=P2^6;
    & ]# t$ [% C$ B/ X6 _9 t! Fsbit led4=P2^7;
    6 J- x) F% B# y6 k" [) B* x" S! S. ?( d: L7 R6 p+ C# x
    //unsigned char key;! J! _/ o) `0 V& U2 [+ B

    % U% }" {( I# N* l% [/ Tunsigned char code disp_code[] =
    ! x8 [* r+ H$ R0 F1 F1 s{
    , U, P9 s1 }, I7 V9 O" w4 H  //显示码数组
    & j8 Z3 s, p1 @) K  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    8 f& b& i4 i( P  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf; W1 D- c. G* W, g0 ~. c
    };: O3 {1 H# S+ C( {; S# `7 ?
    ) Z9 ~# C5 z8 T) ^
    unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮* ^! l1 m7 v; K

    * s9 H' A3 e( N/**********************************************************7 T# q" m% n  [. u

    , U6 m& Y6 r1 r! e延时子函数
    ( J4 e% H. J- n7 s* k% R8 h8 w. Q) ~: U2 {( y( Z
    **********************************************************/
    ' ~9 ~9 J! {6 S  cvoid delayms(unsigned int ms)% t: j! a' N0 e; T; t' Q) G& \/ ^
    {
    1 f1 y1 h. I: V! v, a+ @  unsigned char t;
    0 j/ P; D/ }8 Q6 c0 _0 w  while (ms--)
    # F/ A: l& f4 x7 M) N, D  {6 N4 R0 j: R  u7 Q$ ~5 p3 {
        for (t = 0; t < 114; t++)
    ! q1 I# y2 H$ H9 A4 `      ;6 g) C4 \0 m) \
      }
    7 ?# V; o+ g! _* g; j}/ I0 N6 \/ C2 f4 D6 J0 y
    / }+ p5 J/ y5 }* P" T2 K8 G2 O9 e+ k
    /**********************************************************
    ) O' E# H2 B- m; p4 y5 T' V: N/ e- e/ ]9 d1 i* b% a  }$ ?# b! A
    x*0.14MS 延时子函数
    7 ]6 z9 L- Z8 }+ o% _7 `: Y# m" \2 [0 o) K; c1 {( `! U7 w" m
    **********************************************************/; `* U  ?3 ]0 m
    void delayus(unsigned char x)
    ( r  [9 |+ ?+ \# K) W: P0 C) A0 I{& [# f5 K$ f7 N: b  x$ D- [7 X
      unsigned char i;
    . @+ _+ {- H7 O+ f  while (x--)! b" A/ {% j* K+ L8 @! g/ j1 A9 U5 l3 A
      {+ \8 y" @! z+ F+ w" u2 V; e1 z
        for (i = 0; i < 14; i++)
    3 V; Q5 L6 M- d# q. H    {
    ' K/ ^7 S2 p+ i+ m$ O      ;
    ( a  L3 `1 j7 e6 ^* m& q    }
    ' I% A0 b8 U/ X1 L, P: n  }
    6 b/ E/ \' k  I0 J) }) a* e}! l6 O0 y: K8 X- v5 e4 J1 P

    ' T# o+ B$ D$ D! d1 ?8 x/**********************************************************3 s3 w! I1 z2 e- \' p
    ; c, }8 H2 `$ H: k+ W
    读711 AD数据子程序: l3 ~2 z' Q8 w/ T0 s* s6 \& O. R

    ! Z% h2 h( T9 q3 e  n9 a **********************************************************/
    . ?( @, W& n) I( G8 dunsigned long ReadCount(void)$ i2 x) f* u, o7 Q
    { : n1 R6 \" |0 a' w6 \
            unsigned long Count; 8 r7 q# \0 P  B6 z2 |+ h/ z( l
            unsigned int ADval;4 t$ a5 m  [5 p
            unsigned char i;
    ) n: u  b* c5 y! ?        ADDO=1; , @4 r5 a& x  m! ]
            ADSK=0;
    6 F3 ^9 y3 e; u* O, O        Count=0; 2 _9 J2 i3 A2 Z/ _, Y- t* a, j
            while(ADDO);
    4 }7 G* Q1 T  x7 ~! S        for(i=0;i<24;i++)   //读24个bit; ]" s4 U8 B% j
            {
    / ?9 C! V! I3 I- J$ y3 O                ADSK=1;
    + y3 e9 b  j) P- m9 e$ L' n0 D& V5 K                Count=Count<<1; 4 ]+ M' C% P) T: f) P
                    ADSK=0; % c  t, c5 s6 L4 A. n
                      if(ADDO)Count++;
    1 g& z9 D8 t7 f" ?        }
    + C! a5 B: {- Z, I        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db% d2 T) ^  `( _$ E
    //        Count=Count^0x800000; 0 [/ R) e( Q! `
            ;1 _; J& m9 q% }/ I
            ADSK=0;         " J8 I  @, z  U6 v# s
    /*        if((Count & 0x800000) == 0x800000)
    , g- J6 b1 K8 ]- a        {
    ! _( x7 g" M" J! q; }                Count = ~(Count - 1);, k0 p% m. T& {7 w1 i# H% y8 ]
            }                  */6 u) s" ?- M4 c
    //        ADval = (int)(Count >> 8);//取高十六位有效值 - {+ \8 t1 z2 [8 _$ i
            ADval = (int)(Count>>8);
    2 l& a  v+ l. f) L//        ADDO=1;
    ' [, c4 B3 m4 p        return(ADval); ) S5 C& u2 \/ E: m# d
    } , A; @) U7 ^7 n
    ( q$ N/ Y$ K1 M2 p1 U8 I4 r
    /**********************************************************
    1 O: V0 A7 O) m& w. n, T  L4 ?2 t/ H/ d3 f6 r4 k- Q2 E( w4 n
    AD采样处理——算术平均数字滤波* |( D/ r1 [8 J
    " O: \0 [1 @: Y4 z1 Y  `
    **********************************************************/
    ! d2 }, A) U- w% V& b2 _unsigned long Sampling(void)+ D* ?/ x* q; n1 P) u! V6 z8 S7 X, s
    {
    7 b2 q: |7 R4 t) P4 _        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
    9 T7 u0 n2 D5 p        unsigned char i;
    0 S! `* l- T* G5 R
    * d$ L: K  J6 B        for(i=0;i<12;i++)9 N. h0 ~' Q, L# D7 }, q
            {
    * o* |! h2 ]! L  I                Sam=ReadCount();
    $ O: r7 }" n; y6 _. s  ?                if(i==0)( A7 x+ o; i" g/ G  u0 A
                    {3 Y6 Y" N/ E4 q" M% n" W( \6 [
                            tmpmax=Sam[0];
    " W6 Y6 w7 r* h' _                        tmpmin=Sam[0];
    - y  M4 ~% d$ t# C2 R8 }9 P5 }2 p                }
    1 u4 r* b" g# m                if(i>0)9 I1 h; d% f1 a4 d# ~6 j7 s5 ~* L
                    {; N3 u6 w& I: j+ Z  g6 L! g+ w
                            if(Sam>tmpmax)tmpmax=Sam;6 d( M- K% f0 N& h/ t, Z
                            if(Sam<tmpmin)tmpmin=Sam;. A! B+ h  O, S, @: N# L
                    }7 o1 Q' v$ r% l& r/ X! S9 D& r
            }6 @" A- D3 S9 o* _2 }: {8 u+ ?1 y' K

    % Q8 e3 e( ~% w6 H        for(i=0;i<12;i++)5 Y% E9 k% @# _/ v- N9 M
            {( Y/ S  h! s) [
                    if(!(Sam==tmpmax||Sam==tmpmin))9 V2 y; C% N; r* K
                    {
    2 E) n4 J; X. p                        sum=sum+Sam;        
    # P% P  Z" f6 h! ?7 S( P# r" U* q* j                }
    : X" ?* T5 B: z# O, @; Z        }& A, `0 D# _- Y
            Average=sum/10;, N% B8 ?, Z: s! n" z$ y( w
    " w' d  p- u# v9 Z
            return(Average); / j- I9 Q! K/ T* V4 C! c
    }
    , S6 L: j; ^6 o* B: A  k% {9 P# B' k4 ~1 }
    /**********************************************************8 |# c  o1 A, W

    ' D* a3 K8 v6 x: c) @8 ?+ I6 L重量值数码管显示子程序  ~3 N0 x  ?  Q1 |, a
    1 v. B; ?8 m+ T# i" W8 ~6 y
    **********************************************************/
    - r+ J( ^8 _5 J2 Zvoid displayheight(void)
    . s9 g( R1 f7 g9 @{  c. o4 H0 k3 c. f+ v; ^+ }/ w# d
            unsigned int Lheight;5 _1 b" j+ Y( b$ P4 z2 ?) q
            float Tempheight;8 ^: g) d6 r! L5 B7 B
            unsigned char i,j,height[2],discode[4];0 D: u% v& V& n! Z& u; j  P6 ?2 n7 U
    3 p( V$ |' y- h

    9 p7 A" o' X# ]//        while(1)
    / T3 r. X' {. B. b! d. H; {) g        {* Z4 L$ O( y) g$ Z) i, @
                    Lheight = ReadCount()-1500;- b! p  F4 A4 l+ D: _
                    if(Lheight<0)Lheight=0;# q  k1 W4 p$ L6 K. F
                    Tempheight=(float)(Lheight/1.4);
    ; ?. w) y9 h2 n. a                Lheight=(int)(Tempheight);
    6 C" }( n0 }  c; @  t
    # N* p% B' t  y8 l$ X0 Y& x6 a, y0 V, _. C* Y% q; w
            /*        discode[0]=Lheight%16;7 g! Y% Z  k+ i" \! p) @
                    discode[1]=(Lheight%256)/16;
    ' E& f" @2 E' T4 m( Z                discode[2]=(Lheight%4096)/256;
    " E! O- D  U9 W                discode[3]=(Lheight%65536)/4096;          */7 C. L9 @1 G, M0 n! L. M
    ) a$ \# J+ }6 \( F4 N* c1 G
            //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         - x. G+ ]0 v( W! m/ R2 @) h& |

    3 h4 Y" ]/ S: Z3 l: v" g                discode[0]=Lheight%10;( B* N- [$ }( C9 n' d, i4 y7 s1 [+ a
                    discode[1]=(Lheight%100)/10;
    & I- |; d( K7 C# |                discode[2]=(Lheight%1000)/100;
    : N+ K! O+ ?5 s2 U: q- b                discode[3]=(Lheight%10000)/1000;                  
    ! @5 F- p6 j# I7 O9 j% B5 h* ?) `8 u4 ^4 @2 {: _" P
                    for(j=0;j<250;j++), z& C6 I1 N8 }1 O$ G
                    {
    * S* h$ R. x) y                        for(i=0;i<4;i++)
    ; ?2 ]; K; u5 \2 P$ q& }                        {
    0 t8 }  t" d8 [7 n+ [5 H% y                                if(i==0){led1=0;led2=1;led3=1;led4=1;}$ i8 S0 g( I" ]/ y1 J' m4 j
                                    if(i==1){led1=1;led2=0;led3=1;led4=1;}
    5 {3 a# K4 z2 }8 T$ N2 E                                if(i==2){led1=1;led2=1;led3=0;led4=1;}
    . @8 g1 A& h8 T2 H$ o  y# l# w                                if(i==3){led1=1;led2=1;led3=1;led4=0;}2 E9 @6 g) _2 W) e# r' h) L8 D
                                    P0 = disp_code[discode];
    5 s& d0 ^) B/ S7 a- y                                delayms(2);( w$ y3 d/ C+ M6 F( V$ V* o
                            }( [& Q( D! ?( e- t  }: H) H
                    }- p5 Y2 `& z5 i" _! W  s
                    led1=1;led2=1;led3=1;led4=1;
    / O) m# ?- p( i. g                Lheight=0;) b/ W0 H4 ], E
            }- j# C2 E" ?8 v, W* k' P
    }+ h$ l" S' Y$ z  G' U
    : g9 w3 M1 N* C) {- d
    /**********************************************************
    3 S' Y4 E7 }  q% S5 }$ x
    5 N0 w7 U8 _- R3 r* ~主函数' `3 G. p( Y* L
    . a; q9 {" S! _% f$ g0 p+ I5 a  G
    **********************************************************/6 {) t) \% k3 Y. f) Q6 x" J9 g
    void main(void)
    , y+ J" n1 ~; I) q! S{
    ( \# u+ N2 \) d# V6 D( A2 Y# {//        unsigned long Lheight;* q. I* E# N$ B1 a8 j4 l2 l( _
            unsigned char i;
    - c* g6 j& I/ A  x4 D; [) @  ~
    ( b& W  U: E! T. k: X6 U( P6 z! e; C          P2 = 0x0f; //数码管初始显示"-"6 u) C6 Z6 H* c" Z
              P1 = 0xff;; _' E  q  E: C
              P0 = 0xbf;  c8 z, L6 R5 s

    & Y" l* @, Y) @' i( ~          while (1)
    , b' V! A7 h" I8 b9 M: A          {) F* u% f0 V% k- E( l
                    displayheight();: ?, X) c0 u7 o
                    /*        for(i=0;i<4;i++); K6 H8 _6 x% n! x1 t
                            {! s) W4 q  m# ~' e; g' s* ?
                                    P2 = seg;9 N9 s( r0 D8 E- Q: S  u$ i9 k
    3 E4 t, `% G$ E- x

      n9 `! p9 V. W- ?  a2 ^" [$ v…………限于本文篇幅 余下代码请从论坛下载附件…………1 u: J8 g! _+ t$ X$ Z& j
    游客,如果您要查看本帖隐藏内容请回复

    ! J2 x( @  C7 ]/ {
    # m* k- `2 f, {7 S6 K# c7 M

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-11-5 16:26 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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