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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
HX711电子秤单片机源程序 已经投入实际应用. K) U# D* u# N' `7 S* N2 ^0 v
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,
* g1 ]4 N0 a/ q/ h  X( i& c//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
3 S; S6 p2 V8 {; u  s/ Z. O  x0 P# ^; V1 b: T; J2 M- P: E
HX711单片机源程序:

( C9 o- R7 F# Z1 L3 k5 P; M#include <reg52.h>' [# v' [! m6 e. E: n, s
#include <intrins.h>
' W% T7 ^, M, z3 g9 W7 {4 N( A#include <stdio.h>
( m0 @/ k: Z& i
5 E# |9 f! j$ E( E8 X" bsbit ADDO=P2^0; & Y! @" ], z# W
sbit ADSK=P2^1;; y8 T7 l! D, ~- w
sbit led1=P2^4;7 n# f( Z. u- N) u
sbit led2=P2^5;
- t) x* D8 e3 ^0 Tsbit led3=P2^6;8 ^+ e) }& v6 |
sbit led4=P2^7;
6 A' r/ t3 {* b
5 y, R) z: ~: ?  o: R! c//unsigned char key;: L5 Z- i* l) {# M# j

: M7 a3 l2 `; d4 F9 junsigned char code disp_code[] =
  L0 |  v0 p) |6 V* ^* d{# u# T6 P2 K, n/ Z! ]8 n
  //显示码数组6 Q' u& i7 m$ u. A1 ?4 K4 x, J
  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, : B# L. v1 T. ~, U# i  r* e6 V
  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf3 \+ A: j0 F; h7 @; j1 u
};: G+ \9 K* m- u; m
3 T; b* d0 l3 E, g4 X1 h
unsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮1 m2 }( ]" o7 m3 P
) u& F9 S1 }7 q# e
/**********************************************************
& h. t$ K+ m8 V
0 t0 g$ I, a2 m5 P* q3 \* q5 ]延时子函数6 J& G  P- Y: ]8 }5 m$ [
( q2 B" n* j/ ^( U& k3 _4 t
**********************************************************/6 j/ [1 c1 k+ E' g$ x
void delayms(unsigned int ms)/ w, ]0 ^! F0 j
{+ ^: W2 h7 F: K: b! Z; r$ b# a
  unsigned char t;
( M# t# t3 X2 c7 ^  while (ms--)7 Z  w2 ^9 J- c+ n' n
  {$ O0 r/ c8 ]9 ?: R+ N/ F$ n
    for (t = 0; t < 114; t++)9 k# u& Z0 l8 G- j$ \
      ;
! _8 ]2 b3 Q$ C! i8 L" Q5 @: V  }; O1 d) [2 l- ?- v5 e
}$ H& ], N3 r, ~0 }5 R. D+ r

. }+ v/ x* ]6 p4 M& Y( ~/**********************************************************1 D9 h+ Y! g* D) b$ A8 R; N

4 n  F4 O8 V6 v$ ]x*0.14MS 延时子函数
  H) {+ ^% _2 T0 r" i: N2 d$ a
5 i( `/ h1 R+ m3 C$ r0 d **********************************************************/
% v7 d; v7 ]. E1 G8 T" X+ b8 Nvoid delayus(unsigned char x)
; H% s/ ]- }4 e2 b/ ~  O{5 \4 z- h7 m! L, M& e1 q1 d
  unsigned char i;
* |1 Y  j* [8 u9 T2 W7 T1 o  while (x--)
) o8 [7 M' @- k. L  {
5 A2 g# q" F* b: x  W    for (i = 0; i < 14; i++)
; ^' x( p, ^' p5 L6 h# h    {
3 q  C. V8 P8 T& m) \3 {8 d      ;
1 K: v' o; i/ M' |3 S1 V    }
, ?0 J! j, v: k1 Y! L! b  }4 u- F# p4 Y# k$ n
}
- R3 `! E  x: e6 G# M* V' \3 [! d7 l9 M% x5 ^0 A( i1 N+ k; o
/**********************************************************
2 k: [+ _6 ~9 I+ [# Q' z4 t1 d4 ?2 F
读711 AD数据子程序
% Y. @& m/ h6 r8 x7 d
* d% R, D1 ]* H  c6 U **********************************************************/
2 z' N' j+ H) W3 t% h2 bunsigned long ReadCount(void)
9 m+ d3 d" J, {{ & _: l6 Y% H6 g% \
        unsigned long Count;
1 }2 D, I. l; E- O0 T- V* @; A        unsigned int ADval;
7 `8 p6 ^. r+ b4 f# E        unsigned char i; 2 E3 u; N: V: q
        ADDO=1; , l0 y. W0 E: `0 Z; R
        ADSK=0; 3 ?8 L1 L/ M; V5 E3 H
        Count=0;
; g1 G) Y% A4 ]  X$ |        while(ADDO); " O. Y7 v' U2 V  s8 s
        for(i=0;i<24;i++)   //读24个bit. Z0 {/ Q( \9 i( i+ y2 U$ p( s6 ^
        {
1 n% e% x, u( n% S4 e4 h                ADSK=1;   J; G5 ]* n" Q
                Count=Count<<1; ! T2 L: m4 U7 i! @" X3 C; P9 D
                ADSK=0;
8 c7 }' y0 T) B) m/ A3 C* L6 c. L2 N                  if(ADDO)Count++; 1 ^9 T$ \: {1 K# f/ o9 a1 L4 l# c
        } 2 {. p* `. @" {$ r8 U
        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db) n/ U8 ?' H7 n
