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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
HX711电子秤单片机源程序 已经投入实际应用
" S; W4 J( L* @$ v
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
; X" S: i: p8 c- h//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
$ t' U& S, j& j" |2 b( I5 z! |) Y; u# m6 E( K
HX711单片机源程序:

+ z" r- {$ `* a$ q1 v) `#include <reg52.h>
# t" ?. Z9 e. \! f. f5 ?#include <intrins.h>
; k! d, R1 `6 @6 h4 c4 `& H#include <stdio.h># y, n$ _3 O; L. A$ r
% ~: D) A# v$ J# S
sbit ADDO=P2^0;
, o6 z; \2 E7 Q6 M' Tsbit ADSK=P2^1;
  }. V. g' r) A: Lsbit led1=P2^4;5 ]* |2 Q" `$ y- m) ^/ v
sbit led2=P2^5;( E( a( P7 {) H* ~; U# Q: \, _
sbit led3=P2^6;: g. H) V$ R0 T& \! X, [
sbit led4=P2^7; : X/ i& ]" C( h; S( S

! Q9 [* A  R7 ?9 A3 C8 g" M//unsigned char key;
  j5 W* {( T# L/ j0 `# }1 e2 g, g; k4 L4 \0 K
unsigned char code disp_code[] =
- [4 O  u" y" z" t6 ^, I! }{
8 W( A$ e- d% f/ x, x! a2 N  //显示码数组) D1 a# j1 T1 D5 L
  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 7 ?- I5 C. h# H' s: I
  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
' }' p1 W& i4 |% z! ~};
/ Q, w4 m3 K9 Y# S* P$ i3 {) x; G6 i4 o( x
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
' J. V/ Y; g0 b* E. B+ w  W2 [
, B4 F5 }; o9 |8 e8 z' u! J% A/**********************************************************) u- V+ B, C4 f; F$ w

! r6 X0 X5 a7 L  J# N) q4 f6 V延时子函数4 }1 Z) \$ n% K7 N( J( u: |

5 r/ R: W* g2 Q& m# Y! V  u **********************************************************/
* u2 ?/ y/ ~. L5 G$ h" ]! q) ivoid delayms(unsigned int ms)8 l. c( f1 T7 {3 S: `
{
9 `  e6 v, t  d0 c' |  unsigned char t;9 w/ i; D5 ^5 S2 B
  while (ms--)
) r% Y; Q3 \- D. H7 T' g" m, B# c# H  {
) H' M4 M7 ^1 p/ D/ {* V; v3 N    for (t = 0; t < 114; t++)
" w  f3 R( K! e9 Q6 t. |4 J$ i$ n2 {      ;/ T0 N+ M( C0 J6 b
  }
2 t: s% y' r4 W7 B6 f}8 c' i/ C7 X' P' |$ B; A

2 l; W4 p$ ^) w/**********************************************************# r& t- n2 r$ u. N
5 h8 Y' Z4 @& M& S. s/ b5 Y
x*0.14MS 延时子函数% Q8 ^3 }3 Y8 E; l0 ^0 |
/ s" E, \: E" C" C
**********************************************************/
- a/ _3 }9 j- ?! svoid delayus(unsigned char x)
3 e! ?% S3 g1 B1 Z{& T0 B/ C: ?5 F3 W+ |9 Y6 @
  unsigned char i;
" V( O8 ?0 ?+ e) I4 }: }  while (x--)
8 X4 s: g1 ^8 w* L  {
1 B+ `! |/ l$ U& H) \* D    for (i = 0; i < 14; i++)
8 O  o. i) G9 b  o- u" z    {; e' f0 E) n6 b, Q( u
      ;7 z' c2 `" N+ P5 S: m' ?
    }) G, p7 l* v9 b1 B+ v
  }; ^5 s% \1 P' k" b9 K
}
5 {( n% _% g) S. I% G0 x5 j* f; O6 P7 l# M7 W" `
/**********************************************************) \0 R' {$ d' P1 P0 J- W. Q1 t

- J0 \: q7 s& y读711 AD数据子程序! n5 j0 S6 A! i( n0 C% S

: f) F- l1 }/ ~2 a5 D **********************************************************/
+ N( q4 P- U7 Z+ }5 U' Q+ p1 L0 m6 c4 dunsigned long ReadCount(void). _, ~. x8 d& ]+ y0 g8 ]; i5 x5 s
{
7 f0 d8 r- q7 q# N4 _1 v        unsigned long Count; 7 N$ a: ^% e8 g" o+ O; g% U+ T
        unsigned int ADval;
3 M/ Z: _+ ]/ n7 i7 ]        unsigned char i;
4 a: y3 ?5 C3 Z3 ~( A8 }; ]        ADDO=1;
/ Q" K$ u- \3 F! d" o7 d8 B8 v# ^  P" Q% D        ADSK=0;
2 {" U1 R: p$ J1 x" h! p        Count=0;
# W3 a9 |7 i8 t- @        while(ADDO); # y1 V, W& G- B' h% [& b2 ~
        for(i=0;i<24;i++)   //读24个bit' _% I+ t# D. Y9 W. T
        {
: B  i3 |2 S5 M8 B0 u& }                ADSK=1; 9 A6 Z; w4 F/ d4 E3 C* Z
                Count=Count<<1; ( t7 e/ M5 J3 W! V/ L/ o) t
                ADSK=0;
9 T9 R/ D7 J; h+ k- E                  if(ADDO)Count++;
- e6 }0 ]* T4 T- a+ r        } & X; _+ T6 x: c* ?) n
        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
