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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
HX711电子秤单片机源程序 已经投入实际应用
" c% D- z1 U. B& Z/ x( T2 ^) t" x
/这个程序是网友提供,里面有个 "读HX711 AD数据子程序" 仅供参考,7 M, c1 Q$ o/ }+ o2 ^" D/ R
//有客户反应说:发现这个函数Sampling出现问题,各位看着办,酌情使用
' r  s( n  W% e' ~8 n! K
3 U* ?; e. d% q7 i* kHX711单片机源程序:

  w; f9 p( w  Q/ z: I0 b$ V" i#include <reg52.h>
, b. r6 v5 v* M4 t" D#include <intrins.h>5 g  N0 @* r! a" R- p/ ]
#include <stdio.h>
4 F  y; O& y7 J8 E" P
! Y+ p: ?; f3 r" [: a9 J' wsbit ADDO=P2^0;
1 t  ?8 q8 r0 _$ ^6 ?sbit ADSK=P2^1;
- d# w' t/ R  usbit led1=P2^4;- b1 ^* w" u9 a2 y6 T. p
sbit led2=P2^5;
4 e9 e5 _& L# M5 g" G- Dsbit led3=P2^6;
7 c: u6 _: r/ {* y0 @6 z0 Z7 psbit led4=P2^7; " @' m  a" Z, \; F$ k5 X
4 p1 S+ G, t0 R7 I, l
//unsigned char key;
, ?1 u. _/ L/ E3 |' U8 H, `- e4 `  ~$ A- J
unsigned char code disp_code[] =. ^8 r2 }- T6 m6 @" ^- \. I
{
5 w/ l; E: A3 s& N9 Z2 C  //显示码数组+ E% F" q+ z0 W) {$ p% f
  0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88,
, p# n5 ?* E6 r. C' h& |  0x83, 0xc6, 0xa1, 0x86, 0x8e, 0xbf
6 w* E2 Q9 o, W9 a. K+ {3 K};
: [( t# V& [/ T" o  _6 u
7 m1 M+ @, v$ D' aunsigned char code seg[]={0x7f,0xbf,0xdf,0xef};//分别对应相应的数码管点亮
, V5 _" `5 i4 w+ U) i8 r  a7 U; \4 F; C: C
/**********************************************************
1 A4 i5 F6 t' F& c0 w+ C. X( {* Y- Y% h
延时子函数& ~% a) m* _( W# c7 D: ^
8 |6 y* ?( W- u5 n7 Q+ s% k9 J! Q: d
**********************************************************/5 }- f* t% j/ V4 u
void delayms(unsigned int ms)
2 w; p' M9 v5 @' f4 Y{1 M1 X9 {. ^7 _! b& w' c
  unsigned char t;
0 o1 \# A+ }2 s/ U  while (ms--)
* i* h  d0 J) f  Z9 Q7 [  {
* ^" M+ G  y$ q0 f; I1 g    for (t = 0; t < 114; t++)- L: r$ S4 k6 h5 O+ [' s
      ;
/ g. G8 _* @& |. A  }
, R6 B1 G# r8 T& l7 {/ J}
! _% i5 q' x0 S. M8 a- n# z  r7 `5 ^8 V  q1 ~* t# T
/**********************************************************& Y6 U: h- P* ?- ~" z7 L

0 G. I+ Z" \' i: V/ H! Cx*0.14MS 延时子函数
9 m8 ^) j' a' S4 Y' Z! @# \  V  ^, L/ l$ h0 M
**********************************************************/& Z3 X1 ~7 t% U
void delayus(unsigned char x)' f: R1 ^* r2 _  Z/ F7 x
{/ \' u7 k5 b3 d4 J+ }' _5 D& @
  unsigned char i;) A3 t5 T8 n: h* s& I% C0 W6 |4 _
  while (x--)5 c5 e) S" `, ~8 T
  {2 C# k2 B7 u  L
    for (i = 0; i < 14; i++)" y8 ^2 G) r! `* {! t( D8 T2 E" v& u+ C
    {
6 x" G4 k, V8 j) V) Y& ~" d6 N8 d6 V      ;
3 j  q- ]+ N  R( P" n    }( J  |, H( M$ e! o- o3 U
  }
4 D( Y( k0 N- C' _0 w$ q}' x: o' ^% ]* v% b# i4 w; d2 N, f. H
! B7 t$ a( n& r7 l
/**********************************************************( |% T$ [* R+ {6 A  k, p

3 J& Z0 w" M, ~& C4 T0 F  W9 `" p读711 AD数据子程序, D3 `' C6 C3 S
/ x0 i$ E# v3 _' M
**********************************************************/# {  h( o+ S/ @% \5 c+ K
unsigned long ReadCount(void)) j7 T* j1 C$ }. M- J! h
{
3 J5 v; Z5 q3 ^        unsigned long Count;
, l3 l2 g1 Y% l" \1 k& E        unsigned int ADval;- n+ n- ?% M  `6 K2 Y5 _
        unsigned char i;
* f3 q' E9 [7 k        ADDO=1;
$ r$ N! g! ]1 N$ b        ADSK=0;
9 s- s+ A: W: F) u1 B" ^. p        Count=0; ( Q- ?0 Y; h. |7 H( }$ |
        while(ADDO);
' R# j3 L* J6 o$ `* r0 f4 w! u        for(i=0;i<24;i++)   //读24个bit
& g, ~' y. Z3 j7 a; p        {
) ~+ b& l9 @9 z: l                ADSK=1;
+ G. K, e9 Z2 g' s1 |- G9 A                Count=Count<<1;
5 J3 x; J# R3 P# M0 {+ R. l( x3 I                ADSK=0; - v/ d' X& Z" g$ J5 e* h
                  if(ADDO)Count++;
6 j/ K6 Z& Z9 E6 K5 |9 S! o! q/ ~! d        }
0 E$ A) Y, J6 L( U+ V5 I        ADSK=1; //发送第25个脉冲,表示下次转换使用A通道128db
* U, _7 D3 w9 `' {4 i//        Count=Count^0x800000;
9 K& ?4 @! t& Q% ~$ V        ;& ^1 O1 z4 d& y5 U% _
        ADSK=0;         ' F! t; I8 I4 |5 V7 Z0 Y
/*        if((Count & 0x800000) == 0x800000)
+ N- E% ?- O- {6 p" E        {* X' h) y' V0 u, L4 [
                Count = ~(Count - 1);
; b7 s# z. Q' S        }                  *// f- k* y) Z8 x1 Z% `' ?" o5 T5 u
//        ADval = (int)(Count >> 8);//取高十六位有效值 3 D5 w/ `/ U3 A: _6 N" r2 ~
        ADval = (int)(Count>>8);3 \" c, C- G) s% ?3 j! L$ \
//        ADDO=1;3 Q# X' r5 U4 c4 O' Z  a
        return(ADval);
3 n' ~  w8 ?/ \: ?5 n} ! A1 `1 F  J2 Z% g9 m, ~* _( V
' r; ~* M& n1 m1 w4 x, g6 a+ I7 U8 @, p3 T9 |
/**********************************************************
4 a& a" ]# O9 M0 O. g5 B1 [  n0 [
AD采样处理——算术平均数字滤波
. t/ T/ J0 m' s; _. @' J) T% G; i$ T0 I: @7 ]6 V
**********************************************************/, M: M0 |- i, h0 H, F) Z
unsigned long Sampling(void)3 n' U; q/ @% H; o6 G; ]& i8 T% d
{ " V& g; [1 g5 S: k4 g" m- w: O
        unsigned int Sam[12],tmpmax,tmpmin,sum=0,Average;
. ^- U) R1 v- x( _) O5 m; w        unsigned char i;
7 r( {# N- S4 f3 i0 l4 F) {4 f9 E% s; v7 Y6 H" u: M3 i
        for(i=0;i<12;i++)
4 i/ ]: B9 T- Y- U0 D( [9 @        {5 s) V* h, S4 x' R9 O, U$ h3 W
                Sam=ReadCount();
; v/ \# E, u  t                if(i==0)* s- t. {0 J/ @6 I
                {' |2 D( V( _% B* T; v
                        tmpmax=Sam[0];7 o+ n- M+ \9 I! _3 Z/ J
                        tmpmin=Sam[0];0 A& A+ K8 ~4 C: I7 Y
                }
3 x' V  l5 j, P& i/ I                if(i>0)) Y, t% d* ~6 K1 t/ ~0 T5 p
                {
1 [7 \% Y( C/ g8 i4 j& D                        if(Sam>tmpmax)tmpmax=Sam;
3 I$ Y' @" ]& [                        if(Sam<tmpmin)tmpmin=Sam;
$ |9 T% h$ J% d9 @! R                }& d" B" x: ~! O: N, n- F1 w0 b
        }* a, [" g1 ^6 y1 y
1 r  k" u* {0 d' n% U7 g! ^" T
        for(i=0;i<12;i++)1 l8 u! s& s( Q+ t6 o1 V
        {
3 d$ O, A- B0 j( q1 l* m, r' D# E8 p                if(!(Sam==tmpmax||Sam==tmpmin))/ n0 T" o/ d% K5 n5 _1 h+ J$ L
                {% y- j7 d& V5 Y5 ^
                        sum=sum+Sam;        ; x" q8 @/ K) M
                }
0 i' d& u" Q8 U, U  m        }
6 |) A+ K2 Q* {& G" D9 q        Average=sum/10;6 R; |1 B- W; |
+ I1 P, X4 E' M" ], l" j+ @$ O) C7 q! w
        return(Average);
' H0 L  Z/ V7 c: a4 z5 V. @9 O+ \5 L}
0 ]. [' J% ?8 B6 q9 H
: E+ [- ^- [2 c+ J/ y# \& Z; S/**********************************************************5 c# ?, a3 e) H# ]6 x( F+ _, O

4 H, _6 T5 M, `% W  Y重量值数码管显示子程序
3 @& Z( u, m+ N3 c1 r+ A6 R0 ]1 R% `+ i
**********************************************************/
1 a6 }7 h' d7 X1 Uvoid displayheight(void)
1 |1 K' K. K5 @6 J{) X/ b2 F( V0 r0 O
        unsigned int Lheight;
$ S: T' u+ T# U- H0 K$ d3 f        float Tempheight;
% J# ~' w. h- d+ K& |0 N        unsigned char i,j,height[2],discode[4];
, |) Z: J0 J+ W$ l' h/ A# N' ^1 ?6 e( W9 p3 q

% A$ s8 k5 }& k& C* o: Y//        while(1)
2 X3 `1 M) ?! c5 f$ H$ x        {
1 o4 }0 A1 S# K' o2 w7 f$ O- A                Lheight = ReadCount()-1500;
% z( D3 k: `( L) v4 P! h5 Q! Q                if(Lheight<0)Lheight=0;9 R  q6 ~; V/ u
                Tempheight=(float)(Lheight/1.4);
' J. t4 A: `8 ?4 B2 z                Lheight=(int)(Tempheight);) B0 x+ N/ k% U  M+ l$ c

% B+ ?# e: e* t
0 ^9 d$ K6 b2 \& ~+ Z9 M# }        /*        discode[0]=Lheight%16;
9 I0 |. V& Z: [4 I# W                discode[1]=(Lheight%256)/16;# e+ b( U4 q( S. g8 }( X
                discode[2]=(Lheight%4096)/256;
5 O5 e* |* q3 N9 _4 P, I% G- r                discode[3]=(Lheight%65536)/4096;          */
7 R% W. G; I3 M: v
2 J. S) q/ Q; @. n, s        //        tmp10=discode[3]*4096+discode[2]*256+discode[1]*16+discode[0];         + C% H# ~( S! ~" N$ B) a% [1 J! n

) Q3 M' _% _6 T3 c- M  L9 h                discode[0]=Lheight%10;, [5 Y" b/ Y  T6 q) h
                discode[1]=(Lheight%100)/10;
5 q( \; H- Y/ |  s- p                discode[2]=(Lheight%1000)/100;4 _0 r/ z, ^' R& Y* ]" }7 O
                discode[3]=(Lheight%10000)/1000;                  
! x, h2 w, L9 `% I8 {6 \. S( p* |$ p
7 C0 J! D" P+ p4 F                for(j=0;j<250;j++)& B* X) W! h3 e- N! H
                {( n& f; |4 ?- e: N/ {
                        for(i=0;i<4;i++)
: R6 W) V- [- B                        {
" p1 G" R& u6 H: s# c( K                                if(i==0){led1=0;led2=1;led3=1;led4=1;}) {8 p8 q3 a+ z" Z
                                if(i==1){led1=1;led2=0;led3=1;led4=1;}
/ r" L* t: h+ ?3 M; o( S+ f' c# @. l                                if(i==2){led1=1;led2=1;led3=0;led4=1;}0 ]! ~) h+ l+ ?# M* n5 t
                                if(i==3){led1=1;led2=1;led3=1;led4=0;}
! I# p  N7 T  L' o  m+ Y                                P0 = disp_code[discode]; 6 p7 c0 X" [# w  L: u
                                delayms(2);! i) @3 R3 y5 M- ^
                        }
0 B3 ~4 Y1 c# d- {                }- b6 O/ w: }" D0 j2 U
                led1=1;led2=1;led3=1;led4=1;
9 V$ V0 J  c+ ~/ ]$ I                Lheight=0;
5 B9 O" g5 K: O, D7 p% W0 @        }
! X2 ~: E. W- D}1 Y# |3 a- |% u; Y* T1 N

7 c( g# v/ z  W3 c- _5 v/**********************************************************
) @( _0 p& I' x4 ^* O/ Q: L! d$ d
* G& n0 ^' v& f  o  W主函数/ r! v! F+ J! R% N2 C0 B0 F
7 E, i9 p+ ^9 A
**********************************************************/
5 Z; L0 S9 S% fvoid main(void)+ ^4 n/ ]# v5 I- ]0 v
{
+ R" V. c. k$ K7 f% e6 x9 u" a//        unsigned long Lheight;2 y. ]/ L  }, @2 P1 B& ^
        unsigned char i;; X) D, y( w( K" h7 e% U% `- D
+ a! ~& X5 O- C/ l6 E. T& W) m
          P2 = 0x0f; //数码管初始显示"-"
$ Y! Y1 N  \3 y: t0 A' m# z" s' Y          P1 = 0xff;
" r- \- {. S' x1 b) ?          P0 = 0xbf;
3 r9 H) V- }7 ?, y  a% Q! O/ \4 s  F7 u: J) C/ d1 k
          while (1)% t) }8 q4 l8 V# s. v' x
          {
# s: {$ d  v4 ?                displayheight();5 N: S5 p2 T/ s8 N0 s" A0 C
                /*        for(i=0;i<4;i++)* K' M, O. U/ e! l. h
                        {
! Q/ j9 F# s5 U# M" N7 a, o& b                                P2 = seg;
" t& \2 `8 q# y% F, F, A4 G
7 H5 O. \# p4 M. B8 e& k! D* P- S
…………限于本文篇幅 余下代码请从论坛下载附件…………9 Q) e" H( q) I- h
8 A3 v* N# O7 H4 L
游客,如果您要查看本帖隐藏内容请回复

; {1 k& B  u9 y- \) O

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-29 11:30 , Processed in 0.078125 second(s), 26 queries , Gzip On.

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

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

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