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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
HX711电子秤单片机源程序 已经投入实际应用6 K7 d" @* k7 W- F
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
8 F* ~/ C9 {1 [) p: N$ G( R; |//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用! o' `. ]  m+ U/ F8 y
. d- ?1 {! j" F3 n, a7 d) B9 H
HX711单片机源程序:

6 u. E, u) e% A+ i$ Q+ e  J#include <reg52.h>
3 Z, l2 S) O% H3 n#include <intrins.h>2 e* g0 o7 A' U8 O8 {& H' C
#include <stdio.h>  I5 X- b- {6 I/ T* h
+ I; r1 ]$ l' Q9 a/ y
sbit ADDO=P2^0; - U9 W% R  p& B! F0 g1 \% O( N
sbit ADSK=P2^1;
! R; W/ C% H5 _4 x* ?) @( \6 G: @sbit led1=P2^4;( T& @% ~) K& x" ^
sbit led2=P2^5;$ y: \4 [8 A7 f( R; \% d- R* ^
sbit led3=P2^6;  Z- ?; d% C+ n+ g5 Q+ R
sbit led4=P2^7;
7 t0 N3 |" I" R" Q# _4 J
. x0 \. Z% ?: i+ N//unsigned char key;" i5 c. E9 @2 G/ h: \# z1 a+ m
6 z6 j& H* T) G! [
unsigned char code disp_code[] =: M" N2 ^( w6 i8 o3 @  a( M
{& v. j9 W+ `* {8 m8 e8 R
  //显示码数组
# d! U" b( Z8 g; k  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
0 U, j( y: W# {6 v9 H5 A# u& K) L. i  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf$ A, E; f- h! x1 [: `0 @* o  t
};
4 \; Y6 ]' n: L% c% P: J( N
+ }- K) a9 j% Q/ Dunsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
' G1 |" K2 G* d1 g
. `6 B- _& G' |" i7 j3 N/**********************************************************
% x0 O; R9 ?  b6 n( z1 d; ]2 P) I3 }- A  S
延时子函数& ~  l' I. V  _2 y

  b$ |. K/ l1 g, v6 u! }8 r: h, Z **********************************************************/
2 I& g' u8 }. C$ T# T, _8 Kvoid delayms(unsigned int ms)
# c+ N) ^3 L2 J6 ?5 O* K5 `" M9 S{
* H3 V, D7 |6 I" j) o4 l  unsigned char t;0 I# C$ g8 C9 Z2 H8 f( u2 ~3 c9 C
  while (ms--)
