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

基于单片机的电子秤设计 原理图和PCb图 源代码

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于单片机的电子秤设计 原理图和PCb图 源代码: l- Q8 F5 V* E8 i6 @8 E7 s

, p( K: G" _+ a4 e" ~5 m8 @1 @
1 ~& C: j' J/ E% \0 U' L0 U
原理图:
  s8 M3 _, d& K' w  V$ A, Q ' \& ?- d7 v5 G2 K; a7 {1 _
9 N* N$ e! }4 Y9 A9 Y. m
单片机源程序:

* X, n( e5 @9 K- ^1 a: |9 ^3 o1 {//程序采用的是模块化写法,你写论文时也分开写两个小标题把代码粘贴进去就行了。) K% B8 U, Z# z6 g7 a

& l! V( |* `' `& {

9 u0 Y& q9 U; s6 p
, [, Q6 i! M$ k( [) P

( Q; m" Q1 t: y7 _# ?1 ~$ c3 w
* }6 r* _8 i  j) o
4 A+ d" Q! _4 Y9 G; b
//HX711的AD转换代码7 L" i9 f8 E2 t- D
) z1 A* k: R6 n" `2 y9 Q

% w% @; L9 {1 y  M#include "HX711.h"  O, s' [& [* j

" I/ u; P% H+ m: `- O2 d6 x  Y6 P

4 T5 z" V' Z5 y$ \1 P$ K9 J# p1 Y* F8 j% [( i0 R
4 S  R5 A- b. l+ P" f9 P
//****************************************************
0 B. q7 u" r+ `5 @//延时函数* U7 _. |- p5 T% V) e! G
//****************************************************$ s/ Q2 M) F; p! n- y6 }
void Delay__hx711_us(void)  t/ ?5 T( n* ]# F# k. [
{
: g, ]+ I% J/ m+ s        _nop_();
& W: I% y4 j5 r- K7 B1 f- X        _nop_();, Z. V, Z! q/ J7 B( @% ?+ ?
}
: ^5 ^) W0 ?, A/ M' [. v& @. h+ l; P- [3 S- W  h
" N0 j0 M3 V. C' L
//****************************************************
+ Z, k; N& e$ W8 N$ O//读取HX711
" E5 P* [3 h- ^( F- h' o( b' i6 j//****************************************************
+ k) b' c" g# v, V: `unsigned long HX711_Read(void)        //增益128
9 ~5 t9 z5 n; z/ f. c{/ B) }9 `& `8 F" R7 p4 ?; y
        unsigned long count; - o$ X- M* W8 l% v: x
        unsigned char i; % o5 w2 ]4 }3 Q: R3 `" m; {. I4 H2 `6 E
          HX711_DOUT=1; + m: b; q3 W8 g# H8 v
        Delay__hx711_us();
0 \) E. l' s, L: d1 R; f& E          HX711_SCK=0;
, l& z' d0 U) R+ E6 T          count=0;
1 E# S% z( P/ ?7 n          while(HX711_DOUT); % u( e! l) o0 R$ \. p
          for(i=0;i<48;i++)7 F; a+ g3 O2 z6 q1 d3 L
        {
2 t+ V/ Z1 L8 e6 u) j                  HX711_SCK=1; 8 ?( {" Y% C) |' E5 @
                  count=count<<1;
( f; M7 V3 u' D. P7 b                HX711_SCK=0; ; \/ F, x5 v8 l/ l5 g$ d. [* d3 c
                  if(HX711_DOUT)
) |+ q8 @2 T( Y! u- d                        count++;
3 \# e4 e) B! \        } 1 x* p) U! C# s  M/ u( G8 t9 }
         HX711_SCK=1; & P  m) i2 ^6 U0 r$ u3 h
    count=count^0x008000;//第25个脉冲下降沿来时,转换数据' c2 Q. g) Y$ @8 f* Y  M  t: x0 Q
        Delay__hx711_us();
8 w9 k6 O+ g! X5 p        HX711_SCK=0;  - N$ X1 x. m, s; \* j+ ]7 B0 r
        return(count);, l4 v0 d5 M1 q! C7 }+ J1 k
}
' ~2 X% u) h, c6 d' R0 e4 n% Y4 {- D
  n" {# s9 u% S+ n
  h& }. E2 e' n4 A! `; p) y3 k7 T

