找回密码
 注册
查看: 565|回复: 2
打印 上一主题 下一主题

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
    $ x/ J0 U% ^; T9 b' A1 ^- q$ {//不做任何注释说明,大家能用就用 不能用就删, d* u% |' t- E; E1 P8 s
    //有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
    * P2 j( \  }- z9 Y( [
    6 j  F' r2 K1 g" X8 qHX711单片机源程序:
    * o0 M# Q0 y' D; V6 ?#include <reg52.h>- D/ A/ x  G! L$ N  m, r
    #include <intrins.h>
    / E' o$ F4 R. l) E& Y. a( ^#include <stdio.h>8 k9 j, M$ J% @3 Y

    1 h$ E9 q& E1 n/ q" I( Asbit ADDO=P2^0; ; S! x, x7 g- U- }  B
    sbit ADSK=P2^1;
    4 j- `, |7 p, r' r. X" r+ Y$ Hsbit led1=P2^4;
    , f, `$ I% u4 D7 b/ s+ R6 Nsbit led2=P2^5;
    8 Z$ _% w2 n* n- L% k, s: w/ zsbit led3=P2^6;
    % y. R3 M' @5 W# A" g; J5 d) xsbit led4=P2^7;
    0 [  m! I9 v  D
    4 _/ E- O3 \/ H* s1 {//unsigned char key;
    , o9 |6 ?7 V- F% x! Z
    : W; j  R6 Q' u5 O4 Sunsigned char code disp_code[] =/ x8 F# b4 Y( G  W- r$ K& \1 @
    {& W, I9 I  J3 R. V
      //显示码数组- x' s$ W3 i1 }; \, @
      0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    5 y& a; j' ^4 E  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
    1 G' l: E7 M6 c. R5 }0 B5 H: k- J};. r$ w& F. b+ f/ ?1 m+ Y
    1 `* v, [& R) g" P9 D2 f7 K
    unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮- J( \4 U" J7 |* a0 ?
    7 c0 q/ S+ n  \7 l7 c8 C8 W& Y. b
    /**********************************************************
    ' I3 T" F, H' v0 H& a! u  L  {# |" p; Q+ k
    延时子函数$ j, G0 ^2 T) F) D- G: c( l

    0 e- i& G) T3 X0 g **********************************************************/- ^6 U) X" z8 n. }  h$ g( X7 f+ d
    void delayms(unsigned int ms)' q5 c# f7 H1 ?( S
    {
    / i( [1 H/ d- ~* A  unsigned char t;  w8 n* H% R7 `7 ^5 G
      while (ms--)( K8 D; p3 k; u% ^: j8 H
      {
    5 m7 f  N1 I: C# \/ x    for (t = 0; t < 114; t++)1 X! [! z5 w5 V4 B4 o5 W* `
          ;
    3 v* J4 X- a7 l  }
    9 G1 w1 K  c, E& b7 k}
    * e7 K/ _! R' K" J  H& H) d" t7 e3 P! _6 K
    /**********************************************************
    3 Y3 w( J7 P" `* A3 l
    ( i. i) O0 G; L8 xx*0.14MS 延时子函数* c" x' _, ?! n4 [

    4 X4 h+ E3 o+ r4 d **********************************************************/( d7 d/ ?- }. l6 l9 Q5 C; h
    void delayus(unsigned char x); t5 _. \1 B* x$ a; {
    {
    9 R: j. t/ X4 p+ |  unsigned char i;
    3 E. {( |  Z; [% W6 r; m6 J9 }  W/ J  while (x--)
    + w6 R* \1 |3 n1 J/ W7 E4 O  {/ Y6 i( j- |4 _
        for (i = 0; i < 14; i++)
    . t8 D* O9 V8 E    {9 e) ]- c; N2 u. [
          ;
    ; B1 ~' x/ O" a) X( R; s    }
    : n. \# O/ X, {  E9 p  }
    - V; f) ?' G& o" A2 [}
    ( T  p$ _1 J$ j  B. |/ P
    7 P7 x# {) b+ M/**********************************************************3 i3 O' Z. F; L

    6 P8 D4 j" l  |% Q  R" F读711 AD数据子程序
    , G! ?/ L& }, |; I2 ?; Q
    0 w+ G; Y+ c5 ]+ c% { **********************************************************/
    . _. X1 p0 l1 u+ Yunsigned long ReadCount(void)
    % E  A* q! m: \1 F, ?9 m! c$ M{ ) f) U+ D! d, A8 @6 m
            unsigned long Count; 7 G. C! f7 E9 A# K: I8 n8 q5 f
            unsigned int ADval;  ~, ^; i+ d! ~; a  f
            unsigned char i; % }6 h5 M" A2 j1 M; C
            ADDO=1; . [) ?: h# [8 H! L
            ADSK=0; ' V4 e0 \% \7 O. d1 r+ q
            Count=0; : b* c' {! l/ I
            while(ADDO); - m  a9 M6 f$ f: |0 e; K
            for(i=0;i<24;i++)   //读24个bit
    7 a+ H) {' w9 @        { : Q7 x; ?8 [) b, ]9 E- H$ y
                    ADSK=1;   X) Z+ R* t% z- _5 O) q  t5 O& W
                    Count=Count<<1;   [+ s* i  n/ I2 f: @: j( G
                    ADSK=0;
    8 y( l, q- }  g0 e4 m0 w/ N                  if(ADDO)Count++;
    & S5 b8 {& d  y4 W) f        }
    # e1 [% v' C  X% L        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
    % b% u2 V7 ^# X+ Y6 u2 Y//        Count=Count^0x800000; . v: j+ u4 |* U% o" @9 c
            ;9 n$ y. ]/ F9 x3 S' B- O
            ADSK=0;         
    4 f* j+ i3 ^3 ^/*        if((Count & 0x800000) == 0x800000)) D; c0 `; \! {( F' Z" W
            {/ b9 }' z8 c$ b" H- M8 M
                    Count = ~(Count - 1);5 B0 L5 e  C7 A: t$ O
            }                  */
    8 j9 u+ f$ s/ _//        ADval = (int)(Count >> 8);//取高十六位有效值
    9 Y+ F/ J# N6 S8 W' X        ADval = (int)(Count>>8);4 B, |, h& m* G) H
    //        ADDO=1;
    ) _8 J4 s" `- n, W/ K; }        return(ADval);   }3 v' r$ ~, |$ _, R
    } % s4 h  J* `* M; p0 G
    % A, A0 I, B0 h7 `. H' N
    /**********************************************************  y* P  H9 q: W# I
    / r* d' E! v. l/ _# m5 v, s8 X
    AD采样处理——算术平均数字滤波' Z) ~* ]/ y2 H
    1 R2 H- e7 h. i5 \+ ^- n3 B8 X
    **********************************************************/
    0 F: ~7 J: ?) {unsigned long Sampling(void)7 {7 k4 s* U. C4 B1 ~4 w. a# A
    {
    : p# Z, M9 a  d3 x        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
    & ~9 W' p" X3 M! V        unsigned char i;
    ; T' J. f' [9 M3 F# x+ ~% l8 C$ @/ A
    - @0 g: p9 L6 [; M+ W5 `! O" p  a% n        for(i=0;i<12;i++)$ P8 {, I: R2 _
            {
    2 L9 M/ ^- @6 T% y7 B                Sam=ReadCount();
    ! f- k4 j! C. F) }, o+ F! x                if(i==0)
    - Y0 V! u* c1 E5 ~7 Q' |: x                {( H2 P, \0 ?  i) m. F' O/ J9 c
                            tmpmax=Sam[0];7 n) y; @6 p1 D+ {. O* d& g0 }
                            tmpmin=Sam[0];
    ( f, n, B. _  N$ d1 w                }
    - _- G0 g4 {. C                if(i>0)
    ) b. n9 [0 w. b- l                {
    4 \6 [' P! l  i. S" \* |                        if(Sam>tmpmax)tmpmax=Sam;, U9 z0 Q( V1 P% \& M& l2 [) V: N
                            if(Sam<tmpmin)tmpmin=Sam;
      Q4 H3 [) K! T$ O9 \0 U# E' m1 O1 u                }
    5 T  I2 s, l/ ]% t  j8 R+ w) O4 K        }5 n: H6 B5 k$ ]) E8 X
    " u2 d0 @5 b% N5 ]& ^, Q
            for(i=0;i<12;i++)
    ' q# C% N- d) f( n& r5 k" Q0 V        {. B2 g/ r( O# \) s- O2 K
                    if(!(Sam==tmpmax||Sam==tmpmin))& \$ g3 l: y3 K- O/ O' p8 s
                    {
    2 y$ e1 ?" A3 g+ C) L                        sum=sum+Sam;        , N( r# |7 v8 T0 k
                    }* ~4 Y' T* T  z6 y( y& T
            }
    4 U. S( }/ \# J. ^; a        Average=sum/10;
    + |! l4 t1 o" \  ]- k5 q7 g: e& X# i# @. ?1 @
            return(Average);
    0 b& y7 _' @/ U" P9 m( n& z) R: W9 ]}
    $ F* S1 s# L# u0 M, C
    ) V& z* I" K$ ^( _" j& k5 V, u/**********************************************************6 B% b. k" u' P# w
    5 l% S8 k4 u- A' h
    重量值数码管显示子程序, t1 Z  K+ M# m' o0 O, |# H/ H
    3 A  J/ ^5 f; o% {$ `* W9 ]) b
    **********************************************************/
    ; a8 E% V# [( X9 h; g4 wvoid displayheight(void)8 y( v9 L7 U4 g
    {
    9 s  A" h# R) ?1 _) \7 b        unsigned int Lheight;
    " d( R. y" N) n# s        float Tempheight;; x/ U) ^' a2 S4 }2 I
            unsigned char i,j,height[2],discode[4];+ E) A- b4 N! ^; A# z" K1 U+ I

    # R( P8 A; L% H9 {
    $ K* e4 v# o: n8 k+ i//        while(1)% P6 U! }5 g, W; y0 t% [
            {
    ' b7 x& f- R- s9 t* _4 T# r/ J                Lheight = ReadCount()-1500;, x) N1 ~: J3 ^
                    if(Lheight<0)Lheight=0;
    # c, L% q- v* l8 R                Tempheight=(float)(Lheight/1.4);% z$ k& ?4 b$ e. r0 l, O2 w
                    Lheight=(int)(Tempheight);8 n; P" B/ o0 I# m: B$ ?3 Q8 i

    9 j; x, b' i% a; L2 o5 w" |9 w( U7 L- J
            /*        discode[0]=Lheight%16;
    ; ]5 F( R) l1 V9 D1 D, X                discode[1]=(Lheight%256)/16;* F0 _' }: B; r" [  i# p
                    discode[2]=(Lheight%4096)/256;
    ' }& x6 r4 M# E# X$ v6 s                discode[3]=(Lheight%65536)/4096;          */2 S4 s9 O5 h1 B! s9 G9 [1 P

    ! l. \) u0 V6 ]$ F        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         ( C: j: z+ J4 l! g2 e; c

    ; d6 K8 e1 B3 G                discode[0]=Lheight%10;
    $ s2 F" F0 O- C" ^: ?                discode[1]=(Lheight%100)/10;
    6 h3 U  e3 N+ g6 g                discode[2]=(Lheight%1000)/100;0 K/ K3 H" Y- T% ^* X5 Y0 L
                    discode[3]=(Lheight%10000)/1000;                  
    8 {. B" _3 [# T$ [% R& [7 A
    2 n( M# l! e; \* g% B* W                for(j=0;j<250;j++)* B8 D$ A' }5 R  ?3 ~" V& V  h
                    {' Q. s* D: _$ g
                            for(i=0;i<4;i++)
    5 M1 o6 Z1 k0 P. I% O& d& f                        {
    ! f/ f2 ~% V. g. v4 N- }                                if(i==0){led1=0;led2=1;led3=1;led4=1;}/ V' ~1 P6 d0 Z& y4 f1 |) R" O
                                    if(i==1){led1=1;led2=0;led3=1;led4=1;}
    / J& S2 O$ g0 f1 |0 t0 ?* z2 L! H! O7 Z                                if(i==2){led1=1;led2=1;led3=0;led4=1;}3 x: |( Y+ J: ?1 |( ~9 c
                                    if(i==3){led1=1;led2=1;led3=1;led4=0;}( f/ L6 L/ A: N( }. L- {' L3 y- I
                                    P0 = disp_code[discode];
    7 a" V2 b/ Q- G9 M                                delayms(2);  i3 Y1 q3 W; B; L9 b2 ]% l
                            }, W" J+ A/ V4 T, \# y2 f! b. {
                    }
    9 a( ~) {- a: X4 K; H! c) z1 e                led1=1;led2=1;led3=1;led4=1;
    # C% q: @  G. Z% \. f2 I, r2 f  \                Lheight=0;
    : D/ [7 K( w9 X3 A0 W3 F        }& i' F$ r- I# ^! b; `
    }
    * B9 t+ Q) I: o! Z$ U) ^& B
    " K5 P; @- m- ], n5 z1 X6 g/**********************************************************
    7 X% K2 G; r) @# }/ l9 w. G% P
    " W, k0 j9 t& h# m8 H主函数
    3 ?+ s1 A0 C$ S8 S2 ~/ i
    ( a& I# Y4 K! D **********************************************************/  }; w& V4 }, F  i! b
    void main(void)' Z3 c- S1 W2 H' K( V2 ^
    {" @& r. n1 F: c# z+ [: v4 D
    //        unsigned long Lheight;6 k# Q' R! n7 D0 [; C7 C
            unsigned char i;6 l: M" d) u$ }0 y& Y

    ! [5 i' w+ }( c! \          P2 = 0x0f; //数码管初始显示"-"
    9 [. Q, R$ e9 @  Q* Z          P1 = 0xff;
    , C- E+ {8 P1 {% n" I          P0 = 0xbf;4 M( @) ~; z# n# w0 t" r
    7 ]' d* ?- u0 J' g% q
              while (1)$ k3 S0 N2 G& S. ^% @6 T+ k
              {3 i1 M/ c( O& D
                    displayheight();
    ; B. _5 I1 t9 q8 p: S' I: ]                /*        for(i=0;i<4;i++)- M$ Y7 D+ b0 o" J/ a; q9 S
                            {
    7 P' k9 N" {3 T' c                                P2 = seg;% }4 z( O# t4 J# ^' ^8 O3 G
    2 Y$ G, S- n; L; O) `
    ) d+ ~. N8 u$ R$ g$ X6 i
    …………限于本文篇幅 余下代码请从论坛下载附件…………
    $ t+ A( o5 Y! x) C5 ~) b
    游客,如果您要查看本帖隐藏内容请回复
    6 }) H8 C3 ~- L/ y# b8 V/ c7 S
    9 n3 d' K) `- ]

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-6-3 03:25 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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