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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于单片机的电子秤设计 原理图和PCb图 源代码: [; f* v: N  e# i/ f( {0 |7 E

* ?% j. t( T$ p/ ^# }
) X# [9 u: A' k+ H; D" n
原理图:0 W& E1 u, _) y  \1 U, i9 b

4 ~5 |5 V# S; g0 S; i5 k  \8 p& D7 a" h
  L- ?" {3 [  W. t+ N6 v单片机源程序:
' V5 H* \1 q5 N8 i) F
//程序采用的是模块化写法,你写论文时也分开写两个小标题把代码粘贴进去就行了。
( ?1 \; G) ?+ A, c# ~* P6 `* p, @1 F' r* y8 y, l
' H( C" G5 X5 g8 n
6 Q7 ?9 d6 u& D+ g2 N" Y

* m, j( L1 [$ r  R) _3 U
* u# l; s: O2 w9 H8 h' l* U

) @& e& O. q4 _7 H//HX711的AD转换代码, W2 o4 v  _9 B. R- C  t* A0 |, B

* @2 j) j! f/ g  t

: Z  l( E# s+ _/ I& y: Z#include "HX711.h"
+ d1 t4 K$ P, q3 q  I) \* Z# V) b6 p$ _# o# }
9 V4 |2 r# j& j0 @

* A* o  H2 f# }; |: X
9 g$ w1 ~( S+ D+ i$ e, I
//****************************************************4 t* P: ?- `1 g# q
//延时函数1 f& H7 P( |, Q$ B; v1 h
//****************************************************
7 F9 T4 l: J; p% p# r' u' lvoid Delay__hx711_us(void)" K* S3 U7 X$ q1 `) R9 n
{
& Z" \8 \2 A. S+ Z        _nop_();/ {5 F3 N9 S; O. v' ^
        _nop_();, o3 }/ ~1 u5 Z& u' ~; n5 y: \  o8 [
}
! c0 u; D3 @6 t+ m1 t7 X5 p: x$ q( l) @4 A

) o2 q, ^' c! o/ {//****************************************************
7 G' s( p" u# t//读取HX711( G& Y! |# C1 M( G0 R9 G5 j/ U
//****************************************************
0 K8 @: g! \5 x! M7 i" U( munsigned long HX711_Read(void)        //增益128
" s, t, P( @6 c1 B1 ?{* k! P% O) J, g. U; ~
        unsigned long count; 7 b* _3 h( {! A/ z7 w1 l9 b( S) U3 s" @/ y
        unsigned char i;
: x0 E4 ]5 B# ]          HX711_DOUT=1; ; v) B4 x5 ]6 J, ~# ~" ?8 H
        Delay__hx711_us();6 Z8 B$ y8 R* ]( x
          HX711_SCK=0; 3 ~7 s) |. @; ?( t& q/ w$ f; ~
          count=0;
  O- r* s9 ]# m' x/ J( I0 ~* S* C/ v          while(HX711_DOUT);
$ H3 y' F6 h$ d$ ]* S          for(i=0;i<48;i++)9 n" @& W! y- n4 b. f1 _
        {
9 ]$ w. ]* I. y- R9 l+ {0 s+ |0 Q, o                  HX711_SCK=1; 2 H) q2 ^! q0 \+ x3 [
                  count=count<<1; $ m% j# ^1 [) B# Z
                HX711_SCK=0;
5 C3 o- p# I6 ]' a6 w2 p& p2 ]                  if(HX711_DOUT)
% B/ L) S7 ~0 c# G% g5 w3 K4 E                        count++; 5 ]4 d+ M' u8 h9 Y4 g& W" q1 a
        }
+ H# g4 P# c/ z% X5 N" @7 A         HX711_SCK=1; ( k! p* O2 E5 a* ~
    count=count^0x008000;//第25个脉冲下降沿来时,转换数据5 Q* t+ I4 K2 [8 g
        Delay__hx711_us();
) B* n- U& E  I4 l        HX711_SCK=0;  
* H/ k6 Q' Z5 B/ Q, H% s& A        return(count);
5 _6 ~) Y/ ?. L; B( H% T}
, I) p2 V% s0 K- f6 i3 O- P" c' Z" Y0 n! B* l