% z& q& O; I3 I7 Y$ W9 K主函数程序
, ^/ Y% V6 Z) L/ \. R- q
! x! V- @6 h" ^. |% e, d7 X
2 J) h& e7 @+ X5 {/ A9 e
#include <reg52.h>/ Z0 q5 `8 I+ B
#include <intrins.h>
$ k- E9 {3 z+ ?% x3 o; Z0 W' e$ v; e2 ~#include <string.h>
; |8 T1 ~3 N( j& r+ w5 R& ~; k#include "main.h"
3 x3 V7 e7 t) u#include "HX711.h"+ X+ l- Y4 o; P$ d! N6 ~# K' |) I9 {
#include "eeprom52.h"( N# m6 \  |( N" w- M* J9 w
. T, E) S$ H% S3 ~4 \

) C# g  Q% ^: t9 q  q' h- @+ e#define uchar unsigned char
) O$ N2 L/ i0 w#define uint  unsigned int
4 ]* t* o4 B- W- k/ b3 A' I0 s. Ruchar qianwei,baiwei,gewei,shiwei;- V- h4 \1 n; h. q# N# a
unsigned long HX711_Buffer = 0;
! x/ s: W; f, w/ Kunsigned long Weight_Maopi = 0;- @. s  w! |5 E; ?. ~9 {$ \
unsigned long Weight_Maopi_0 = 0;6 y+ @4 z# }) e2 T" L- A
long Weight_Shiwu = 0;$ f& Y" ]1 [, |( J- ]
unsigned int qupi=0;
) p; b/ C! h. j4 _unsigned char p=0;
% c! `+ }  l( k# U5 y//键盘处理变量
. p: j$ Q1 Q2 e( Z( U' Zunsigned char keycode;4 d& L; ~6 m- ~1 z, \& E3 N
unsigned char key_press_num=0;
* Y7 T/ a0 h. u3 S1 `3 V8 P, G2 }: E$ a
8 @5 M  ^% H2 t, z! Y- h: D2 n6 y
uint GapValue,GapValue1;4 C& a% Y, A6 [6 `9 N& @4 l% O
bit flag_cz=0;$ d# u' T' [  ?0 y5 q9 n
7 ]+ K8 X: L- K: u( l
, `. q  t5 V% J6 [  J% f& Q
//uchar code  LEDData[]={0x5F,0x44,0x9D,0xD4,0xC6,0xD3,0xDB,0x57,0xDF,0xD7,0xCF,0xaA,0x9B,0xDC,0x9B,0x8B}; //数码管显示码表
" E. @3 _1 K/ W3 T. D- D//定义标识7 R, _0 z2 j! U7 g5 {
volatile bit FlagTest = 0;                //定时测试标志,每0.5秒置位,测完清0
. ?  j6 c+ m  A% w' bvolatile bit FlagKeyPress = 0;  //有键按下标志,处理完毕清02 Y5 P# f, h  }: }
//校准参数
- B7 _- m5 I1 x( o//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
! e1 `" J6 B, z# z( @$ Y1 ?  p//当发现测试出来的重量偏大时,增加该数值。1 ]  y7 h7 f( _/ R' ?
//如果测试出来的重量偏小时,减小改数值。
, |9 H' F$ F( T//该值可以为小数
+ c/ a7 L  p0 y//#define GapValue 349) ^( K) P* o& B) W- O. t1 j
sbit LED=P1^1;( k0 W( d! i# r3 T& p
sbit ROW1=P3^0;
5 q+ Y8 R# @6 v: g' Tsbit ROW2=P3^1;( c3 h" \5 y  E8 h) x- b9 g7 M+ S/ z
sbit ROW3=P3^2;7 i8 k- b8 w' B" D
sbit ROW4=P3^3;
1 ?* ~* {$ _1 ?- i2 B//sbit DIAN = P0^6;                        //小数点/ d& z# Z1 k3 Z3 ~6 G+ u
sbit rs=P0^7;* r, u- }/ S3 p& T# G$ k
sbit rw=P0^6;8 l, ~  m8 o% n
sbit en=P0^5;! `# _+ H; _/ o
sbit D1=P2^0;
; g- L; f2 i' f) }9 V" ~' {5 W
* K$ A" o  u* W
- |' p) r' h+ l  Y( h* c
volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂
+ e6 Q% f# x0 ?4 q
  r! ~5 h7 J. e' s

! c( m+ h  t6 Z) x/******************把数据保存到单片机内部eeprom中******************/
( {/ ~" H* n2 f6 s& P6 s0 Fvoid write_eeprom()9 I: B5 G4 j, a& f9 m2 Q- v
{3 u# X; ~* I/ ~9 M
        SectorErase(0x1080);+ ^9 s( ^- w' e) Y* Z6 f: v
        GapValue1=GapValue&0x00ff;
2 A4 O& J" u: n8 j& q% e        byte_write(0x1000, GapValue1);  s/ I- G/ w( S4 x; b4 U
        GapValue1=(GapValue&0xff00)>>8;
$ H) B- G' S& M        byte_write(0x1001, GapValue1);
7 b) Z# I6 W- |7 |        byte_write(0x1060, a_a);        ( I2 z+ u- L5 n% u8 b9 |6 R
}7 T- T, T' z& B( R) K& r

" E3 u2 F2 F$ l" W/ `

* \- C# s2 P2 r/******************把数据从单片机内部eeprom中读出来*****************/
0 }2 h6 ^# p1 @3 p' m) b% avoid read_eeprom()% P6 `5 s6 E& |/ X
{) p1 X9 H7 M: [7 T& c2 `" ?7 H
        GapValue   = byte_read(0x1001);
" g  ?1 }- n2 R; Z9 B6 O4 u9 X! {        GapValue   = (GapValue<<8)|byte_read(0x1000);
7 E) c# n2 G& u5 w0 [: u. m* C        a_a      = byte_read(0x1060);
$ s5 y) C" t, t- K1 K2 }( Q}  \4 i" D* S0 n; y
* w* U2 r; X( N) g; z5 r$ f
9 Q$ F6 @5 c" T+ ]( {2 ^4 c
/**************开机自检eeprom初始化*****************/; G: H. y9 @* S4 i# ^9 |7 Q
void init_eeprom() 5 w, @5 [9 Z6 j3 ]! v
{6 \& Z9 p. }" O/ R
        read_eeprom();                //先读
% f0 f  W1 a4 V) m        if(a_a == 1)                //新的单片机初始单片机内问eeprom
( W6 z4 I7 {2 [) ]$ u        {) N" i; ]/ h& M' E+ d$ G: i% M# X% o
                GapValue  = 3500;
0 ~: E$ R. O: q5 ^4 u                a_a = 1;
6 ^) e9 C  S; r7 `) d1 @0 n0 G9 z                write_eeprom();           //保存数据) _7 U% W; t; R# H7 u( A
        }        
% L; t# d; K: J0 p- }}. F, I; o6 Y5 R' Z7 p) L/ [
void delayms(uint xms)                //延时
& x8 ^* ?3 v2 i5 K {$ U& ?( u7 m3 l: m( _! i+ R7 B
         uchar i,j;
  D( O: t/ f# i! y        for(i=xms;i>0;i--)  `# E0 r$ w0 n7 p8 h. t
                for(j=110;j>0;j--);" t1 ^7 B6 d2 R# `, U
}
6 X2 a" T1 I% w. x9 yvoid write_com(uchar com)                 //写命令  o$ d+ o& f1 U- j: P: R9 p! D' r( j
{
, G9 o  p, ]1 o9 c: ?7 m         rs=0;
  K: C2 C8 o6 N! Y1 A0 G' q5 s2 A5 s//        P2=change(com);
) M0 }: A4 L) z4 R1 G1 {  t9 W        P2=com;  e, q0 A1 T2 F, W$ Z  P! T5 N  L- c
        delayms(50);
) p' f) t$ T4 k5 d# h, m1 k        en=1;1 U; X) X8 S& a' k
        delayms(50);+ W7 t- o& G8 U8 p, w
        en=0;        
6 S% w! I1 o' Q  W8 b }
1 B+ M; H, t" I/ N* w void write_dat(uchar dat)             //写数据/ _  O8 R' i& |& J. M' q* U8 l
{4 \0 `" E) Q7 g; y/ f$ l5 @
         rs=1;
1 y  {4 N( [% f& U8 L6 j//        P2=change(dat);         * l, t4 Z9 V+ Q; |0 {
        P2=dat;$ X4 _+ S! o3 u: k) x
        en=1;: ~& w+ M! @7 C7 p/ r' K
        delayms(50);
1 N5 B4 i4 d: ^* U        en=0;4 }7 v; v1 F) v  ]# ]5 Q
}1 K, M: H$ c3 W5 G
void init()                                        //液晶初始化( k7 W$ e- f" z2 g
{
0 Q* c& A6 ?# C- g* c         rw=0;
. a% G1 O0 G, Y9 {/ d! t        write_com(0x38);
5 V) A/ Q) a5 L9 I3 \        write_com(0x0c);  2 _; k# V9 A3 N
        write_com(0x06);( Q9 y' ]* Y" x: Y3 F8 N# u+ u/ p: H
        //write_com(0x01);
8 B  f4 ^* v+ x' U: n }        
- f( M: ~, d( j7 g$ g0 J. h$ f, x# C/*****显示开机初始化等待画面*****/( t; e5 R) x5 [  |/ k
/*
8 P4 h  p6 W. m. V1 r+ a) T* pvoid Disp_init(void)   
* f. n% Q4 j8 E" Y{6 M7 U5 e* d" S+ T: I
        P0 = 0x80;      //显示----( z" e  \8 H4 x8 P* ~1 Z
        P2 = 0xBF;                 //依次打开各位
* p. U3 U" F9 u" ?6 z' W        Delay_ms(1);                 //延时
- ?& M" v* ^" B) i) T! n/ c2 ~! l        P2 = 0xEF;" ?  z9 |- N7 s+ e; ]
        Delay_ms(1);   / x1 J. R9 j/ y
        P2 = 0xFB;9 [* L- L0 O: f4 m
        Delay_ms(1);
* T, ~% t8 y& ~, `        P2 = 0xFE;. @& e, c' [# l" J. W
        Delay_ms(1);
7 W  I- v5 k; T  N/ T# F7 P        P2 = 0xFF;         //关闭显示
; K$ ?& H" A8 Q' v) J}
8 v2 ^+ a- S0 \5 h. k$ w*/! b6 Y! Y/ X6 v6 ]: Q6 P; H
//显示重量,单位kg,两位整数,三位小数
6 Y! J4 l2 C  r% l, O1 I& W3 s" U- Qvoid Display_Weight()
  _; ^3 `2 L2 u+ X8 v. Y7 I{                                                                                                                                                                                                                                                                                                                                            ;- l' J# m. @' \
                        qianwei=Weight_Shiwu/1000%10;( z, m% J: ?4 H# N: w. m
                         baiwei=Weight_Shiwu/100%10;                                                                                                                                                                                                                                                                                                                       ;% ]; ]; b: b3 N* O% ^
                        shiwei=Weight_Shiwu%100/10;
) j$ i) }8 ^5 s                        gewei=Weight_Shiwu%100%10;
- n5 b% @! F5 e  o6 @8 l; O: O                        write_com(0x80+2);
3 N, O% V  @( R' I
4 {5 r$ g* h7 h3 q! m7 |
/ t) g4 P# ]& M2 C
                    write_dat(qianwei+'0');
6 D5 u5 }1 x6 ]0 x                        write_dat('.');" C! W. H/ X2 r  k
                        write_dat(baiwei+'0');
  A3 }& N$ Y$ w, d" A                         write_dat(shiwei+'0');                 
# b- {# B' H& f/ N2 y9 e+ }                        write_dat(gewei+'0');
. f; z4 K/ r. V7 `                / z4 u$ c8 I& u+ N* `$ ^
  
6 t) W6 d+ J0 l9 c" }}  4 C; k& @) E3 l7 g( K7 j8 \+ Z

* e# N! R8 s9 q& [4 \

) A. r. e1 t3 u$ s8 E; r//定时器0初始化7 ^% z5 u. T) ]6 X  H% L' K* |
void Timer0_Init()
1 R. D6 X+ C7 `4 K5 O4 e{7 ?5 z4 s6 H$ B$ a8 T9 t
        ET0 = 1;        //允许定时器0中断* @* `) l6 A  j" o+ r' d
        TMOD = 1;       //定时器工作方式选择
3 ~+ s9 d" F7 W& s        TH0 = 0xb0;     2 W9 \$ h& t3 d9 s" F, q/ W
        TL0 = 0x3c;     //定时器赋予初值& E' K$ p; `: y' M0 B2 m  s& _
        TR0 = 1;        //启动定时器
& g4 W* h2 Q& p2 v' v) u* U}& a/ O& A) Q* U& u

8 l" Q  j8 \& X7 w/ L' Y% u/ N4 X
1 V. k  y9 W6 p+ J+ x: c/ E' E' j% E
//定时器0中断9 ]$ i5 a9 d: u( v# X
void Timer0_ISR (void) interrupt 1 using 0
) q, V: s- C# O+ m; q: l{
6 Q% J2 }5 u. T% iuchar Counter;; H7 q2 H7 X% i
        TH0 = 0xb0;5 Y" S7 E0 ]  P+ i: B% P
        TL0 = 0x3c;     //定时器赋予初值
1 i2 H7 \- j7 a  {  ~5 n; G4 B  p# E$ L: D

; J6 ^; I$ B- c        //每0.5秒钟刷新重量3 |( Y; ]& P- g$ }2 A% w
    Counter ++;! q8 C- `! f; ^4 y- i
    if (Counter >= 10)
# D# E" ^: V! A" b0 S2 E    {
; n& u+ r/ g# s! i5 l1 I1 y       FlagTest = 1;
6 E* o( k# b8 k3 d' d           Counter = 0;
/ b0 U* A0 ^3 i9 O7 S    }) f) z) V& k/ u* c
}' ^/ _/ r# L; C7 y$ a
. P/ o2 C2 T. W2 X) l

  h5 a$ T* N3 d" O' E9 J  I
4 u# _0 g+ `; r5 `: _" A
7 W% \9 a7 w. b% h
//按键响应程序,参数是键值
/ T: q8 s4 |1 C" L3 m/ S4 _; m; L//返回键值:6 m1 a$ p  O0 e4 r/ Z
//         7          8    9      10(清0)
- x+ t/ U. [* `  Y& T, T: y//         4          5    6      11(删除)( |1 n, p! j/ ]  l+ s
//         1          2    3      12(未定义)
  I6 C/ P- v3 }) k1 T//         14(未定义) 0    15(.)  13(确定价格)* v1 }, P; _  ~( o% L- Q5 o+ c

6 `( G' x7 O6 Q

# h0 |" E4 P% _. j) {& X5 D  Hvoid KeyPress()% a1 j/ f+ Q$ p$ a
{3 Z. D7 O) e  ~+ x
        if(ROW1==0)   //清零键
+ u2 b; l: n' f! W9 H        {% i) U* i- W5 @1 E
                Display_Weight();% E+ v5 C7 \4 w
                if(ROW1==0)
% G: m$ W! v$ g                {
6 h, W9 m; }8 E  l( m, B                        if(qupi==0)' r$ @' m* U1 g: b5 S0 o, C
                        qupi=Weight_Shiwu;1 x3 @4 ~5 c5 {6 S: p
                        else. d2 _7 z: ^2 q
                        qupi=0;
0 K1 W. C& ~; @5 j                        Buzzer=1;
% m0 I! V+ K$ C) q* k: H+ @                        for(p=0;p<10;p++)0 l1 ^, i' A: O" W4 D% Y
                        Display_Weight();+ ^; @! @" E& E' q* N" o5 X
                        Buzzer=0;        
3 M" L! |* L7 N" f3 ]4 |5 W                        while(ROW1==0) Display_Weight();9 @9 M( E5 r  l1 X
                }
, w5 M$ b/ `4 @6 u6 m2 U        }
1 k' p0 A* o, f2 ?& m! f4 h        if(ROW2==0)           //加+ b) ]9 g  p$ O: E1 `1 v! B
        {- O. s0 N: Y5 c+ o! N5 j. \0 f2 m
                Display_Weight();
3 B' I8 T6 [: k                if(ROW2==0)
+ ~1 z9 x( I% W) S4 {8 P                {
1 W7 M! u7 S; q% W& m9 V9 h                        while(!ROW2)7 `' Y: ]& x' ^1 Q& R3 |: e( E
                        {
* O/ s/ S! q" q5 D$ r                                key_press_num++;1 _3 Y! p( B1 f
                                if(key_press_num>=100): P/ B/ X; h& R$ s; W
                                {
( a% E9 t0 d3 Z3 l                                        key_press_num=0;
1 N8 x% d+ b& @7 h4 N! M, D, X                                        while(ROW2)1 V/ K) v9 I9 z) o% }! i/ u
                                        {# a% k' ~5 K9 f7 D3 I# N$ g2 t
                                                if(GapValue<10000)
; Q9 c8 B9 U) Q0 i  ^                                                GapValue++;% q" a- }5 z, v4 U3 c8 Z& k' `7 e
                                                Buzzer=0;
! z% D  U# w7 n1 B( d3 v1 _9 P                                                for(p=0;p<2;p++)
. V, }+ F, S4 a                                                Display_Weight();  f+ Q3 A; r! ^' [/ d, ]  l
                                                Buzzer=1;
. F' U# w/ h1 X, ?5 J                                                for(p=0;p<2;p++). O) B1 g- ^  D# `! l  z
                                                Display_Weight();
) @4 N' @9 m$ E& n                                                Get_Weight();% r, P' _# [9 M1 V
                                        }
/ S# @$ p  m& p9 e, I2 E& k                                }
3 Q' D8 t. p- t. n# x                                Display_Weight();
+ V& @( `5 D6 k9 a* H: z2 o: k                                Delay_ms(8);
# E% Y' F; i2 L2 D  E, P$ b+ t                        }
0 b- G. _! F7 |                        if(key_press_num==0)* ]2 L7 Q9 y0 w- Q" Z4 `
                        {" E$ S  t$ I! |7 Y
                                key_press_num=0;+ i+ Y7 v1 K8 z" }
                                if(GapValue>10000)- O7 E6 q1 W0 _
                                GapValue++;2 M2 Z  d5 z7 r% Q
                                Buzzer=0;0 z. _# v$ S, g; I" C, ]2 H0 J
                                for(p=0;p<10;p++)5 V  V' @" r) I3 }0 E& C
                                Display_Weight();8 w- Z0 T9 j$ b: z8 Z- m6 l
                                Buzzer=1;5 _% N' L, I9 |7 v# ]9 S% g7 m
                        }0 f% @3 j! c" @' T3 z# A% L
                        write_eeprom();                * r) }  J3 }( X! @2 M8 r  v
                }