$ U- h! t% T/ n' f: j//        Count=Count^0x800000; ; v& Q! ~- F: `
        ;, D: N7 p: W+ p2 @, V* |  c6 }
        ADSK=0;         
. G& w# h  g& ?3 n# B- P5 {( c/*        if((Count & 0x800000) == 0x800000)
0 P  e6 K( }, f. m8 m        {
5 U# I) P$ w% ?8 c1 [* }  G, t+ X                Count = ~(Count - 1);" z* _$ b0 v8 r  V
        }                  */
* {5 k) r7 B1 q1 E$ ]# C; g* N//        ADval = (int)(Count >> 8);//取高十六位有效值
; A" f: {9 i9 N# T1 |8 R& q* I8 A        ADval = (int)(Count>>8);- K$ m0 U( b- ]
//        ADDO=1;) b$ {, T* O  d2 y9 z9 h5 a( C
        return(ADval);
3 ~1 n0 V8 X- J+ t# a}
0 z1 f, T4 x' Y. K+ \1 x7 q+ M* D# F. `5 E! W
/**********************************************************% ^/ u( l; C' R7 \, T& Z

# Q' ]9 I% h$ l6 ]6 b# ]AD采样处理——算术平均数字滤波/ z- m+ s7 Q7 G- J

8 F0 @% Z7 Z$ O1 s2 W& u: r6 `3 D **********************************************************/
9 h* ]! B: f, ?, ~7 lunsigned long Sampling(void)# U& m' C* B/ [6 l0 C# ]* }: \% `
{
+ i5 B  D1 x/ j1 x        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;7 @5 }% p4 T" f% D
        unsigned char i;
+ y  H, F4 v, n" h; @3 C( r/ ]5 J( }) a. V& Q+ O( H
        for(i=0;i<12;i++); h& s; X( g, @) g
        {* A1 T4 J6 t, s& ~2 ]) a7 Z0 L
                Sam=ReadCount();
7 n7 Q" ?8 k0 f; T$ N8 I                if(i==0)& z' O8 _4 T4 c
                {- |4 J9 X: Z9 d+ Y, n3 t$ T/ {0 v2 c. ]
                        tmpmax=Sam[0];* }1 w" }) g% p) o' L' J# H. H
                        tmpmin=Sam[0];