( A) Q, O* v: x5 J' Y# }3 d
$ E# D6 K0 S& L% C
2 i  Q7 Q) ?/ q& l$ V: s+ A- _
主函数程序! P3 n6 v" u& v3 K4 l: }
6 T8 a, ^% F/ e6 t8 L9 z
/ Q3 s$ B1 W6 K8 u: s
#include <reg52.h>
% d) D4 d- y3 k9 X#include <intrins.h>
5 z( X+ j2 p1 ^) e#include <string.h>
1 V! J/ g# j& t1 X6 v* D( p( u#include "main.h"! {, @* v. K, G1 C& Q
#include "HX711.h": k$ h0 n+ G3 U! i7 U2 x+ M  F
#include "eeprom52.h"
" j4 d0 C( j* n2 x4 ]
% H9 y* N! v* H+ @9 @

" t; Q/ Z* J8 U" G$ T. O/ B+ B7 ]#define uchar unsigned char* J1 \. @. W" t" g/ j+ n
#define uint  unsigned int9 A. W' q6 |' R# K  z
uchar qianwei,baiwei,gewei,shiwei;4 N3 R' U0 m" N8 K# H: Z
unsigned long HX711_Buffer = 0;( y& B# H: B7 Z! f+ d% d' y" x
unsigned long Weight_Maopi = 0;
; v! X7 @; P! N( \- nunsigned long Weight_Maopi_0 = 0;+ D1 o: w! S: I2 l. U% F
long Weight_Shiwu = 0;
6 w  `" _8 Q& zunsigned int qupi=0;' F4 k6 Z8 y% A* X# C1 L. H* l& a
unsigned char p=0;
- ^" M: h* s* \5 E* E//键盘处理变量8 x0 @8 ^# t; |2 z5 |, ^: t7 @0 r
unsigned char keycode;" U/ q# i$ U5 Q( ]. {7 A' j3 g. s
unsigned char key_press_num=0;
4 S4 B& @5 T8 s- h
# s' [/ E) g* V2 N, [$ s# a& c/ n

' w% k- ^/ f8 I  [& g$ Suint GapValue,GapValue1;
' F, P5 [6 J) t0 r2 x1 I% qbit flag_cz=0;9 k, W4 j% b, u+ x* c

6 V* z3 H  A, x

6 R, w# k, R& k- u//uchar code  LEDData[]={0x5F,0x44,0x9D,0xD4,0xC6,0xD3,0xDB,0x57,0xDF,0xD7,0xCF,0xaA,0x9B,0xDC,0x9B,0x8B}; //数码管显示码表
3 ?; D4 {/ W3 X! y% p//定义标识3 @! t; n& \$ [# b$ g& \
volatile bit FlagTest = 0;                //定时测试标志,每0.5秒置位,测完清0  p1 v/ x: U( w! f0 v
volatile bit FlagKeyPress = 0;  //有键按下标志,处理完毕清0. D* W/ ~/ s+ M+ u+ v- s
//校准参数/ S/ L6 ]- H1 R: v$ B# G
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。
. R8 q4 ?" D! b4 `3 N/ F//当发现测试出来的重量偏大时,增加该数值。3 G& P) L4 H" [
//如果测试出来的重量偏小时,减小改数值。
! u7 Y4 i/ i8 T: w7 K//该值可以为小数; o( e+ a. x% X9 f8 u
//#define GapValue 3496 }  i- t  ]: E! }* J7 i
sbit LED=P1^1;
3 J* S1 ^- E3 @% T4 U/ y8 Dsbit ROW1=P3^0;, g, e& ^% j3 Z: T/ L
sbit ROW2=P3^1;
4 y: f4 O' r. h0 }sbit ROW3=P3^2;
& `$ }, F4 N) [( H* {- Vsbit ROW4=P3^3;0 k9 R0 P; B4 k+ o, U" A
//sbit DIAN = P0^6;                        //小数点2 W, N; D5 E" Z6 D
sbit rs=P0^7;8 }2 @) y9 d$ O, t4 W
sbit rw=P0^6;
* b% U5 _$ x& L$ zsbit en=P0^5;
4 E; w+ J6 r+ F2 L( E  Bsbit D1=P2^0;
8 M4 t4 M1 x& @; X
5 H" i$ E( t4 b: V$ _( C; R

, Q; ]. @5 b+ r  U5 I% c8 i/ w' v, gvolatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂' a; B. t) e$ _4 m, ^

. e$ Q+ w+ s1 X. t$ H7 v3 w
, L6 z3 z  O$ ]3 h4 k
/******************把数据保存到单片机内部eeprom中******************/
* U4 O. K+ m4 Z- u  @9 b; Avoid write_eeprom()
6 N+ F+ p& z! D. I" P- f: j. t* W{( `! d' `* T, [. {
        SectorErase(0x1080);) M8 J! a: n' P" I% M) L: i0 G
        GapValue1=GapValue&0x00ff;7 r$ J& r3 u) A
        byte_write(0x1000, GapValue1);