//        Count=Count^0x800000; - \+ }/ S; `- c: f
        ;; u3 E2 }! n/ O: B
        ADSK=0;         . [/ E/ F3 L- S/ `0 B, n+ l- P
/*        if((Count & 0x800000) == 0x800000)" z; M4 x3 q7 v
        {
$ m: z9 p! Y# |! ~0 M! v- a9 [. S                Count = ~(Count - 1);$ d6 u8 z" l9 t1 K
        }                  */- q$ m+ z7 I, i( d. _
//        ADval = (int)(Count >> 8);//取高十六位有效值
+ H- I) a% R1 d! l        ADval = (int)(Count>>8);5 ^& [0 f0 m5 e1 E8 ~/ `+ {3 z
//        ADDO=1;; H) l2 n: e6 O4 |# H
        return(ADval);
' B" X- A4 [4 a& D% K} 5 S+ F# C" k+ ^, U4 `

! s$ @. M% n6 m- g2 w  D+ f/**********************************************************: N" m0 C1 l8 i' D# J' [8 P

: v5 C% |, G2 C8 f6 s* i# {AD采样处理——算术平均数字滤波' P' D+ g! E( ?0 C9 ~

, b5 r+ m9 v8 D4 L4 j/ \5 U5 a' H. F **********************************************************/
( y: S  r3 k* }7 ^' yunsigned long Sampling(void)- l- N3 ~6 N' Y5 S) h
{ - ?- G/ Y% h: N- p/ U. n& W
        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
5 X' u, m' G5 f! A8 U        unsigned char i;
- ~9 U+ X* Z1 z4 t3 C" Q0 v
* j/ B3 Q# ?% N* x        for(i=0;i<12;i++)8 Z2 {+ D  {: G; ~" g
        {7 r6 ~. g+ X( C, G6 ~. i
                Sam=ReadCount();
' B  O2 p9 x9 q9 n1 @# b9 X5 d8 \4 G                if(i==0)5 L4 F+ h4 B) \) Y, N  L7 N( L
                {. f' O- j# y0 I0 X, F
                        tmpmax=Sam[0];
* V" [7 h0 F! r                        tmpmin=Sam[0];
. Z) J' p' d1 Y                }( R, I. ~: w4 Q1 ~) \
                if(i>0); s9 j7 |  r6 e9 A/ B  g! g
                {
; R1 K' X/ g* Q% b- p                        if(Sam>tmpmax)tmpmax=Sam;7 H( m- k- X6 d9 h: D7 D, l
                        if(Sam<tmpmin)tmpmin=Sam;
/ Y$ M0 s& t. i6 {1 P% j                }
2 M- S' n) w" }5 a& O        }
+ N& O$ B) b& u9 B& W4 V: n! t# b+ h6 _; [3 \. ^2 V
        for(i=0;i<12;i++)4 ?7 A) T  D7 S! T, U- c
        {
* F$ b# ]! M2 I# E# |6 ~/ u                if(!(Sam==tmpmax||Sam==tmpmin))
$ X& P; C: o# g* T2 \                {  `1 O* q' u  j
                        sum=sum+Sam;        . \$ i% `8 k7 }, v$ T
                }" I: s  E9 z) _8 b. g: u! L" H8 i8 i" u
        }
% q8 o, I& f4 e( _' w7 E        Average=sum/10;, \2 D9 z7 y: A! q8 a; z
) ~! }2 a! O' r* m( B5 t2 N$ l
        return(Average);
1 P1 N4 _% x5 E6 g- @; `} : f% h% f+ |& R! P) y

8 p7 C/ ]8 C9 x+ ~0 s/**********************************************************# F4 H" g- H! G$ E! }1 Q3 v
$ |4 a+ i; u; |" o  E& p
重量值数码管显示子程序) F5 }3 J9 K( b5 v6 ^0 _
7 x5 U; d$ H, u2 O, y
**********************************************************/9 _7 Q! C2 x' S" s* a! S7 m% m
void displayheight(void)
, }- N9 N( D3 p# A9 ~{% E8 `" }; J8 E) c; m: M
        unsigned int Lheight;* e- K6 V  Z( a
        float Tempheight;
7 c' C0 H3 \+ o        unsigned char i,j,height[2],discode[4];
2 I% H" q2 \: R1 ]0 r
2 J, U9 n3 A' @6 F4 d7 v& l1 ~
* q; H# }& r0 m6 R6 m8 }0 `! w//        while(1)
% \/ M0 U! g2 k  S3 k        {
. p/ h0 {6 a% ~                Lheight = ReadCount()-1500;5 q( f& Q# X; L2 ?/ l2 k* C
                if(Lheight<0)Lheight=0;
; l' t! v$ G) S0 V                Tempheight=(float)(Lheight/1.4);
! p; i4 z) ~4 T! d5 O                Lheight=(int)(Tempheight);$ S: [2 ?4 J" w  ^. w9 h
7 H  S3 y% K9 g0 ^$ z: \& T( L

2 l* F' V& A2 I        /*        discode[0]=Lheight%16;* x" p7 T2 ~- {0 ]3 w
                discode[1]=(Lheight%256)/16;) [/ D+ s7 o. G
                discode[2]=(Lheight%4096)/256;
) e. D1 h; {5 H                discode[3]=(Lheight%65536)/4096;          */
! S+ H& R! v. K* R  t; N! O8 _& S* X! N$ L" D
        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         : L1 J; O7 d+ J% G! f
0 Q: P$ r' k2 T4 v
                discode[0]=Lheight%10;
* W( g% q6 K% ~1 v                discode[1]=(Lheight%100)/10;3 ~. O8 U8 ], S- O) E; c; S2 t
                discode[2]=(Lheight%1000)/100;+ X' @. [3 _. a/ O: ?+ g" B
                discode[3]=(Lheight%10000)/1000;                  
- o5 M; \  [7 `  ?8 e/ |, @
, o% }1 _1 A# I" E1 [  @                for(j=0;j<250;j++)! N! K+ o$ K2 N. y, W9 B/ _
                {5 j% Q. `) g; `& p
                        for(i=0;i<4;i++)
4 o) _1 @$ ^( Z/ b3 {5 `/ b                        {
' ?3 N- J2 a- i, ^- A+ [0 k( l3 t                                if(i==0){led1=0;led2=1;led3=1;led4=1;}
: g0 ^3 [) O$ k- s5 H( n: B                                if(i==1){led1=1;led2=0;led3=1;led4=1;}
$ d1 O6 K( R; J4 h, }' ^) {4 X+ U( L                                if(i==2){led1=1;led2=1;led3=0;led4=1;}
6 d2 a" d* v6 T& K% O                                if(i==3){led1=1;led2=1;led3=1;led4=0;}
/ F2 y1 |, g+ y# L2 B. |3 f! [+ O                                P0 = disp_code[discode]; 2 z7 w% v, R# a0 H
                                delayms(2);
, |: B& C; \; z9 C                        }2 E4 i. e( s0 h3 t, O
                }
6 b! k- W6 ?% h: B2 ?" @; ]8 s                led1=1;led2=1;led3=1;led4=1;
9 ?4 @3 O, x( {# Y4 d                Lheight=0;
0 c3 \3 \% p. r, Q        }+ m2 S' u4 ~& o8 X
}4 R+ G# n* j2 m( ]
0 @6 c8 H! Y* U- L
/**********************************************************
+ z6 a% l1 c! y0 u' u& E; P$ W' e, z! K7 G* W
主函数
& A$ S9 y. A8 T4 F3 V
) g$ [# [7 J5 K **********************************************************/
) k9 s! ?! j, ~/ ]& I8 Cvoid main(void)
( a* I, F% U) T" I; h) Q{& ?6 H3 w% O+ Q: `4 G
//        unsigned long Lheight;$ ]# T5 P" j6 g& R
        unsigned char i;
$ T  w: c  v5 Y  P/ ~
, Z# G. n- B7 |0 W3 d9 `          P2 = 0x0f; //数码管初始显示"-"
7 E/ f- O8 U+ n: ^          P1 = 0xff;
/ `% J9 c8 h/ t( ~- z% z" u# `& s; x( w          P0 = 0xbf;
8 \/ M, q# m" c+ B2 m7 E% n  y/ C1 w
          while (1)9 u9 K( j# y" B, \) d9 M! o5 `
          {
4 z' h8 f8 A: i% o                displayheight();
; D; P, {' A' }, i% v8 Z, L, _                /*        for(i=0;i<4;i++)
( s+ p. f2 @1 a* B* o6 A  w" t5 n                        {" ^5 W( d( G: L2 ~
                                P2 = seg;' i& Y9 N; y4 O/ i, X9 u6 r% S( a

8 S+ M' a, f- \' C- a
, y5 j9 Q6 n. a6 z% U9 z…………限于本文篇幅 余下代码请从论坛下载附件…………" ?# ^  E4 y. R+ E

0 O8 S3 r. a8 k7 f5 N# g; h
游客,如果您要查看本帖隐藏内容请回复

7 d3 p0 Q  T$ u, |$ j( K

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-19 22:11 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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