6 N. C9 j, M2 N- T  _" c' p/ L        }
1 J: g% J# ?" ^* C7 y& R        if(ROW3==0)  //减
+ U' a) r* Z5 _0 H        {# \6 U7 l0 A0 X; W' q! e
                Display_Weight();
, o# s: Q( o8 y6 a                if(ROW3==0)
! r3 R8 a/ H  H. o# [5 g: R# w7 L                {
1 v, o) _( T$ F2 X! Y                        while(ROW3)
. ?. k$ V  b6 ~% j                        {
* U4 g# A, {5 M$ P( ?                                key_press_num++;& \: F  i6 B5 C9 s; ?
                                if(key_press_num>=100)
6 c* J, H7 E; _5 C) U; Q; T                                {3 v8 L& K6 v6 n, [0 o
                                        key_press_num=0;/ ?  u$ g! U; a1 m* ~
                                        while(ROW3)
" v6 ^6 N6 o; L; X: l2 s                                        {
" b. i2 z. B3 D2 M6 E                                                if(GapValue>1)
* c: A$ O8 x1 j8 ]  t- T. m                                                GapValue--;' ]. }1 h& s; j, ^4 q2 ^  ?
                                                Buzzer=0;6 G, z1 r8 N+ j3 s- ?7 h
                                                for(p=0;p<2;p++)# `2 j! |* L' f1 d
                                                Display_Weight();
+ m8 [5 J7 J" u                                                Buzzer=1;8 N3 e5 \5 U% ]! ]8 M- f
                                                for(p=0;p<2;p++)
3 @1 {$ }) ~4 _& q/ x: C: p$ b3 ]                                                Display_Weight();: w4 Z" E0 H9 G; c# V, G2 a
                                                Get_Weight();  J% Z' u5 }0 ]0 }' V0 X$ o
                                        }