' m: Q# q& U& [; V& k9 }                }
; m9 `* C& s4 g                if(i>0)
1 F2 s5 Y6 n5 P9 s: h( d, C/ f2 q                {7 N& I4 U2 `( Z! q2 a
                        if(Sam>tmpmax)tmpmax=Sam;  N. v7 V( R; n  U( t2 u7 i
                        if(Sam<tmpmin)tmpmin=Sam;
9 u# F' N. b. q  l# A% {                }
: |, t, i% f0 h        }
% j: N. {1 c/ m# O+ [9 p9 _# y9 A. H4 @% a3 V
        for(i=0;i<12;i++)
2 |0 X* u+ \8 s) \4 w! A        {1 i+ N' n* u9 c' s
                if(!(Sam==tmpmax||Sam==tmpmin))6 D2 S  i! K( P$ Y( }+ S" c
                {
- t( q" E: p2 t! M                        sum=sum+Sam;        
4 [  {: M  h+ N# m) L" y                }
  P4 q. I* I$ N2 [0 R        }
7 r0 c+ Y! T, p! y( t        Average=sum/10;+ V! j# |5 a( G- v

* {$ a# ^) G# o- s9 c: k: W        return(Average); 8 K: B, j/ o) q/ O1 c
} 3 L) T4 r+ }7 h& U: X/ x& {8 U

+ h! G3 K. v, k, V5 {/**********************************************************
6 z% }  Y! h- W! P) S, @' H1 k: M5 }
重量值数码管显示子程序
" o! @1 [- o4 d+ c5 H: l1 }0 y. }; @
**********************************************************/
. h7 {9 \; }+ ?- nvoid displayheight(void)
0 f+ f& J9 J4 g* x( F3 d7 z0 O2 g& a{. f6 P$ [5 `. p3 i; c% P* b$ @6 T
        unsigned int Lheight;/ V! N* c- S5 d/ {# G
        float Tempheight;
! t: d" g# y9 C$ G+ J. J        unsigned char i,j,height[2],discode[4];
( U; \( Y/ ~  _7 A+ t2 |' E" {3 J/ R: ?/ {  ~8 i. B. d" i

7 x) M' o- P) |: D//        while(1)7 X" H1 L( G1 F( Z
        {7 Q( Q+ Q) Y: o" X$ ^
                Lheight = ReadCount()-1500;' o1 T( b" l4 Z2 ]3 a
                if(Lheight<0)Lheight=0;
/ P4 |6 y% P# F6 ^; I                Tempheight=(float)(Lheight/1.4);1 v# o7 Z4 T7 {4 x7 j
                Lheight=(int)(Tempheight);3 ]+ x$ `2 D) ?4 [2 B' N

" D% d+ l6 t/ e' {: S3 v
5 F$ {+ N# M- O* C* W3 h& g+ O        /*        discode[0]=Lheight%16;
% w; ?- k7 ~+ P' z5 B( ^# ]4 D5 }                discode[1]=(Lheight%256)/16;
$ B4 Z+ j# v7 I) T                discode[2]=(Lheight%4096)/256;
( c1 e! U  c- p0 A                discode[3]=(Lheight%65536)/4096;          */3 I2 P' R8 q4 K; O8 w

5 t6 F2 E/ f) |) q9 U) y5 v6 q        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         ! x. t# j9 [' d- X' l! {0 H
* `; C2 b  S! W) y, Z- p
                discode[0]=Lheight%10;6 q0 X; v# ]; A3 Z6 t) L9 B5 E, K
                discode[1]=(Lheight%100)/10;8 J" p2 ?# ]0 \# R3 s, P& r- l0 [
                discode[2]=(Lheight%1000)/100;
" m* A- Q2 f1 W                discode[3]=(Lheight%10000)/1000;                  * Y+ Y1 G" @7 j) Z! n

( m5 f' y! H9 y: ?3 v6 k0 @) |                for(j=0;j<250;j++)  B4 d. j9 g% U( N) Z0 v. R
                {
1 f0 Z) ]0 K% t# R1 c+ U                        for(i=0;i<4;i++)# D( t9 F& y# q
                        {
' M3 f1 }9 e: {% [" [1 y7 ~( D                                if(i==0){led1=0;led2=1;led3=1;led4=1;}
- o  {' ]# z# p5 q7 B2 A# H* k3 R                                if(i==1){led1=1;led2=0;led3=1;led4=1;}& }. n) E/ P3 `+ \' ~
                                if(i==2){led1=1;led2=1;led3=0;led4=1;}( H4 ^* V/ H7 P# i# G
                                if(i==3){led1=1;led2=1;led3=1;led4=0;}# R" j; z, v( K  |/ r9 s- a! Q
                                P0 = disp_code[discode]; # H) Z! A8 K. \9 [
                                delayms(2);! w: X9 S+ c' R3 G3 N+ Q( i4 a
                        }
# C. \# d8 J4 ?2 _! N! @                }* A4 V; `+ n4 M; y3 l' B
                led1=1;led2=1;led3=1;led4=1;6 ~  I$ [- o( t  q; {
                Lheight=0;- r7 b7 N7 J  D9 g
        }
8 z5 `: f2 _% Y; k5 O, K$ Y( d}
1 E+ P( K3 H$ b# _+ b) o+ V  X
; e  W8 e! l: l" ]/ J9 v0 X1 H1 i$ U( H/**********************************************************
( c% p  r+ o- G- f6 H3 w. x# d" n* I  Q1 E
主函数: x! x' P& `# I. V
* D) ~% u; O% I3 Q% ~
**********************************************************/
* ?* w% V" Y; e; p7 s  @+ Jvoid main(void); q& [( V, P. u# G! A- E8 j2 {, u
{
2 u+ \; n: p8 ?  c//        unsigned long Lheight;4 C, Y/ ~/ M# U& v/ c$ L9 i
        unsigned char i;
) S/ q& v4 Y' P5 D9 f( P8 d& {5 C) ]- M  ], b
          P2 = 0x0f; //数码管初始显示"-"# P; Z5 z$ y7 g5 Q
          P1 = 0xff;1 w& G: V) Q& @' C; r: S
          P0 = 0xbf;
: b' [, u5 e1 |4 Y% L# Q
* h. a6 K6 g& q6 X2 c- i' [          while (1)3 j2 Y4 K4 ?; l2 r
          {
7 W2 f4 m; E' b" h$ f: V0 j                displayheight();9 [5 u2 ?  _3 B7 T" c3 K
                /*        for(i=0;i<4;i++)
2 z" a) Q* b$ M! M* k$ i4 R                        {
2 I! M: Y) |' x; ^) m. S1 ^                                P2 = seg;; O0 t& u' \. ~% S+ H" t9 [
. a4 Q: H6 x) g7 v  q* a" E% |5 }7 {

" i( d' m" M: Z: i5 u1 d9 R…………限于本文篇幅 余下代码请从论坛下载附件…………7 X& Q6 h: _# H, j# h, G
) \# z$ c$ F% J, I( Y, ?# E
游客,如果您要查看本帖隐藏内容请回复

1 Y( ~0 P  Q3 t8 p

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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