5 \5 T& n7 m* |7 P        GapValue1=(GapValue&0xff00)>>8;
9 I& W' q7 j1 P3 l5 B, [        byte_write(0x1001, GapValue1);
2 J3 V  w6 c* e3 F* m& t8 Q5 K        byte_write(0x1060, a_a);        ) w1 K! o# V$ s$ n. {
}
7 V, e" T" a! d/ L2 e
  x# \5 y2 @( f8 @6 y

" P" H- E% \" u) s* e. {/******************把数据从单片机内部eeprom中读出来*****************/
  z4 o( ]6 ]( q6 U! V' x9 fvoid read_eeprom(), G1 x9 }; ]* r4 P2 m2 z) x
{6 ]. |1 [: \0 L+ b5 s8 _
        GapValue   = byte_read(0x1001);
3 r+ q# E1 s& `" M- w1 e        GapValue   = (GapValue<<8)|byte_read(0x1000);/ W6 ~: K& \6 [- @3 C  c: W7 @& Y1 o5 ~
        a_a      = byte_read(0x1060);
; Q- }2 d& m. B5 Z' G}$ _/ L, i5 l! Z' c
+ H& |, E0 m, A( N) m! Q

& o$ `& R  L/ x/**************开机自检eeprom初始化*****************/8 T% e" p' a5 J& G4 I+ j# G
void init_eeprom() 0 [5 H: C! B4 M. U5 _" J6 ]
{  L  x1 s* S1 C! R
        read_eeprom();                //先读
* A# a% [) M' F& _8 p  N* \        if(a_a == 1)                //新的单片机初始单片机内问eeprom8 p& R8 i3 x/ h) F) k
        {/ h& M# i' S3 b. Q
                GapValue  = 3500;& F- X: h. b$ u2 O* l  b
                a_a = 1;% N2 d0 b: V; K7 R
                write_eeprom();           //保存数据. G7 k, ~/ l* r3 Q% Y/ {) r9 v
        }        
# l$ R. R& K6 \# u) @+ b3 c}
7 a3 C' U) u5 _void delayms(uint xms)                //延时4 U6 E( c4 u  C
{
5 l* o7 i6 {# f' l$ M9 T         uchar i,j;
$ G: v$ K' u4 V        for(i=xms;i>0;i--)
( s5 z9 k5 j+ W5 O# L3 T' t                for(j=110;j>0;j--);* }+ _( k: q/ h6 I
}% y. T( A6 p. R1 X
void write_com(uchar com)                 //写命令+ g8 \; f0 X1 N7 Q' R, k5 B
{3 s. h1 r7 a6 L) Y8 j! z
         rs=0;! z% O7 E" T+ K" V6 s, ~
//        P2=change(com);
2 h5 e4 p5 D9 _: t& b/ {# r) t        P2=com;
7 r% p/ Y) I+ a        delayms(50);, c8 l+ a8 W) n5 Y# }4 z* j6 \
        en=1;
1 X* d5 [, f- L" X4 a! k        delayms(50);" W! b( z! p" s$ B. S
        en=0;        / S% {! a% }! B
}
; @! x  x1 Z, ?: b0 K1 L, E! Y void write_dat(uchar dat)             //写数据
( P* _: x9 T; j) g% s: k, x5 A {
- `3 }5 r; v+ H/ K0 A         rs=1;! M+ {/ G5 A! j: k9 N
//        P2=change(dat);         7 ^/ R& H0 d& `5 K
        P2=dat;
6 T& [/ }( Z1 ]" Y: g        en=1;0 d! J0 R" \) |8 n7 _+ b
        delayms(50);0 ^( b  R3 s( G8 p5 _
        en=0;0 n; z% z, j! M3 }9 D
}6 w9 o  F, Y8 K1 r: s0 y
void init()                                        //液晶初始化
. q. I1 Q* }- s {
3 o8 o4 V: ]- ]  s7 |         rw=0;
! G1 b: B6 V7 _. E4 \4 f        write_com(0x38); 0 Y- K% e1 L' u$ c4 \
        write_com(0x0c);  
