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

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

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    /这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
    6 b; J$ z" D- @6 K4 Z, G8 t//不做任何注释说明,大家能用就用 不能用就删
    7 O$ ~. z' r( I' @% X//有反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用; H# i6 Z' g* j

    4 n/ Q$ l, k' h9 nHX711单片机源程序:% K; m1 H, N. w  t; Y/ b
    #include <reg52.h>
      Q' w; B" q4 X2 M& x. t#include <intrins.h>
    ( t3 S8 Q1 H* B' n4 {$ q#include <stdio.h>
    6 s. `* t* k7 n3 y' W$ {+ j' O5 U2 }: O; Z/ }2 T2 g$ K
    sbit ADDO=P2^0; 7 n& Z6 L. g2 E* F. \9 c+ g3 ~( ^
    sbit ADSK=P2^1;1 K# R# F# x: z
    sbit led1=P2^4;. F, Y3 l) ?  W* S
    sbit led2=P2^5;
    1 t& g8 X8 D/ K* U& G, csbit led3=P2^6;  ]+ r; h3 X! H, f# j
    sbit led4=P2^7; + ~1 v( s2 U: y) i& V4 B+ y

    ! X2 }, R" ~: r% m3 U- w//unsigned char key;& `! T  r6 A, }( ?& s
    & y2 q9 A% A2 d$ C* n* E
    unsigned char code disp_code[] =  ~1 J5 Z& h. ], F6 D& d
    {
      k# e. U6 \% V2 K  //显示码数组% I# E9 V2 E+ S  [
      0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
    ( Q, K, K2 t3 H# ^. b0 b! m  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
      N, N& y" |8 A0 t6 Z};' q/ H. d) ^5 R8 ~4 L6 T3 A7 L

    5 s: F+ _5 h7 ]  munsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
      ^7 V, Y" g. d2 l1 {# B& S2 K$ s" K$ A( V; _
    /*********************************************************** M+ R- |/ [1 K3 v- k. q0 t4 M
    # o+ _; ?& M1 K  Q# C# b" n
    延时子函数  _* z8 s0 W7 O4 p
    + C7 [7 Z2 W4 n6 _3 C
    **********************************************************/
    7 [5 n) j  d, L) S" f. u( svoid delayms(unsigned int ms)( o! }  s4 J1 {
    {
    , }, l2 {2 j* i& Z" e( M; g7 G: y  unsigned char t;
    / {2 d- q$ q0 S# X! I" e* N2 r% W( D% A3 W  while (ms--)
    ' E7 ^( t. X% {3 W9 d$ g  {
    3 x' q7 h! R1 e/ W( g0 p4 i    for (t = 0; t < 114; t++)6 i( e: V8 b! g  j6 N4 ~( ?2 z' J
          ;
    : d% f* ^: _- t- ^  }" e; ~3 u: _9 i* ?: K% B
    }0 x& ?. }" {$ d5 }3 [0 E

    8 t( }2 Z- h  j$ ^! c5 M/**********************************************************
    / F! y8 ]1 K$ @  `
    6 V) l& M0 P4 Y- D  P% I6 W& rx*0.14MS 延时子函数
    $ F* N9 B/ r& T8 q" ^! n: ^. J8 |- i. U- v/ l$ Z# o4 S. o
    **********************************************************/9 L* V  o- a, h2 x' f
    void delayus(unsigned char x)
    , z. l+ ]- z2 e1 j7 I6 {, y0 X6 Y{
    1 P0 Y6 q$ r- H0 O: G; r  unsigned char i;
    6 v7 C  J% a2 X" C  while (x--)# P/ M' o# D" x  O4 `% T0 _
      {  h2 ]3 ^1 t' C5 m: E, @
        for (i = 0; i < 14; i++)
    6 X0 D$ O3 P2 c/ M2 A4 S% W    {
    8 [9 |; N8 E% F0 L$ P( ]3 I      ;
    8 ~& @) b8 g9 E3 |5 b% |% z    }
      T- C5 E) f4 [; B- F9 ?  }0 S7 M# h- ]9 c1 K
    }" O1 U( p$ I4 w  G

    , s$ |1 ?6 V( K: b& W( E2 V/**********************************************************
    ; e1 G: u& O; c7 V: z) p
    * p% z" B. u" M2 @% H读711 AD数据子程序$ C' Y" r* N5 x1 V
    4 }+ g+ i, p* W; Q
    **********************************************************/
    ) H# L% n  j" V0 J$ bunsigned long ReadCount(void)
    6 P: A- E: G3 r) E. I{ 7 k% o9 a0 H& q! y3 P
            unsigned long Count; % U% T& }% @, \" d0 b
            unsigned int ADval;
    / N, u, y: E1 T7 h- A9 m3 Y        unsigned char i; & O. \' m7 F; Z3 X7 q
            ADDO=1; % X% U9 `. r; K1 L
            ADSK=0; 4 V0 l! M8 V* n9 H- S3 v* E
            Count=0;
    ' R7 M+ M" K1 B2 N$ s( F/ D  a8 r3 @( a        while(ADDO);
    0 D; ?' }3 t* W, d2 t/ k$ a) r4 D; s, {        for(i=0;i<24;i++)   //读24个bit
    9 ^; f0 S/ \$ P5 x        {
    : ^- r# i. x1 B/ V                ADSK=1; 8 o/ O2 S8 T' g
                    Count=Count<<1;
    : g+ v) F  E) @9 Q! x' u                ADSK=0;
    : Z+ m5 E/ y7 E' N0 x  E( m                  if(ADDO)Count++;
    * }+ ^8 |: T. P0 M& l. C        }
    4 C6 M# N) E& J  i1 `0 P) S+ G* f        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
    : P0 @5 t# K& t. L' [8 ~% j6 K) ~//        Count=Count^0x800000;
    ' x8 e) O$ N% v/ C( S) s3 f        ;/ d# P5 r( n0 a% ^& a5 U: I4 V
            ADSK=0;         8 _* x' H8 L5 Q) y8 D1 ^3 j
    /*        if((Count & 0x800000) == 0x800000)
    * C: U9 t; T) D  F4 @3 q) J        {4 ^) Q, ?2 D8 ?5 B5 ]  |4 C
                    Count = ~(Count - 1);* f# I- y- [8 h# y+ O: ?
            }                  */# }6 E0 X- J  }
    //        ADval = (int)(Count >> 8);//取高十六位有效值 , t+ G/ L, z9 @! H! U7 L
            ADval = (int)(Count>>8);
    4 p/ @* H' o& N6 y: |2 K//        ADDO=1;) ~+ ]5 I6 v4 y+ Z! C/ j: D0 }3 ]
            return(ADval); : v9 ?* F" c; e' @  ^6 U
    } 6 V8 ~5 P* ~9 l$ M4 r
    " d8 y) F) }: D" U; D4 `% z6 \0 N
    /**********************************************************4 p7 p6 m& m. T/ T
    % R' G7 ?; L7 P+ S1 W- _
    AD采样处理——算术平均数字滤波
    + _& \. g: ^, ?4 y6 |3 s. {
    4 Z( r# H6 F$ {# p **********************************************************/
    # h$ }, @4 D) W0 m# b6 dunsigned long Sampling(void)
    ; i9 `7 n" }3 O& N8 }0 f; N{ ( p1 d, A- \9 m5 o! L
            unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
    4 y( B* |- E) m3 b) Z        unsigned char i;" f  h$ F" ]" {
    ! Y; O+ T2 U+ ^) D
            for(i=0;i<12;i++)/ _( R) C8 O9 R
            {
    ' s" |6 X& T2 d7 I                Sam=ReadCount();5 O! Y& R1 L0 p# m
                    if(i==0)9 ?- ?+ _, x+ \* |; ~
                    {
    - r4 i/ p* v+ L: ?9 C                        tmpmax=Sam[0];
    * ^; G/ G, v2 P9 n  n" k# N! ^                        tmpmin=Sam[0];: h7 k: u0 h# x0 `% V5 B
                    }
    : q6 K* _- ^" W9 a                if(i>0)
    9 V& ?: E( i6 L8 f/ f                {1 K# i% B% ~+ L( I
                            if(Sam>tmpmax)tmpmax=Sam;+ y( J0 C3 b; s+ H- V+ V) Z& w) ~
                            if(Sam<tmpmin)tmpmin=Sam;
    & c1 m& {8 o) [- [                }
    " R& v) S3 ?5 y. x- F0 o        }' N3 T! {  z# J

    2 S+ U+ t2 F) A0 X2 g5 ^- w        for(i=0;i<12;i++)
      N4 I' ^: O+ ^! s! H2 o        {
    ) ~, W0 V: y% H" @7 u) ]                if(!(Sam==tmpmax||Sam==tmpmin))
    ! F+ _0 |0 ~& h) T                {$ h3 P4 o4 J* |2 d0 Y1 H3 z
                            sum=sum+Sam;        
    " _9 C  u/ W8 Q) z: p% N0 e  U                }
    $ s* q% e' S& E/ i        }
    - e9 p- i# w! L: W' A: Z* t        Average=sum/10;
    6 E7 S+ {: ^& _3 T& V$ B/ x
    9 J4 t* T, j- n" B7 G        return(Average);
    ; e; o8 Z4 J3 @+ w1 f}
    8 \3 @1 l# v* \$ f7 k6 o
    + s) t- }2 Y0 o) `. d) ^/**********************************************************5 g. E; t% T6 g4 U8 j9 q
    $ l3 m7 f3 A/ A1 n' A' Y: l
    重量值数码管显示子程序5 @- B. D/ O- M2 A( j

    $ f4 K! B% V! |9 C$ n' B **********************************************************/) t' [" |/ Q9 ~* b" }9 x
    void displayheight(void)0 i* ?3 Y  B! ~/ E4 J2 Y
    {) H  ^# z  k2 q* B8 _
            unsigned int Lheight;; K' l# Y! h9 l% r
            float Tempheight;
    7 B8 p$ M+ b9 T& F3 o/ V+ h        unsigned char i,j,height[2],discode[4];
    4 ~( F" T2 e4 v2 A9 K( x6 i
    0 d( B+ g+ y4 ?! _  [, O- B, k# a  y, _) Y; a. q& h8 f7 P6 U# \0 i
    //        while(1); M6 l/ S- r9 E# b2 V. a
            {$ R% A7 F9 d5 W" `7 [! U
                    Lheight = ReadCount()-1500;
    ) U4 d3 x0 q; l                if(Lheight<0)Lheight=0;9 I8 _. U5 C) R+ l- V
                    Tempheight=(float)(Lheight/1.4);$ e& v# e: a( `; {: t0 j' j1 i
                    Lheight=(int)(Tempheight);
    " Y5 F1 ~, h! T6 d2 j
    6 }" M6 t  Z) f2 f* t5 K% a" k* l( T$ X4 k- P5 v
            /*        discode[0]=Lheight%16;( F" \& x0 f  o* a" W1 Q4 y
                    discode[1]=(Lheight%256)/16;) h, U8 G0 f3 h9 E9 U, ?( j
                    discode[2]=(Lheight%4096)/256;
    ' H# k) Z7 k# M5 L$ ?                discode[3]=(Lheight%65536)/4096;          */, h+ x+ w6 g  V* V4 W7 Z: z+ K. d
    / z/ f# ?' S( J7 g% i
            //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         
      F. ?+ p& w/ Q' D% z* Y+ L
    2 T- e0 A: F, P9 a. G( O: H9 f2 ~                discode[0]=Lheight%10;2 o3 H% O( ^- K* m
                    discode[1]=(Lheight%100)/10;
    / W) |, ]7 c' ~2 F: F* Q                discode[2]=(Lheight%1000)/100;" M0 k8 x6 u: [) P
                    discode[3]=(Lheight%10000)/1000;                  ) G  `' I5 @' h0 G4 N- l
    " h8 r- ?0 Z. j% F0 C* o: W
                    for(j=0;j<250;j++)
    1 F# Y& X. g/ U+ R; p                {
    0 p7 d$ q: G1 d! e4 u                        for(i=0;i<4;i++)
    7 I  \% T6 U5 P, y. _; I1 S                        {, k2 }0 ], F7 D3 _9 {  p7 d$ T
                                    if(i==0){led1=0;led2=1;led3=1;led4=1;}7 }8 ]0 B% y! s+ v' Z3 Z3 L5 T3 u
                                    if(i==1){led1=1;led2=0;led3=1;led4=1;}& _1 S/ G+ ]6 S8 Q& N
                                    if(i==2){led1=1;led2=1;led3=0;led4=1;}8 I' R3 u  \! s
                                    if(i==3){led1=1;led2=1;led3=1;led4=0;}" `6 }0 D3 A+ b3 [
                                    P0 = disp_code[discode];
    " Y+ V8 P1 M1 S" J; [                                delayms(2);) C2 |# Q4 Z2 L3 c9 K
                            }
    1 w" H' v/ r3 M7 m- }! F5 V                }+ i, C) i# u$ W; u( w: G" e
                    led1=1;led2=1;led3=1;led4=1;& s7 M( F: X' f* O0 L+ t8 `
                    Lheight=0;8 G) Y7 b: P, G2 I/ `: d
            }+ f7 f1 H3 @: K
    }7 Z  `1 [6 I( I+ I) i! F

    2 G9 d2 ^& z. ]; U/ D/**********************************************************$ W6 J4 ?$ i2 L% F  ^. ?1 ~
    , j' Y  ?- t- A. [- p; o
    主函数
    ; k9 g( }. q: }# Q. X0 D- V& S4 e8 @2 y4 ^2 K
    **********************************************************/
    8 a  ]- h1 L( N& E! Kvoid main(void)  @+ b" h. S& E' }0 x) d! x  W
    {0 W% v$ ]5 S. g1 o: N
    //        unsigned long Lheight;/ s5 b+ o' @7 H6 t" b4 W
            unsigned char i;
    ( _7 ]4 x' D1 a% o. }6 n# i
    ' }% C9 R! L) v/ \          P2 = 0x0f; //数码管初始显示"-"
    - z/ j5 Z+ n3 b4 r4 G5 D          P1 = 0xff;. @) R3 V) L0 x/ X! B* ^' Q, K
              P0 = 0xbf;/ T- R* [! P& G1 t3 e

    0 D4 |8 P3 x6 H          while (1)* \1 d* v6 I2 ]' x6 u
              {
    4 c+ Y) G! g7 ^$ E' @                displayheight();# y  E) w$ k$ U) G/ R$ e
                    /*        for(i=0;i<4;i++)5 S) m5 L4 e0 X$ c! {
                            {  W# c- Q" Y# n  v# Q# t+ T
                                    P2 = seg;
    & {3 p& j7 x1 G9 k! I0 |
    ; p; T! |: V  o5 [) s( {( V# k: ?7 ~6 @
    …………限于本文篇幅 余下代码请从论坛下载附件…………6 |! a- C/ {. w& R7 v9 _/ v
    游客,如果您要查看本帖隐藏内容请回复
    & x2 s4 t+ z, k4 R: p3 i

    ! h  ]* X6 r6 ?8 Y* Q

    该用户从未签到

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

    “来自电巢APP”

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

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-6 14:50 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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