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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,/ s1 Q5 w- ]5 e1 P# M# m
    //不做任何注释说明,大家能用就用 不能用就删" w5 X7 {: @( w# H
    //有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
    $ P5 G, R; e# R3 e% E
    ( C5 l" d: _1 }) Z5 kHX711单片机源程序:
    5 d7 h% i* u7 e#include <reg52.h>
    % T* m( `! ^$ @. k4 i! q; X3 s& E& R#include <intrins.h>; @! l" f' ^9 f" G  M" Y; ]6 s4 `1 S
    #include <stdio.h>
    ' S; o! }6 T" m7 P) ~/ x& Q8 x/ m: F0 R) }& `& H& W( l, l# @
    sbit ADDO=P2^0; - Y2 R1 D. j$ ~! Q4 e9 N( ~  b: J" _
    sbit ADSK=P2^1;" {  B4 c# t2 I; c* J1 [9 D" G
    sbit led1=P2^4;  p+ J9 s* {9 C) g! n3 i1 f2 K  y
    sbit led2=P2^5;
    + ~+ n0 a6 X( h$ B5 p) j( w8 Jsbit led3=P2^6;
    9 J) }" ~+ {5 Y" f0 I( Isbit led4=P2^7; 7 i) N3 ?- ]- |/ J
    1 j) n# Z- q7 D8 q0 F* Y. G
    //unsigned char key;
    8 s. q9 V" I/ U' |3 Z; \* W" F9 @7 J6 r! x4 Z6 ]
    unsigned char code disp_code[] =, N4 X& E) c6 W6 v% e
    {
    $ p" i" A+ D. p9 V2 q  //显示码数组4 G2 |7 U1 Q8 N
      0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    - h6 d: U) f. G' q8 Y) C  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
    + X3 }: F% Y- y: ?7 ~};
    5 n" E" }- ~& f) _5 h% p1 S/ C6 y7 T# k! F: w6 J1 N
    unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮1 c) T# Q, S; \0 ~+ Z6 {

    ! P5 n+ Y; i- `/ ]' _/**********************************************************$ O& E4 P' y* i. P5 q) D( Q4 q
    : j# }, ]2 J8 D% s
    延时子函数. b( m/ \; }0 Q
    0 ]8 J' J: a1 e  X  e6 o+ a
    **********************************************************/
    8 k$ J4 G( L8 B4 V4 mvoid delayms(unsigned int ms)0 ?+ t8 ?( ~+ ?" [: a: e  c& h
    {
    ) L" I) ]. ~9 G$ M1 |" e' s+ m( [# d2 c  unsigned char t;" w+ p. j. }0 D8 e
      while (ms--)8 D5 E+ y% b: S$ J" M
      {! \( K  M  I1 s2 g
        for (t = 0; t < 114; t++)" I/ s. J: W& D9 [" {0 g2 R: f
          ;5 y% {( n. g4 Y3 i$ C& R6 [8 ]2 @
      }
    . a2 j# Z: y6 ^: ]8 H) u9 R}5 y' ], t% ?2 {# J: U( S- ~, M9 H' f
    + y& @1 l1 y6 R' V2 d
    /**********************************************************1 A. z9 G# @% L
    0 e; a- E) L) r# @  R+ F+ Y" I- S
    x*0.14MS 延时子函数) l8 i. p/ ]( ^2 o) Z# Q! N

    7 R- T# i" @0 @  b: ^+ y6 k9 b$ D- A **********************************************************/
    6 @4 M, V& e6 @- j4 Q& t3 j( y& wvoid delayus(unsigned char x)
    1 f: ]( B0 L% g, ?/ F{
    ! H/ ]  S/ m! P! D, t, Y4 O! |  unsigned char i;- r  |9 k) H  r# d2 ?+ ]! G
      while (x--)& }7 E) P8 ]: s8 P
      {! `2 A, ^) @6 N# p! _" p" Z
        for (i = 0; i < 14; i++), }  X- K3 r, h& V
        {
    # d2 U& V) E! B) r$ |. P: }+ |      ;0 b, D: Z$ [' N+ B9 m" T
        }* |. r. K& w/ l  d  J: `
      }
    # J& h; ~3 L1 n* Z& [7 t}: R# h' \* y, X$ S
    ( t: x7 X. q4 Y
    /**********************************************************- F/ R1 C. T; C. ^

    $ u$ T( ~5 I% B1 l5 |读711 AD数据子程序. N2 W3 s3 L5 {) M) S- Z

    : |- ]. j3 ~! F# {0 Y **********************************************************/
    / V9 z# P$ z# d$ D* q. w- Kunsigned long ReadCount(void), D" X, |) i7 x  N% ~6 B1 L
    {
    : Y( X% o% k4 T( k' q        unsigned long Count;
    ; W1 X7 \+ R) i        unsigned int ADval;
    5 f$ P' Z; J! Q1 w- u1 p2 ^        unsigned char i;
    2 j) c: x  H7 {        ADDO=1;
    ) H; [" U1 a* e+ o8 K& B/ W        ADSK=0;
    ! ]1 I0 a% L+ T( _8 w        Count=0; % L5 {) M# r% w/ `2 O
            while(ADDO); " a- r, j0 |" D6 z" ]1 P
            for(i=0;i<24;i++)   //读24个bit
    0 n# V  }6 Z/ b        {
    % ?8 ~( P5 F+ l8 o8 t                ADSK=1; % x4 M9 y" k; E( Q
                    Count=Count<<1; # G7 T4 M4 j  N/ l
                    ADSK=0; # u! e9 _" i/ y7 q3 K' j% b" z
                      if(ADDO)Count++; 7 O. b: ]) ~% G" a6 V6 I" X( o
            }
    + C0 E. u/ U+ G        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db  Z9 B2 D9 W, Y2 A3 O
    //        Count=Count^0x800000; ' b9 e' v8 R' q  m, {
            ;; n  U6 c7 B) u  n3 a7 W$ B7 ^
            ADSK=0;         # C+ u; |9 k- v; `0 r
    /*        if((Count & 0x800000) == 0x800000)
    # K5 B' j7 x2 N! s: w- |        {3 q5 u$ W+ Z6 f3 j4 T
                    Count = ~(Count - 1);8 |& Z$ X) h6 p, V$ h- t2 i
            }                  */
    % o" u7 L9 @0 Q//        ADval = (int)(Count >> 8);//取高十六位有效值
    % M) @5 Y. V6 y" G& }6 Y        ADval = (int)(Count>>8);
    2 t/ k# Z) P  H//        ADDO=1;
    ! K# M) d" p( x% z3 G        return(ADval);
    + d2 Y0 p! L% R* B}
    $ _( e& M! b' @& D5 O' {% M! l" K* i# h
    /**********************************************************5 Z: Z' i3 m9 E
    9 s$ U" l! Q/ U; U. t
    AD采样处理——算术平均数字滤波( G  o1 M+ F! {. S% d

    ) v) h. I7 V, P **********************************************************/* ~3 A) _, `/ n2 ?
    unsigned long Sampling(void)
    ) h0 q/ _  m( e{ # ^, G6 o& j! f% B5 p) Z' P
            unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
      N) r1 C* @" s- X        unsigned char i;$ h$ U2 G- {* a1 O- A5 }: I1 B3 c
    * F$ p2 h8 X, M1 R% Q% _
            for(i=0;i<12;i++)
    # c' ~/ \% m7 W, g        {  `, O6 F6 J3 Z2 R
                    Sam=ReadCount();
    $ x* d# I3 t1 g6 a                if(i==0)
      X) n$ ]" o+ X( D1 {- z                {$ |# c. {/ j0 B" y. y5 g' T, D
                            tmpmax=Sam[0];
    & \1 e# T/ H, q- x% D! T                        tmpmin=Sam[0];
    ! N# ]; J& _0 v                }
    5 c7 g# B9 k+ A/ y+ k( Y: J                if(i>0)8 h* @0 @$ d& \" B
                    {0 g, ]5 A( Q8 e& ^9 j
                            if(Sam>tmpmax)tmpmax=Sam;8 H  T1 {7 ?. l* i- [
                            if(Sam<tmpmin)tmpmin=Sam;
    3 m3 Q" g; d1 V( E" l# l3 e                }; |. V0 s# r. d# O  L1 G& p4 e
            }8 k5 }3 Z, I, S0 n

    2 ~! e$ h/ F  l+ C% c/ O        for(i=0;i<12;i++)
    # I1 j+ j" d/ W        {8 M' D& z; J' J$ y8 w% g! `3 Y
                    if(!(Sam==tmpmax||Sam==tmpmin))% Q! v0 X/ Z( R& x
                    {
      ~2 |- U3 N* l. m2 N                        sum=sum+Sam;        
    6 M2 L2 Z* Y1 m0 ^                }
    2 \. _6 p' C! U+ a4 {. U        }
    ; r9 E, B5 t# K5 R' t/ l        Average=sum/10;' v6 n: H4 L. d) H0 V: T; H
    - L: y# I# g" f, m' l- |( x/ e. ?9 H
            return(Average); : v: ]# x$ |2 U, T
    }
    5 D# y/ c$ t' _/ m* l0 {7 r  H4 U* K. k6 C. T" ?
    /**********************************************************/ d7 n$ D7 |, n  ~9 Z
    + p/ h) R8 t/ x; |5 Y( S# n
    重量值数码管显示子程序" E9 C3 E% E) l) [8 q, ?

    & D& c2 |( A: u **********************************************************/
    * `- I; O1 y  Zvoid displayheight(void)
    2 g9 n9 O  e4 b{9 S& E7 n6 o+ Z) e5 b! w
            unsigned int Lheight;" G( u& D) e, B# J
            float Tempheight;
    ; I0 `2 \; [* Q! i        unsigned char i,j,height[2],discode[4];0 t- D# i6 N$ B
    . N. L1 T! V9 \  ?6 i
    ! N4 k" |/ O" c1 c" d
    //        while(1)6 Y. i/ J% z# t8 I! K
            {4 k) F# R- U0 ^8 L) ~4 y
                    Lheight = ReadCount()-1500;
    , ]; Z5 P, w6 r1 X# k7 U                if(Lheight<0)Lheight=0;* _0 e( C; \8 n: a& _8 v& i
                    Tempheight=(float)(Lheight/1.4);4 T+ e( u7 I. j8 N/ U% k( i- w
                    Lheight=(int)(Tempheight);
    + |5 o6 _3 Y7 d7 J* [+ k
    3 P4 H2 t- Z: i
    * b  `7 D: R3 b5 r; S        /*        discode[0]=Lheight%16;
      e! Q' F1 F& j! F' H( l                discode[1]=(Lheight%256)/16;9 A2 a& H+ [& u8 [
                    discode[2]=(Lheight%4096)/256;
    - Y: ?8 J. b4 T" o% ?                discode[3]=(Lheight%65536)/4096;          */( J; A7 {5 P" d. h

    ( W5 C& l( M5 w4 ?        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         
    0 J) j3 R! ?7 `1 q- m2 D
    # `' U3 L7 B& X0 [6 J                discode[0]=Lheight%10;7 x8 d- n8 e; _' d: r7 s) s
                    discode[1]=(Lheight%100)/10;
    / Y( ^9 j, i% |: ~7 {( X                discode[2]=(Lheight%1000)/100;
    / L* g! _% a9 X                discode[3]=(Lheight%10000)/1000;                  
    5 n, `  r* v. @; G4 c! l
    % S$ b8 y$ J- e, e# n# R1 M' B                for(j=0;j<250;j++)
    / ?. j- f5 O5 ~7 T5 }                {/ p, u9 [' f7 j/ W/ _3 [6 G3 l
                            for(i=0;i<4;i++)
    & ^& Z; H7 _, b4 Z0 @                        {
    5 I/ L0 l: ^1 d! C1 y, J! y3 z3 {                                if(i==0){led1=0;led2=1;led3=1;led4=1;}
    7 q$ L) \* P+ U6 B9 `; g  k: b                                if(i==1){led1=1;led2=0;led3=1;led4=1;}
    8 r6 m( x3 e' p' y& o' J                                if(i==2){led1=1;led2=1;led3=0;led4=1;}
    9 K/ L0 j& W' o0 J5 W3 z% t1 m( p8 @                                if(i==3){led1=1;led2=1;led3=1;led4=0;}
    1 c2 c& B- Y' k                                P0 = disp_code[discode]; 3 I: K) j1 f# j+ n* C' h  W" I8 ^
                                    delayms(2);
      g4 [8 @; M; x+ K2 H                        }* S/ ?* `( K& T# a6 e; {1 l+ u
                    }+ ?& y. W! b4 ]& V
                    led1=1;led2=1;led3=1;led4=1;1 e1 q' _; J9 _/ S- s
                    Lheight=0;
    7 W& m, i% u& D5 c        }; ^$ |2 ]7 e8 n
    }& X9 Q8 y- R' ^7 M+ ~

    ! C2 O% x7 w5 P& e! s' j/**********************************************************3 `6 u4 i9 U3 W. k7 D2 A
      W1 `, c) n1 S8 O* M% f
    主函数
    / x3 D# Z) G8 H4 _9 \4 H5 z" Y. X, M& S2 G# B$ W
    **********************************************************/& }/ D7 {( k: d
    void main(void)6 v- _6 _) y+ c% |) E' J2 O
    {
    : Z  B4 h, {" Z8 j) e' z//        unsigned long Lheight;# J9 P: r+ t7 L  [2 O0 z, W' D
            unsigned char i;0 \6 t+ V/ t! ?1 `$ z' @3 l- Q) t

    " Z" D) d2 w" B" S" ~3 v          P2 = 0x0f; //数码管初始显示"-"( O1 x: t; m( [6 O9 H) L
              P1 = 0xff;) F2 W( k) J# s7 v
              P0 = 0xbf;
    : f6 M, R, r' g2 l
    + t1 S- ]- U) ]$ X4 f          while (1)# k3 D' i% V. \' {# ^
              {
    7 ~" E+ S- {7 g: Q" _( P0 A0 J                displayheight();
    ; B, q: E; \( t! d6 |+ ?                /*        for(i=0;i<4;i++)7 J, G6 [$ Y7 K% a5 @
                            {4 g- r5 Y/ u0 _- S- y3 w  N7 c
                                    P2 = seg;
    ' d  ?2 M: O& A
    " S# q- m: J% }. h' k$ m, d( I6 t. ]% D4 m( u, B$ \
    …………限于本文篇幅 余下代码请从论坛下载附件…………+ E, N# O. C5 N1 F: H5 d
    游客,如果您要查看本帖隐藏内容请回复

    : y6 U% Q/ r7 y4 F1 N  Q3 h6 ?" J6 e+ g! i) v

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-19 20:49 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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