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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,: ?+ {$ X+ F' M, I& z
    //不做任何注释说明,大家能用就用 不能用就删7 A9 L! M" s$ u$ W# r+ ]: Z8 Y
    //有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用  k6 \8 [- v0 `

    0 r; [3 L( k) i3 \& b7 y( d* H9 AHX711单片机源程序:
    , p3 _* q* E7 g7 H( I1 X# v#include <reg52.h>6 X9 P, e7 z6 Y8 {: B1 [& z
    #include <intrins.h>
    - _+ X+ `# x' x+ O4 G0 I#include <stdio.h>1 f; V' o$ y$ q  I# @4 Y
    1 U& V8 D. d0 u7 E& Z5 p: I* T
    sbit ADDO=P2^0; - H/ ~  i, v9 V" S6 H; @; b
    sbit ADSK=P2^1;) B5 Z9 o  A# o4 t& \
    sbit led1=P2^4;
    $ [, V% X: N: i7 q& L9 L' H. k4 isbit led2=P2^5;
    / P% _' e( K/ u' R1 Hsbit led3=P2^6;; |% f( f- d# a( ?2 G4 w! Q
    sbit led4=P2^7;
    8 x' r* l5 l9 d
    % H$ Z" ]+ x8 K, T//unsigned char key;
    # U) R7 N. T  }9 J$ V
    $ i. o  _/ I! Z. B/ Junsigned char code disp_code[] =
    " t4 F& W: @' r  `& U% g{4 M/ J: j4 K" F1 j2 t2 n
      //显示码数组$ ?& t  Y6 {0 b: h; e$ l* F1 r
      0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    & J" z. r7 p4 f& U4 |( T* ]  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
    - A) \  W5 c4 D6 w" s% @8 q, E' m8 T};
    3 z* \  q8 P$ M" S8 A) [1 H: M' x  F# ^
    unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
    8 V4 y0 y, M( k( T/ @! Q5 r( B
    - c" d% p  M' r: T/**********************************************************& H- H7 X" h2 q
    & W  k  b( b+ L, w8 @( L
    延时子函数
    $ y' M" @1 @7 _$ }; e; e4 r: q
    " q' t! k- m+ j6 N2 A7 n0 x( ] **********************************************************/8 K/ u7 j3 a! k% P8 a3 b. b# ?4 v
    void delayms(unsigned int ms)+ A9 F; N2 [4 ?& j0 H% n
    {; W7 T3 Z3 N% f
      unsigned char t;
    ) u* P! H5 _0 |' ]2 A9 m% j* ?  while (ms--)
    3 p% k, N1 ~: f! A! i+ G5 j( U  {
    0 o/ @. h8 g  @* K2 j6 N. z    for (t = 0; t < 114; t++)# y, d# i" l5 M9 a
          ;) P( `7 x7 |0 `5 {6 I6 H0 f* Q
      }: k& D# h# w& t$ h3 ]% p
    }9 ]+ E6 C. [  a
    * y$ V5 v. |2 T( B
    /**********************************************************
    2 K1 h% i4 G( G5 k. G. |5 A- w1 Z4 P" v
    x*0.14MS 延时子函数, M1 Y$ w: P$ ?: n

    ' S/ a) Q5 F. W- m **********************************************************/
      R! ?7 ?( m$ o1 j) E4 ]# |void delayus(unsigned char x)/ p* R# A' s! I6 i! O
    {6 \! b7 M( E+ R0 Q" l
      unsigned char i;
    % \$ a, i0 p5 f/ P  while (x--)
    + w% Z0 s: T2 M; q7 @/ r9 {! G  {" E( f; ?! }4 G: `9 `
        for (i = 0; i < 14; i++)
    , p: u# W) A6 p8 \( B# v2 T- V$ d    {
    % ^  o2 B3 a- Z: m+ B$ R9 J      ;2 W! R0 n( G; V+ ]
        }% W0 `8 k; u/ Y
      }5 z! d* E9 T4 u3 a* b
    }. Y" X7 x/ G0 i+ S$ U9 c0 f
    9 r- I; W3 X+ E6 E3 W
    /**********************************************************. z8 N4 Q& r) C& c2 C6 c% x

      Q9 w0 M; [6 t# p读711 AD数据子程序. h& P3 Y( J* Q* `

    4 ^- O2 G) v) D" o% x/ G **********************************************************/
    ) c% D3 Z& |. W, C# J! uunsigned long ReadCount(void)! }: S, n3 {' Z+ w  j" b
    {
    - F' k2 P( e1 A6 u; ~9 F) \        unsigned long Count;
    9 s8 |6 g$ @1 `- ]' |        unsigned int ADval;0 T2 k' D4 Y+ |/ j$ z* |/ A
            unsigned char i;
    # r! K4 P; e5 O8 b        ADDO=1; + u/ C7 p6 p, G' d1 B6 y
            ADSK=0; ( ?# D9 a( p) H+ [+ W/ q4 n
            Count=0;
    % J5 k1 l3 B8 b& E- R3 f  _        while(ADDO);
    9 u3 c4 i; Q( v8 P: L        for(i=0;i<24;i++)   //读24个bit
    # x0 Z$ n- I" C& R: Z0 g. G1 J        {
    ; b" j# D2 ]( N/ o3 k+ G2 F7 o+ I: d                ADSK=1; " @$ T# O, i" p- h, A
                    Count=Count<<1;
    ; [  P* N- W: S7 v/ s+ _* G                ADSK=0;
    3 Q8 T& ^4 x( I                  if(ADDO)Count++;
    6 u5 Z- O" N- k' p: {        }
    + A4 E3 c* {# C5 z        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
    - r4 ?: ^9 x% h8 C! w  E//        Count=Count^0x800000;
    ' y* L& g/ K' i$ s4 C+ E& S* K5 S( S        ;
    7 P7 y2 `0 e4 N9 I+ X( s        ADSK=0;         , F' J# J$ ^* a* x/ l- \: ~
    /*        if((Count & 0x800000) == 0x800000)7 N% M* J  |! Q# P, {
            {
    - [" U' |) R2 N* @6 p% m' n% z5 {3 o                Count = ~(Count - 1);
    ; H% h9 {4 d& x5 z+ {! y        }                  */' p3 y) ]+ i$ }  E+ h3 W, S5 p, Q
    //        ADval = (int)(Count >> 8);//取高十六位有效值 0 s7 [. m* R2 Z* A* Z: J# y
            ADval = (int)(Count>>8);% l  {9 r  n5 C
    //        ADDO=1;
    + W# M5 w6 |( Y1 |        return(ADval); 5 m: Z& y, I4 a) `9 x% y
    } 1 y: E( k& c( y1 I0 |0 P

    + h1 u& O, Y+ q2 _3 q/**********************************************************
    4 ?2 V' b, T7 u1 E( c; Q; i
    6 d. @4 J3 J+ RAD采样处理——算术平均数字滤波
    $ R7 ~/ @9 \" c
    1 X3 d) v. C" ^' ]7 v- K: \ **********************************************************/
    1 e' m) {9 p' E1 ^6 vunsigned long Sampling(void)
    2 g- a, X, X7 V( J$ o& ?9 O: ]3 K{ ( \' M+ Q0 t7 Q8 _5 S0 e( m
            unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;6 a& Q- V7 ~9 c+ ?& c
            unsigned char i;' U3 v1 j( [1 Q% e
    8 c' ~$ j. V, l4 Q/ l$ B$ V
            for(i=0;i<12;i++); ?; S& h" K) [3 C3 f! f6 S
            {
      ?3 g+ ~9 E. x% ^; A$ X                Sam=ReadCount();
    " M$ t- K3 _0 n$ Z8 x6 C: V                if(i==0)
    8 z/ }5 w) @8 M+ `                {3 Z( O; `& v: z; a7 h- M
                            tmpmax=Sam[0];
    7 `$ E1 C( E" o* c" ?3 z% {                        tmpmin=Sam[0];+ k: ]; z* P, C" i# T
                    }1 H0 G* J7 Z: U9 V
                    if(i>0)8 A& W6 t  {. x" M/ \4 f0 U
                    {
    1 d/ ?2 H% \& c- N. q& w! Q( i                        if(Sam>tmpmax)tmpmax=Sam;
    . c" G5 t7 W4 Q1 V                        if(Sam<tmpmin)tmpmin=Sam;
    : J* N: @0 r1 x                }
    / `) {# d! e: S        }
    . P, r5 D9 z  f+ m3 J9 P" Z. c7 m, f0 c& J# e4 y+ T7 S, x6 I
            for(i=0;i<12;i++)
    % x# E, N7 p4 O& r0 C$ A        {# B( K# Q: N) F( r/ Y9 \
                    if(!(Sam==tmpmax||Sam==tmpmin))  \4 }8 @+ m" N5 y6 f8 p9 k
                    {9 h: T+ g, `) Z' w; B, Q
                            sum=sum+Sam;        
    . P* F& W9 F6 h) p' a                }: n: g) E3 {& f9 \
            }
    / f' t" g4 H/ c2 T9 ~2 T6 \        Average=sum/10;- U9 J( S# G& P, B

    # Z! F# u1 ^! R2 [: s/ b# y        return(Average); ! e6 J# n; O. K8 U
    }
    9 Z; ^: m* y" g. S. M' O' M% G7 A; c% v
    /**********************************************************! j8 t; T6 y8 y: O
    6 q5 _: ^- S  Y+ C9 i
    重量值数码管显示子程序; X% }, B/ g% [9 ?

    ( ^. I, I& l( V9 o* D **********************************************************/
    6 \4 Q4 \! s$ j( L& Yvoid displayheight(void)
    : h( Y. h2 q2 C8 U{! e2 g$ N. Z* U1 {
            unsigned int Lheight;
    5 d& S2 ?/ Q7 w& L, W: O        float Tempheight;% N- [5 C5 {& h7 h5 R+ I  |
            unsigned char i,j,height[2],discode[4];
    ( ]5 u: \: y" t- k
    8 ^- I) Q& ^( K- p; W0 }8 |, A! V) _, I; x8 v0 O, o& b
    //        while(1)4 F& |- v9 Z+ o  B) ]
            {
    2 @( c' ~# r6 F                Lheight = ReadCount()-1500;
    0 ^4 R/ q6 Z3 ?5 ^                if(Lheight<0)Lheight=0;. c+ V' S3 J8 u. I- m
                    Tempheight=(float)(Lheight/1.4);% X2 U0 n3 ~0 p1 y, i5 m% e- d
                    Lheight=(int)(Tempheight);! X9 N7 U3 c7 d9 u- n

    # m' E2 I, _; d
    , G3 E5 o( e, J2 `9 t. Z4 V, h/ W+ p        /*        discode[0]=Lheight%16;. `/ N1 i% b( k- {. K5 `
                    discode[1]=(Lheight%256)/16;
    3 p) q/ z1 N4 K7 n                discode[2]=(Lheight%4096)/256;- J! I5 K0 I2 R( A" {& L# @6 i
                    discode[3]=(Lheight%65536)/4096;          */5 M; |1 N- W# Q! x$ e

    . b& `+ h2 B$ q5 _9 o* x        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         # o. J1 g# U- c* ~1 |0 X
    * R2 r: t8 c  i5 `" j6 ^
                    discode[0]=Lheight%10;
    9 c; Y1 A1 K3 m* e4 l9 ~( q                discode[1]=(Lheight%100)/10;6 ]5 a) ~6 r' h; j) d9 _: S  p
                    discode[2]=(Lheight%1000)/100;
    , o" `+ a5 M: s. {! H  c  E  T                discode[3]=(Lheight%10000)/1000;                  
    ) v, l+ J6 _" T# W2 y4 t0 ?( p; x/ I$ W- H4 [
                    for(j=0;j<250;j++)
    " w- F' V8 w( p6 `/ E0 |                {
      ~8 I  m& M% q0 x$ @$ {                        for(i=0;i<4;i++)
    + s3 {' q! e* r1 U& N9 F' n- q                        {/ V0 f5 @2 t! A! ]
                                    if(i==0){led1=0;led2=1;led3=1;led4=1;}
    7 ?: G, [. o$ W+ A% f2 F  y9 V                                if(i==1){led1=1;led2=0;led3=1;led4=1;}7 v- K, W6 ?7 X' L3 n+ w6 p
                                    if(i==2){led1=1;led2=1;led3=0;led4=1;}" A' l7 U1 H. t! j0 K. o
                                    if(i==3){led1=1;led2=1;led3=1;led4=0;}
    * s. s( N$ y, R! _# F: W& `                                P0 = disp_code[discode]; 1 ^9 m6 f, ~. p) R3 |* P6 q! Y
                                    delayms(2);
    " S( k: \* h5 x9 F                        }
    % e- g4 I7 D; `+ |, i" [                }
    6 S; e8 R+ r! T, j                led1=1;led2=1;led3=1;led4=1;
    ' G  i9 [. k* a. H" K# n, y                Lheight=0;
      c/ N$ b/ t6 v        }
    ) S7 E3 f( m0 Z  \. ]7 _7 P6 y}
    0 l; e) r1 }; a/ u2 |
    . ~' O' _6 ?5 X& r8 ^7 h7 J/**********************************************************
    ! Z- \6 m% C# j$ K1 ^0 o) U2 O* T6 ~$ ?! |: p9 C( v
    主函数
    - U; H' K+ l; d4 d
    ! v; d) o  M  G0 Y. L **********************************************************/
    3 l+ v6 [. ^+ v% ovoid main(void)
    . h' j" r5 ~4 i) ?# Q! a6 l" Z+ A{8 i  U. E( r, M4 X
    //        unsigned long Lheight;
    - @1 |7 q9 @* p5 C        unsigned char i;1 @7 h! K2 C3 s4 @! M8 `
    % x; j# c9 X3 f1 A1 J
              P2 = 0x0f; //数码管初始显示"-"
    . I& f- [( X- T( L' w; `          P1 = 0xff;
    ! v$ t& V5 D& }: ~9 m2 T          P0 = 0xbf;
    3 @. `; G+ {+ M* k+ b2 ^" A/ v, z" S& x
              while (1)
    * o* q5 C$ N. i0 Y          {
    + f. o2 z; b) `1 I* S0 T) F                displayheight();7 T' O4 I, w' P
                    /*        for(i=0;i<4;i++)
    0 i0 _- W+ |/ |$ U$ ^2 p7 G                        {
    4 j" m, C: v- w3 ?6 }' ~                                P2 = seg;. ]+ d& t) g+ x0 b9 _9 ^

    " x* g$ X: ^! K1 h- u9 e4 N# @4 ]: ^6 D6 J
    …………限于本文篇幅 余下代码请从论坛下载附件…………
    7 u: M& u6 d8 u( b" S
    游客,如果您要查看本帖隐藏内容请回复
    - Q" O. j7 D1 m9 p) q& R
    ( V' n+ w3 |5 x3 z; n# V5 x6 ]0 j6 q4 x* B

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-12 19:33 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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