/ z+ f% A8 U" l6 Y                                }
$ H0 b' J1 X3 e) [1 F                                Display_Weight();
' t+ l7 o8 H# [, J6 C7 l. l1 _$ U$ D                                Delay_ms(8);  G8 H# [) t$ |
                        }
5 }) s1 \) V7 G! T4 Z                        if(key_press_num!=0)) {. S3 W) z! g+ [5 g, G& P* T% e: |
                        {
/ B9 s/ _0 c5 g" h2 I; h2 k- r% }                                key_press_num=0;9 q+ \  P2 g+ x
                                if(GapValue>1)1 r. @8 ^" S  o2 }8 \
                                GapValue--;. I& \& C7 k% z0 X( i  X
                                Buzzer=0;
0 V6 ~3 G& G" d; p                                for(p=0;p<10;p++)* X/ r+ L- \% _9 ^8 @
                                Display_Weight();, K; H1 U' Q5 {# y, E
                                Buzzer=1;7 I9 ]) y6 |! ]/ m) o+ v
                        }
9 n4 d8 }4 S+ o( a' ?+ }/ k                        write_eeprom();                           //保存数?" b1 T. B3 B; P) O6 s4 c* I
                }) M4 w1 O" }; R
        }' B' j% @: A' O2 Z+ g* ^
}% A$ \: D4 s& o& L% P! |7 D
//****************************************************. d0 l* A: s/ B0 F/ q
//主函数
2 z* K! P) c& m8 j. Z4 f//****************************************************
9 r! L, z9 l3 @void main()
4 A6 J8 {% s) i{        
* ^  C! |3 k# C0 U        init();1 j6 A1 _& u$ ~
        init_eeprom();  //开始初始化保存的数据
8 C& Z4 v+ o0 q) J. l9 L   EA = 0;; I) g" t2 i6 W8 o5 S
   Timer0_Init();