% Q0 a, T3 n* J: b( K6 J/ q        write_com(0x06);6 ~( n- o: L1 C2 A8 t% Q! b7 U
        //write_com(0x01);
) u. G, N9 z) M& T$ \, x, \ }        4 t( x; \& i! i; g! }9 K
/*****显示开机初始化等待画面*****/* F* I# R" A2 d; ^
/*
3 ~9 C6 p$ |. h, Hvoid Disp_init(void)   
; s7 L0 C' H' i3 u. U, T  D2 v  U9 v{
8 s6 h6 J$ c" I4 V' ^; ]0 J        P0 = 0x80;      //显示----
0 E/ F3 K2 @) x7 |& m0 f! |% B        P2 = 0xBF;                 //依次打开各位+ u8 w7 p' e5 J9 n
        Delay_ms(1);                 //延时
2 w$ I6 w% J. \( o7 S: H' H1 y        P2 = 0xEF;
! e) h! o2 ^0 g1 d1 C( E9 X, Z& u        Delay_ms(1);   
- d* a/ o, _/ g        P2 = 0xFB;
( Q6 O  a6 w9 \2 e2 J/ q+ I        Delay_ms(1);
7 f* q+ Q8 P5 Q% X, r        P2 = 0xFE;- }) K1 K1 [5 [  n& W
        Delay_ms(1);7 K7 X& B3 R/ ~, e! T
        P2 = 0xFF;         //关闭显示4 L% D9 X0 p9 n) }" w- W( j
}/ g7 R9 x0 l% w% Y  j( M
*/! I. g( `$ m9 I1 h7 P* n
//显示重量,单位kg,两位整数,三位小数
. R8 J# M* K+ @* gvoid Display_Weight()+ D0 _2 x! Q$ k
{                                                                                                                                                                                                                                                                                                                                            ;
: d' k1 {+ A5 w0 `/ ]. X: W                        qianwei=Weight_Shiwu/1000%10;
% T2 Z7 R# _5 W( T1 x- r5 W                         baiwei=Weight_Shiwu/100%10;                                                                                                                                                                                                                                                                                                                       ;- c" ~) C+ Z0 Q( n2 ?. a5 _
                        shiwei=Weight_Shiwu%100/10;
9 y$ S" n% U% T6 d# a                        gewei=Weight_Shiwu%100%10;( A; _) L- R  q# P
                        write_com(0x80+2);
$ _/ [% a, A, z* }( v& g5 k- M4 C& o) S& [, G7 P) z
3 T, r0 Z2 N$ A4 y  X
                    write_dat(qianwei+'0');