# J% o: O9 x1 }4 y  {
1 |& z) c) F7 {" q& M    for (t = 0; t < 114; t++)
& t4 H" ?8 ~: A$ D- R5 {# w0 p. M$ U5 a  C      ;
8 O' I- @, o$ d  }; f; A+ x2 r  b8 w6 J/ r
}5 x9 f# q  W, L' ~; ?
/ E/ f7 u5 a9 T7 o
/**********************************************************
. k+ @  G" G0 R# |
' \% ^5 i% o2 l% f& {x*0.14MS 延时子函数+ h( W7 r- h( M+ o1 W8 ]* {
3 |1 v% X0 D0 T. c! q+ v
**********************************************************/4 H+ c7 |* k+ \+ ^) `$ ~
void delayus(unsigned char x)
. i4 }+ g4 {1 v1 g{
+ q2 m( n& Y1 W$ ?' g  unsigned char i;
! R( P# L6 z, ~9 p3 `/ q" ~- O  while (x--)
7 b9 L: w1 ^! }( q/ W/ K" R  {' @6 k; b' @( I$ F. C/ l6 @: [
    for (i = 0; i < 14; i++)1 P& ^' }, N6 B* ~& w) H1 `! m
    {. ]  f7 a0 G1 [- `& v
      ;2 w% C8 M/ ~. u# h( `% F
    }7 u% i7 C, u. F3 A2 H! L
  }) c& I& N( D+ Z% F! I" S" a
}
( r9 g8 v  u7 \% I6 I% {; E; @( z+ ~  ?8 o# A& }$ e+ `
/**********************************************************
5 W6 _; E* B1 J; B* J1 V7 ?# f$ p' ]; l
读711 AD数据子程序
! V- Z" S( x# Y
9 q! J7 ?5 B- N **********************************************************/
4 @5 x5 w5 G( X3 E' o+ S) U/ t. Qunsigned long ReadCount(void): U- w8 _) L0 S' `
{
, m2 O! r4 d2 E' e  j( n1 k4 ^: i        unsigned long Count;
# Y" m2 r/ y8 G3 Q3 P5 o        unsigned int ADval;
' p( F7 l! T0 }9 Z$ O' ]2 A0 J  s3 d. X        unsigned char i;
' w% b* ]! K+ I        ADDO=1; & H. g' G, T6 I9 [6 \4 A
        ADSK=0; 4 k5 r4 b- Y. a
        Count=0; ' B' C2 q# }" @4 `
        while(ADDO);
5 U7 j4 T6 i% D1 {. x        for(i=0;i<24;i++)   //读24个bit6 M0 t, o" e! T7 {" R
        { ' S8 z0 x& H9 S* s3 Y( A
                ADSK=1; 0 f; l0 b5 m( e4 q
                Count=Count<<1; + t9 n0 j8 A& Y! E9 S; \- T
                ADSK=0; . a3 ]2 b4 v' e/ g( `
                  if(ADDO)Count++;
. R4 R# f" c5 N" ?. t        } 1 c6 k* Z2 o. G2 s4 B4 E6 L$ }
        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
; A1 ?5 W$ y  A' f//        Count=Count^0x800000; $ x' K* s& F( R! u- d3 b) ~% C
        ;9 x9 I1 L$ ?6 a. O1 b* G
        ADSK=0;         . Z1 d3 `- A7 z* E& h. ~! M  u* _
/*        if((Count & 0x800000) == 0x800000)8 P( C& I+ w  E# R8 j
        {* }) R5 A* B  d/ V
                Count = ~(Count - 1);
0 v, V4 H- r; s( Y        }                  */( G+ ?# R3 X4 T2 {  \
//        ADval = (int)(Count >> 8);//取高十六位有效值
& u) X* m( g* j' s3 Q3 H        ADval = (int)(Count>>8);: s2 k" f+ E1 H/ y+ Q
//        ADDO=1;3 Z5 x" Q- O- a, s$ F/ i: x$ v
        return(ADval); + \$ x) G/ ~- A8 A: ~# }/ Z
} , z/ V  y% l) T+ b

1 t1 G0 P7 f% G9 p/**********************************************************
4 u/ K, H# Q  `# Z1 u# L* s5 b
: O0 ^8 s% A) P0 ]/ h' E/ s0 q8 t7 {AD采样处理——算术平均数字滤波
1 e9 |' U+ {" o! y9 N. U% u! _) \3 T1 _- q( R
**********************************************************/
9 [2 i! t" R0 \! Hunsigned long Sampling(void)( u) A' Y0 Q: ]
{ # \  J5 b8 J. P
        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;1 _1 p( Y1 y8 S) x5 Q$ Z+ p; s
        unsigned char i;, d1 j& c  n5 [2 K

6 Q0 _2 s" R% ?2 n( v: a! ~# y. z  z        for(i=0;i<12;i++)2 Q* I' N! E' u5 ?: g8 X# _9 c
        {
1 W# g' P+ D8 ?9 c9 B2 N# e. V                Sam=ReadCount();
! C. W5 ?* k8 S7 M1 D                if(i==0)/ P6 `; j9 g" H! U+ \- g
                {  [8 ?! k: k' k2 E* C
                        tmpmax=Sam[0];5 l% S5 F, i' m
                        tmpmin=Sam[0];
+ Y! G  G5 y3 X, C, |8 A                }4 Y' q3 o. W" a9 V0 f' c7 |
                if(i>0)5 Z; J9 Q5 {3 t5 _6 |
                {
: |: d2 t$ P2 F- V; V5 I                        if(Sam>tmpmax)tmpmax=Sam;3 ?* c. ]( n* ~% O2 ]
                        if(Sam<tmpmin)tmpmin=Sam;6 L6 S1 z% @; s  b
                }
7 }( j8 X/ ~8 Q0 Y) ^* Q        }, h% d) S4 H1 r6 S- Z% a  n# _
# U. t) e) r6 x& ^7 M3 ]
        for(i=0;i<12;i++)( b# r! N7 o% c9 l  i
        {
) g( S( s& w2 f: R) ]                if(!(Sam==tmpmax||Sam==tmpmin))
5 @6 h0 Y) u6 \; B6 o, X- J                {. c# T* q) e4 W$ r' ?% }' P2 Q
                        sum=sum+Sam;        
. ^  p% h# J( l/ N! d: \                }: B/ o; d' H  ?* z7 X' R
        }
+ r! }2 t$ w$ @. C        Average=sum/10;: @6 u: y* p& K9 o/ U- n
3 I3 p! O9 s0 x' T" G) c
        return(Average); 4 J: K1 R0 {8 R* C/ v8 ]+ {
} 7 B( i; a% Y  T/ D# T8 @: M
; t! r9 h4 p4 i; z5 b6 W
/**********************************************************# l. F% ~: f. b

* P+ r5 i  j7 K; b( p, p重量值数码管显示子程序
* W" N, e3 l* J# }" d; f5 R; ~0 A8 a6 ?7 }1 }
**********************************************************/; L5 W4 F( a* g# ~1 `5 |+ I7 b
void displayheight(void)5 V& g- f/ y+ s0 T
{+ u7 T: x! n, d
        unsigned int Lheight;
; P0 Q( g# k9 x# P        float Tempheight;
* L, }% k. V1 q0 A3 W8 P( F, i        unsigned char i,j,height[2],discode[4];
/ ]4 {7 E# h% z
- ?. g- O% k" G$ w
, Y" i( x, ?5 }: \8 U//        while(1)
' T/ O8 d0 P5 j% r$ d        {
0 J" `7 }1 O5 |9 O* m% ^                Lheight = ReadCount()-1500;( |, {0 y! i( V5 _
                if(Lheight<0)Lheight=0;
+ K- `, T" ?; |' p% j# h; H                Tempheight=(float)(Lheight/1.4);' S; n. P) j. x9 s0 m
                Lheight=(int)(Tempheight);
; u. U: v5 H+ n! I$ b: `' O+ q' N1 ^
: g3 d" w% n4 S8 b/ d, n
% V% N4 _  ^% z" q0 s+ C        /*        discode[0]=Lheight%16;! W: \. ?4 s; w0 F7 R
                discode[1]=(Lheight%256)/16;4 r, X1 D0 f( }/ W$ G4 U& Q
                discode[2]=(Lheight%4096)/256;
% v3 C3 A/ z( B                discode[3]=(Lheight%65536)/4096;          */
1 o2 \, i6 s( @0 i, C& C+ P
0 \% ^5 F" V) y  p        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         
, \1 E2 G, C- B. i( X
. v( ^1 y* B9 v/ m- |6 K                discode[0]=Lheight%10;! K! W8 g9 `9 a6 j) m0 d% H: W
                discode[1]=(Lheight%100)/10;
. M0 S1 _) y. J$ l* m( u                discode[2]=(Lheight%1000)/100;7 |) |+ w1 E' d# q7 x! u: y  k  v
                discode[3]=(Lheight%10000)/1000;                  
: I+ f/ V0 B. I* ~- m$ E1 M. t1 y& O( T" E) }
                for(j=0;j<250;j++)
4 k: F% o0 f( f0 }# Y% l" Q& t                {3 G! w4 _3 w0 I- B
                        for(i=0;i<4;i++)
8 H# b* ?$ b8 U. B+ m6 J( B! @                        {" D- `6 t* j- k# I: g# t+ X# ?
                                if(i==0){led1=0;led2=1;led3=1;led4=1;}/ h7 R# p6 w* L) A
                                if(i==1){led1=1;led2=0;led3=1;led4=1;}
4 ]2 T9 ^2 z* z/ S% s3 y" J                                if(i==2){led1=1;led2=1;led3=0;led4=1;}9 p" |' x, }0 B/ P
                                if(i==3){led1=1;led2=1;led3=1;led4=0;}8 O9 {& b0 q/ P8 F1 X1 h3 p+ b1 ?
                                P0 = disp_code[discode];
6 \3 R( `- B1 Z1 y                                delayms(2);
7 S/ _, b0 I1 K4 N( Q, k                        }
7 G, t" t: x& M+ b2 Z* G% o9 P& ?                }5 h$ ~! L$ m7 q# o4 R
                led1=1;led2=1;led3=1;led4=1;- i0 D* g# a0 g2 N5 B9 F9 |/ V4 s
                Lheight=0;0 R7 g, m) H- w
        }0 M2 \, X3 l5 T1 |% _( J
}
# u* ]6 l( q9 p- ~& K! M
) x* q+ P4 o" w" a5 |9 c/**********************************************************
/ J: C3 g9 [5 L& `* W- @9 D) D
/ \" m% o: c1 I0 Y+ `, u+ G主函数1 x; d* M- j1 x% i! j0 z

$ _  m+ B: j" {- h; u0 C/ A **********************************************************/
3 U  S3 D% c* L* e! z* R  Kvoid main(void)
# E; r* q  P8 f/ N{
! Q1 p, l* N7 w! x/ n# `$ ^//        unsigned long Lheight;8 V9 {) E8 t; J8 L+ q0 o# D8 a
        unsigned char i;9 a  ?5 Z$ C9 x

6 R9 G; f* t- ?. _& R7 S          P2 = 0x0f; //数码管初始显示"-"
5 N5 D+ n0 U1 x% V7 K# g          P1 = 0xff;; ?9 l9 d; z. C- \$ _; w
          P0 = 0xbf;
' Z) k9 l- W/ j
3 ^7 ~* V. M. R) Z8 }7 ]. U          while (1), i8 j+ n% R& b$ L- p
          {
3 F+ n7 s* v# N; i- T1 f% _                displayheight();
, [( P' t/ m- E; a0 R1 x, A                /*        for(i=0;i<4;i++)
. @. V% b8 r: E7 E1 w" C                        {
4 {7 R! l, u& m8 ]" }  f% {* _                                P2 = seg;
/ O$ s* x' T  s5 q1 N9 }8 e
, `8 ^) s, A8 {0 p' L1 J% t7 M* a; D* \0 m& F9 u1 t+ S4 P1 [$ o) w& b: y
…………限于本文篇幅 余下代码请从论坛下载附件…………3 k4 Y% T6 r" c. F8 M, A
' K% Q( d1 ?$ s5 j2 B
游客,如果您要查看本帖隐藏内容请回复
1 i: r9 {) C3 P! j9 C. P, L5 E, }

该用户从未签到

4#
发表于 2019-1-24 16:09 | 只看该作者
这个不错,谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-9 06:20 , Processed in 0.140625 second(s), 26 queries , Gzip On.

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

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

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