' ^% Q; y+ Y( U% O. A5 T   //初中始化完成,开断
9 ~: G* ^- ^( \9 c: U, A, \. N6 Z   EA = 0;0 a9 d* \' g1 S1 Z& K
   write_com(0x80+7);
9 Y. p& W- \1 m% {/ D1 e* P           write_dat('K');         
8 C- V* z* ~' k0 C/ j6 A' y        write_dat('g');, K' y; R* Z/ V+ N/ j# |, z0 [0 z
        while(1)9 x  I, S3 l) [5 U4 W( q$ V% A  y
        {                                                                         //每0.5秒称重一次' P, G* Y: z' a( P1 F7 p: O
               
" w2 X$ z" J6 P) h                if (FlagTest==1)
5 B; V4 O5 p# ^# e4 H9 f                {2 O7 c  B1 K' e( Y" N4 G0 Z! J
                        Get_Weight();0 T6 P. N0 r4 J/ j; L# O
                        FlagTest = 0;+ S0 K+ c& v( h# ?: X  b
                }
) y$ i: Q2 q' v' ~                if(flag_cz==1)+ x8 f" U1 W* v* f! }
                {( A5 [$ y# G5 e; U& v* a3 I
                        write_com(0x80+2);
- a% q* i. b& \( ^( {                           write_dat('0');
( S4 |: @  `4 E! J* V& l                           write_dat('.');
+ q5 H! W( \1 }8 l7 o& k1 N( y                        write_dat('0');
, [3 ^1 y: I0 p9 k                    write_dat('0');& E! s6 i6 ^5 Y0 @  G
            write_dat('0');- _. v% i2 P' v- L* Y1 p
                        write_dat('K');         5 c# G+ y3 t" m* C, Z2 R7 g
                        write_dat('g');" O. @8 L) u- W% ?2 z3 v
                }' i! b# o" [. U+ q8 c: m
                  % O' M: D+ j) I* o+ t9 b
                Display_Weight();         $ O) q" n$ g3 `) w5 K" s+ E+ I$ @2 P
                KeyPress();$ _3 d; L- T% L% b
        }
7 J* [' n+ T" g3 n% L! r& u}6 p4 S4 w2 U2 s1 W. Z
//****************************************************) a. x- A) D8 `0 N6 j
//称重
# V! b) W. V6 d; w) S3 V//****************************************************
" N; Y0 ?0 n2 o- b. d3 I7 Xvoid Get_Weight()9 \$ l! t' e5 d: H2 D( \
{
3 N" X* B+ q: y) T$ n        Weight_Shiwu = HX711_Read();
" d' J) c+ x0 L( q$ M        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重6 t8 x' q# s/ a0 c  r/ v
        $ ~: N( A' g4 \  C7 e
        Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu*10)/GapValue)-qupi;         //计算实物的实际重量                                                                                                                                ) C. g- _5 j1 }
        if(Weight_Shiwu <= 10000)                //超重报警7 s3 o6 E) h9 V
        {
3 z; _( F+ W; t) ]+ ^  _                Buzzer = !Buzzer;        
# ?! t3 d2 a9 |$ q                LED=!LED;
& U' \: ], P/ G$ s6 R5 w                flag_cz=0;
, u' O7 z& Y2 `        }
/ q0 r' t6 {$ o6 K3 J. ]: w- }1 `0 D        else. ]9 n; h% {' v' o5 H0 \1 ^
        {, ~2 H5 f* o. L* w
                if(Weight_Shiwu==0)( D, a6 a# c: v- @6 `  `
                LED=0;0 b+ I. v, s; D% @. W  f- _) K
                else if(Weight_Shiwu>0)+ [1 R* K! G8 b; f/ ]. ~
                LED=1;
/ q& l0 P4 [, [                Buzzer = 1;' w2 `- ?/ J- K  o5 {6 y0 |
                flag_cz=0;/ t6 n1 ~  n: Z" m: g6 {# _" Q
        }& y" t' ]1 \" e
}
  ?7 `; e' F1 \& T8 {' V…………限于本文篇幅 余下代码请从论坛下载附件…………
, {+ |$ N& P; q3 I1 K( G
% C& `' S: W! X$ t* e

+ ~; s: Y' _* ~2 p
2 p5 ^. a! x) q9 S
$ t! y5 G6 k" Y3 `
游客,如果您要查看本帖隐藏内容请回复

+ t& X0 s) U0 M2 Z1 i! {% ^+ b3 T( Q0 i, Q$ ~5 R
. ?; R2 c2 x1 J

该用户从未签到

3#
发表于 2019-2-27 15:35 | 只看该作者
看看楼主的原理图和pcb

该用户从未签到

5#
发表于 2019-4-23 16:18 | 只看该作者
谢谢楼主分享。

该用户从未签到

6#
发表于 2020-8-17 18:14 | 只看该作者
谢谢分享

“来自电巢APP”

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-1 16:02 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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