|
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 |
|