9 W/ r6 m4 [0 e# Q                        write_dat('.');
/ h; B5 U" i  L                        write_dat(baiwei+'0');  o) f4 ^% \8 p9 o) C; o
                         write_dat(shiwei+'0');                   U5 [/ ~" l* j9 Q) B; I* Z
                        write_dat(gewei+'0');; i6 X( i8 ?5 r* D& u& Q4 [
                0 H1 h( I8 K- {9 z2 e$ [( m* m
  
; U# k; I/ x, B6 `: q' V; |}  6 O2 {$ X" X2 {# O1 v' x0 `$ ~

, V% L/ K: S) r6 G/ N, \# ^. r
( g, _. ~  v3 A+ l" X% ]# @' v* Q" d
//定时器0初始化3 Q" v( @7 I4 m4 n6 b3 |' f" ~
void Timer0_Init()
3 A/ e" Z# |7 E' z{
' J: i" ^0 U3 ?  u3 N+ H        ET0 = 1;        //允许定时器0中断6 t+ {& _! |4 H7 ^4 K. F
        TMOD = 1;       //定时器工作方式选择' |' A+ P- c1 n" W: ]- B
        TH0 = 0xb0;     7 o5 w( l0 u2 ^7 H( z8 j
        TL0 = 0x3c;     //定时器赋予初值( n' ?$ s  G2 I6 t
        TR0 = 1;        //启动定时器
3 y& s. {2 V! ]/ c# ^0 G}
* |+ ~/ ]2 Q+ e1 v: N: b; j
  z6 g0 p$ B  `1 p& d

5 _3 J+ _8 `# r5 F- s% P//定时器0中断* D& z6 S$ z, H: l3 S+ K! ~
void Timer0_ISR (void) interrupt 1 using 06 b' F6 h. d; U; Q) s; S
{
- i; g+ j$ f0 S1 w4 x3 W) yuchar Counter;
& z- I" m6 B" |3 v2 `9 O6 ?/ w        TH0 = 0xb0;
5 b* V% r' f# V) t        TL0 = 0x3c;     //定时器赋予初值' O% N/ p' u, }+ e/ a* w4 B

. V5 F6 q9 v8 H: ^7 a; T7 D

- ?. k) k. A' E/ D% m. u/ a, y. W" N        //每0.5秒钟刷新重量2 N* ?# w! {/ v
    Counter ++;
' m% N) B: ?9 }- o) K% p0 O* U3 }    if (Counter >= 10)1 C* k7 A4 i1 z( ]+ L
    {5 g3 J; a# a7 P9 d0 p$ i: W
       FlagTest = 1;: N$ _! o3 E. G$ k. t( A# S
           Counter = 0;1 }# o7 ]6 c9 s( I8 |( A" Y0 I9 n
    }
& @5 q9 N' C3 q0 N6 [}- }1 q( ~' v0 e) A) e% j

/ o) z, u( s1 S4 ]9 t; C2 b

! O4 Y6 ?( l6 `2 ]& p6 q
9 U4 i/ m5 _  f9 H. e9 ^: u1 L7 i

) f. O2 I8 x/ Y$ a! {# o//按键响应程序,参数是键值1 C/ L9 [4 o" l; S- I3 h7 l
//返回键值:
: ~2 q! t. K  H' u& g9 h" Z8 ]//         7          8    9      10(清0)5 Y, @" \: `: Q
//         4          5    6      11(删除)
& N5 W) D! z' f  b//         1          2    3      12(未定义). @6 a0 n4 }+ ]4 S, D
//         14(未定义) 0    15(.)  13(确定价格)' |- A! ?( e( k4 @2 H

* [/ R! X: U) H  h

! s9 Z9 y1 U) w! D: N2 Xvoid KeyPress()1 _5 F0 ]% s3 v: O/ o
{" t: I  k: u, I2 p3 `7 d9 R' x3 J
        if(ROW1==0)   //清零键
" k4 O6 M6 [( P) Y" @) }8 Q4 s! h        {  z2 x/ S, F& n* d
                Display_Weight();
: h* u& f; w5 A8 Z* R: Z' `                if(ROW1==0), s: J$ _  L3 D. ~) x5 v; \
                {& J' }0 `' V8 ]. u5 g; @( C) l
                        if(qupi==0)
! Y. q  f% r, Z& h8 J3 ]( H                        qupi=Weight_Shiwu;1 t0 S7 _( B* J) m
                        else. d% n- M0 P, j0 Y8 [
                        qupi=0;
. \9 c$ H5 m3 y                        Buzzer=1;
% D: M# \" a: Q" Y* V" s* {; [                        for(p=0;p<10;p++)9 ]+ ?. R  k/ K" D6 [# W% V
                        Display_Weight();
$ }8 j" c2 \# N# z                        Buzzer=0;        
' y( y4 [/ e' j  x                        while(ROW1==0) Display_Weight();) D5 Y/ m- e1 |
                }
( F8 q1 \& C2 G. a/ c, p        }* L' w" U! E. u
        if(ROW2==0)           //加
' \* v' A) T  }% \" q8 F/ F        {
: I$ n+ p+ P* P  J4 L, H" F                Display_Weight();! k. n5 a6 m% ?4 o1 O  \2 i
                if(ROW2==0)( |" y7 b6 |' y0 F' N
                {' Q7 B2 K7 s0 N% k# F
                        while(!ROW2), U# g' B. X! Y  {
                        {
- ^. {  L/ \  H) ^- a! e                                key_press_num++;
/ B: ^/ o. G3 \. _6 q                                if(key_press_num>=100)
5 \% D  V. D" Y3 k" B                                {
# w: K5 z# O0 _+ t                                        key_press_num=0;; Z' c! _9 T9 N) H' L: [+ Q3 b( }
                                        while(ROW2)
5 W- A- {0 T6 Y# |5 t6 X                                        {
7 R4 L  j) {2 B6 B9 w                                                if(GapValue<10000)
( h' @. A2 ~  a                                                GapValue++;
5 _3 _! e! `$ f$ v                                                Buzzer=0;* I% k9 \! l/ F2 u5 J
                                                for(p=0;p<2;p++)
4 H: z. x# b7 i* F; \' t5 T( {3 X- _                                                Display_Weight();, r) e) j6 ~9 Z3 A
                                                Buzzer=1;
' _7 E+ W# x: [" ~2 C# c3 j3 v4 [                                                for(p=0;p<2;p++)! f8 j4 s$ w2 w: {: M# @8 \1 K) M6 B& v
                                                Display_Weight();
/ F4 A5 y: S2 V; O: [                                                Get_Weight();
$ a- l. [7 U, c  J3 h3 E# a                                        }: H( ^) B: a& W" B: r
                                }
0 n( e& `: b6 X4 J                                Display_Weight();4 w5 u3 V& h  Y9 q: }$ t
                                Delay_ms(8);: W% o3 q* h5 a0 d2 n
                        }
; H. S/ q: O! w6 o                        if(key_press_num==0)- t# S- @+ R" L$ Z4 F2 g
                        {$ c3 T; ~% j9 e' I: t
                                key_press_num=0;6 q! Z, t! O6 Y( ^$ j. C; H
                                if(GapValue>10000)
( `2 c& {+ \# U- p0 ]% ]5 ^  [8 Y                                GapValue++;8 t1 a1 `+ m' R; i
                                Buzzer=0;
3 W' a1 p- [' q9 n, ?. D6 k- r                                for(p=0;p<10;p++)* C# b6 j- {! H9 A4 [) F3 ^
                                Display_Weight();8 {4 C+ i9 S1 i& Q% I
                                Buzzer=1;2 E; A* Y/ S* r  ?. k
                        }
" R) P" V4 K+ z7 V                        write_eeprom();                " z& {# u  d/ }( Z4 R
                }) \& @! |% B( `/ f
        }
2 \2 u9 J- t8 V# H/ s6 T        if(ROW3==0)  //减
8 ^5 h1 G! s& K, S        {
" m. I) T( J5 Z& V  u0 a) e                Display_Weight();
6 F3 B8 |9 y( g. O1 d8 J) u( z                if(ROW3==0)
% Z+ K$ u1 A& w                {
/ T* q1 M5 p  H8 J                        while(ROW3)
. a+ S1 A0 f: n4 `" O8 i% a4 `1 X7 {% K5 \                        {
  ?$ v$ v8 c7 L/ [                                key_press_num++;
! \$ ]/ Z3 c8 B0 ?+ Z                                if(key_press_num>=100): T; a1 \; x/ ]
                                {$ r+ k& C1 ]. W) p
                                        key_press_num=0;  c* Z& f0 j8 r. N8 u. _8 A
                                        while(ROW3)
8 a* N# x! |- T, q  j                                        {5 Y, J: \8 L; {) j' B1 k, L
                                                if(GapValue>1)' ^6 J; m1 A0 z* Y) `5 j' P# I
                                                GapValue--;
- O! Z( \7 n) H/ s# K7 K! ?+ x2 F6 j                                                Buzzer=0;; |1 m/ g/ n" Y, j4 ]; }7 J  w
                                                for(p=0;p<2;p++)
# B) a+ x+ K% G; s5 j: b7 i                                                Display_Weight();
/ V' g, L; z, x9 D) @                                                Buzzer=1;
9 G! W2 O$ W. c1 g                                                for(p=0;p<2;p++)  w+ a- O3 F4 U7 k$ J' s
                                                Display_Weight();& w2 Q4 G% }$ \
                                                Get_Weight();
' Y5 v  Y" b7 W& @( Z# h  P                                        }
# Y, ]7 M" b9 b2 m9 n/ X) ]                                }4 |/ F* Y. B$ F/ B9 D
                                Display_Weight();
, U7 R$ s3 O0 Y4 E* ?                                Delay_ms(8);' W6 E% c& n( ~, J& ~2 [8 R
                        }
8 b& y* k; w6 B1 a7 Y4 I2 [                        if(key_press_num!=0)
0 L2 w4 F& W, ?( k6 N( I                        {
; `1 P/ j, ?$ e                                key_press_num=0;/ T# c; I+ ~, O- B
                                if(GapValue>1)& F, ~& ]  i! T4 _7 y+ J) b7 l8 S+ g) `
                                GapValue--;
* F* k' g8 S. v                                Buzzer=0;2 e" L, m$ }' D8 G, V1 b
                                for(p=0;p<10;p++)
, G0 k1 z. ^$ W; S, f+ H                                Display_Weight();
7 r' B5 y' I! |' I6 m6 T9 \* F                                Buzzer=1;  r/ o4 @7 i$ q0 j
                        }
" G2 z7 c8 y# P" d% @, J/ \                        write_eeprom();                           //保存数?
( {! H  |2 T( z( u  P% j                }) Q+ i+ T: J) k. t4 U
        }, g  V' }/ c% y2 C% A
}- E$ G4 k" n' f  ]9 N* A, Z
//****************************************************
. W  g7 T" o9 M) y1 X//主函数
: f2 \4 |, ]' R. _//****************************************************5 o6 r& a& Q# M7 i' F
void main()
- V0 ~  R% V& U- M# T# t0 r{        , n! G! e4 Z, Z. q+ N# D. C
        init();
0 @; J5 R. r: F/ R0 \        init_eeprom();  //开始初始化保存的数据
) }/ ?1 @# |/ w4 O) f   EA = 0;# f5 R7 b' Q' X# `. s
   Timer0_Init();# b9 S0 i( g. I" h
   //初中始化完成,开断
* S4 m3 x0 j$ t* @/ {# H0 `   EA = 0;, z2 C/ o( X( N$ u
   write_com(0x80+7);, T6 t: @' o/ g3 f9 _* i, w! u$ O
           write_dat('K');         
0 W* k2 R& U; B; v4 W4 X        write_dat('g');1 c5 [$ I/ y5 Y, t/ N  n0 ^2 ]
        while(1)  b: u4 ?7 u+ s9 J7 L4 g
        {                                                                         //每0.5秒称重一次" K! g# t$ ]' E/ f; l, {
               
8 q9 u: u7 C5 K7 B5 d& E0 W                if (FlagTest==1)" T% c2 E! a4 j0 u- w8 D
                {
5 V# d2 a9 u& `% X                        Get_Weight();
! |2 {1 t  }/ L/ B# ~: S# e                        FlagTest = 0;
4 u+ i* q5 g( c3 z                }
( |: I, ~5 X  y4 q/ P" h                if(flag_cz==1)# i1 ]8 m" j4 V6 a, d& U
                {
$ |, H& D2 Q7 m( U9 l7 Q3 f  Z                        write_com(0x80+2);4 N) l3 y( r% G* n2 j5 J- M
                           write_dat('0');
1 ]3 s5 F; F: F( I: N* {                           write_dat('.');2 d$ }, R. y- w" \
                        write_dat('0');& a/ [/ D9 C( R( u9 W
                    write_dat('0');
& z8 M1 k2 a3 i1 K            write_dat('0');: E$ B3 U' }1 B) w7 G
                        write_dat('K');         
8 A! Q$ C* `" @. l( T4 _4 J. {1 H9 Z                        write_dat('g');
0 Q, |! Y$ a* w3 z. l5 x/ r5 i' a7 s                }
% ]7 z! J$ w) L$ p  r                  
* w9 ]6 ^# p% x! M4 C# x                Display_Weight();         $ k* m3 f5 g4 p# D% A
                KeyPress();1 w) z8 A' {5 z2 _5 R
        }. J+ d, J2 T0 S+ S
}! q7 J; ^! W' W4 m( r4 n- A
//****************************************************5 ~, A: ~) _# [' c) c
//称重' B; W6 ?1 f  x8 _( T$ _
//****************************************************
8 D, t( S5 k3 q9 k; t, ~! Tvoid Get_Weight()6 R8 w! o2 b; K4 a7 [
{" t- v: P( n0 E7 [1 Y1 L
        Weight_Shiwu = HX711_Read();1 @) \) c# g% c+ ^
        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重
5 w% @( j: t6 o2 t/ n8 o        
- ^" d- x: a* z6 V2 T        Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu*10)/GapValue)-qupi;         //计算实物的实际重量                                                                                                                                & R! V% u" F$ p3 `' ?: e7 z
        if(Weight_Shiwu <= 10000)                //超重报警
* h- c% [" s# n  x# K        {$ \* o5 g& p; r+ Z! ~
                Buzzer = !Buzzer;        
/ C6 u1 G' T+ F+ |! ?+ E                LED=!LED;
4 s' y3 Z7 a, d5 }- z& J& Z                flag_cz=0;" H! l$ U6 _; h  h4 p% J- B
        }+ |  |$ n$ W8 y; ~  l: _' @
        else
0 \; {% Q  Q1 e- j) W( H        {
* S, v( D! T" L                if(Weight_Shiwu==0): X! N  l) x$ K1 X; G0 t
                LED=0;
, k0 W9 @2 ~, Z$ v) E7 Y                else if(Weight_Shiwu>0)" n! w/ d5 Z" ?- U: e
                LED=1;
$ W9 }, l+ x8 _2 P" ^& L$ U                Buzzer = 1;5 M! l0 ^+ i' B, X3 `
                flag_cz=0;2 I7 }( E) l: T2 i$ }
        }
/ ^& e) }, e  }2 W' v}
$ {8 K' v0 j* k& P! s% _* X% a+ G…………限于本文篇幅 余下代码请从论坛下载附件…………- f3 c6 U  C# n# i; h

+ @4 ~0 J! l+ t* k5 t$ H

8 W, l$ a' m. k# |; L
7 J$ B  K* o3 I( S

, p* N# H+ E( |/ q+ z% J. |% h
游客,如果您要查看本帖隐藏内容请回复

/ J5 T, E# K& a: e- s+ R9 J2 S5 ]+ E+ d2 j' U
" h0 G$ V3 F8 y; f+ r% P

该用户从未签到

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-24 20:21 , Processed in 0.156250 second(s), 26 queries , Gzip On.

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

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

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