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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于单片机的电子秤设计 原理图和PCb图 源代码
( D  S$ X* w+ G: o6 V$ i
" V% d" Z  h7 `: y  V+ U& T

% {6 K- N! U  f" \$ e  i) D1 m原理图:: z4 D  J& T1 o2 R7 R% }
# l0 E8 _* M; Q/ L

. T2 r' G6 ?5 A. k单片机源程序:

$ x( S' ?" \& @& [//程序采用的是模块化写法,你写论文时也分开写两个小标题把代码粘贴进去就行了。
8 u& j( P- z7 q" K( ^' p& D# M  s

4 ?$ J* b7 R0 u4 B& z2 T/ |' y: G' v) p5 R% j
5 z* q+ h" @: c" Z
4 G; l& |" V  T% A& a, Q
+ d: U7 a" V# j' w9 C9 T
//HX711的AD转换代码
* |' @* a0 i( A9 M" K) e2 s! W$ [1 K4 |- U) i6 }3 L+ n

/ w0 N" J+ u: ]1 L#include "HX711.h"
" m% v) o& T% [  g& T
# `* b7 X$ v8 F# l
7 i& Y8 d; g# ]1 F! l2 I

7 f% m* }! M( ~$ r

2 y% ], Y" @" Q5 T- @, c//****************************************************
0 t6 M: g$ ^- G( U//延时函数
6 o$ c& p9 f7 U* N2 A3 t% m//****************************************************
0 ]7 H% \( T) Fvoid Delay__hx711_us(void)
/ h$ d. _/ x  ?2 C. Z' }9 I5 {/ n5 s1 j{1 E* s. [- [, B% @2 A% \. A( O
        _nop_();1 R' Q1 Y9 P8 e8 j$ B# e2 ?
        _nop_();
- }  ^) U+ e/ P; q}6 L8 d' l  V" ^( \, E& Z. f' l
' l4 F! t3 Q* ~* r9 s7 _3 j
7 S3 K' I, d' G6 s0 Y9 M
//***************************************************** b6 c; D, R7 n( |; c: R# s+ k
//读取HX711
& n! O+ D4 G2 |3 T. ~//****************************************************
: f( B' r# h% E# U; Wunsigned long HX711_Read(void)        //增益128$ m; ], H. s, U' n
{
: D" T5 A4 h( [$ [: W. O        unsigned long count; $ n6 L% q& w; ~0 v) |
        unsigned char i; $ @( }% O8 v% t# X5 o, P3 |5 x
          HX711_DOUT=1;
" N# w. n6 X3 z* U0 d  Z        Delay__hx711_us();
+ m" n* g% ~: _6 H          HX711_SCK=0;
; m: @, b* }$ U          count=0; 6 N; n) F8 P+ a* ]
          while(HX711_DOUT);   N$ ?2 Q! Y! i8 Q
          for(i=0;i<48;i++): N* @7 h8 z; w" A
        { ! a9 {1 b: n$ K! f8 }, B
                  HX711_SCK=1; ' v1 t+ m. I' d
                  count=count<<1; + W1 U/ K% D$ b* o: V
                HX711_SCK=0; 0 F+ \5 j. ]. P- j6 S
                  if(HX711_DOUT)
. u1 H0 j! ?* r. Q                        count++;
& {- f+ R3 {1 J/ G% C5 R        } . K) V/ n' s+ d( ?! d. a) T
         HX711_SCK=1;
5 w. F2 _- }$ a1 h6 n    count=count^0x008000;//第25个脉冲下降沿来时,转换数据" M* i; m' H9 v: ]3 \3 R4 a' j
        Delay__hx711_us();) ?6 h# W2 _! E! [& c1 u; {- H
        HX711_SCK=0;  
2 C* s; ^; L$ G) |" U  c6 b6 V' x+ e        return(count);2 c$ z& Z- O1 m( D% n+ b: {( z
}2 x! a1 t( i9 u9 _/ A

* x/ d' P5 e; S

$ H. w1 Q7 ?- H& C) J9 R; d; F3 s( r6 X, o/ S) x/ h' B

, c1 P7 k5 l! ^- k# ?0 _  ]& C, W6 |主函数程序3 ?5 m" Z; C! v. h7 b
( t- S, {2 X, u/ o; @0 ^
: }. x) Y- P% e! u  K
#include <reg52.h>5 j: K& o' w5 k4 H/ x
#include <intrins.h>3 `8 D1 Q; {( {
#include <string.h>8 b) {% k+ |9 a% P" ]' J
#include "main.h"
" z4 H; q8 Y  N8 S#include "HX711.h"- I* P# Z# {/ _7 n) ?/ @9 x
#include "eeprom52.h"
' j$ y! v' u. L& R; [* ?
$ z0 A! O* b+ E4 y& S
4 O9 D1 E: U- _2 g9 L
#define uchar unsigned char
9 [* f  C- b+ L$ R#define uint  unsigned int, |2 L" i2 E- k4 t' m: n
uchar qianwei,baiwei,gewei,shiwei;. U/ I$ w0 j) b
unsigned long HX711_Buffer = 0;
9 S, }/ u( `( S3 n+ uunsigned long Weight_Maopi = 0;
2 i2 O; S$ I' b$ j( Punsigned long Weight_Maopi_0 = 0;. b% f( @2 ~2 o, R8 n
long Weight_Shiwu = 0;  Y8 {- o3 {0 D) L; y# P* b# w/ k
unsigned int qupi=0;
% Q, N6 t! o7 y/ y5 g" Z* dunsigned char p=0;$ ^1 U8 g" ?. ~- ~2 D4 K
//键盘处理变量& z' v9 P& n* M0 V* T
unsigned char keycode;
7 C, f% U. Z3 h6 n1 W% uunsigned char key_press_num=0;$ {8 e9 `% F9 B% f+ E7 {
" n; `9 t  W, e# ]' ]4 o# [+ C& F

% [$ Y, ]) c/ k  m" R5 l, y* N1 ^uint GapValue,GapValue1;
( ]4 [# ^& ^8 Q+ I1 `/ d! cbit flag_cz=0;
/ R0 L1 p1 L; U9 u2 a3 D: o1 f+ L6 ^8 ~& j, [
/ k0 p3 [& v( v" h2 Q' ^( l2 w7 M
//uchar code  LEDData[]={0x5F,0x44,0x9D,0xD4,0xC6,0xD3,0xDB,0x57,0xDF,0xD7,0xCF,0xaA,0x9B,0xDC,0x9B,0x8B}; //数码管显示码表
& z9 @* t% b) c& C//定义标识
& Q% t. p! S4 ]  g1 p0 \volatile bit FlagTest = 0;                //定时测试标志,每0.5秒置位,测完清00 W  o6 h! v& _) i
volatile bit FlagKeyPress = 0;  //有键按下标志,处理完毕清03 L) }* r5 {9 E
//校准参数5 W% c( S3 k; O$ M5 |" n
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。" E: F( g4 n% `1 o% I: E, {; L) |  ~6 `
//当发现测试出来的重量偏大时,增加该数值。( X0 ?% T  H; m7 L+ m/ ~0 D" X
//如果测试出来的重量偏小时,减小改数值。
4 _4 M9 E$ I# }, N# i1 p) y//该值可以为小数
0 i+ Y# w3 m/ c' Y% L" V; R//#define GapValue 3492 l. D" \4 a' B
sbit LED=P1^1;
) q% Z7 k/ h: |  C# wsbit ROW1=P3^0;
; V' s' @! v9 T7 Rsbit ROW2=P3^1;
) i9 j- }- E  P6 c" M* wsbit ROW3=P3^2;! I  T" w9 k9 D( D
sbit ROW4=P3^3;
1 C5 @) w3 g* w" I//sbit DIAN = P0^6;                        //小数点- G$ |  T; ~  w+ i
sbit rs=P0^7;
$ Z; a9 f9 ?6 Z) usbit rw=P0^6;
7 [# M. Q+ d1 l+ a  \0 ksbit en=P0^5;8 ~/ w6 ]3 n; `6 q5 N0 ]
sbit D1=P2^0;4 u% G* a' r+ B- R( _, ^
/ j# x- O) ?- h: _( ?1 ]/ |; a
  _0 D0 n1 _  n3 l
volatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂
* \: J7 S9 V# e9 U/ u3 k. l; }- e+ n) N
0 k+ B7 c  C# }& h4 Z3 X6 K4 X- c1 o
/******************把数据保存到单片机内部eeprom中******************/
5 N9 j5 Y# I1 Q2 V+ D1 |2 Lvoid write_eeprom()% _' c7 b: O7 Y/ g* B. g
{6 ~+ M" ?2 k, c8 o4 C
        SectorErase(0x1080);
1 w- \1 B0 {7 y1 T6 P7 S+ B        GapValue1=GapValue&0x00ff;5 Z( Y# y" b3 F. b+ e  a" S
        byte_write(0x1000, GapValue1);
& W3 J( l+ g9 J* Z        GapValue1=(GapValue&0xff00)>>8;" O- v  z$ G( _" T
        byte_write(0x1001, GapValue1);$ _& Y; R- j4 K# o* {
        byte_write(0x1060, a_a);        
6 I; Z7 S: G* |7 m}
2 K) B: J& x% A: M2 v) N2 ]8 e3 |) T8 p* p) a7 Q

3 m$ c, c1 H: {; M8 v( o! B* o, z! f6 G' c/******************把数据从单片机内部eeprom中读出来*****************/
+ ]- K3 ^7 ?$ A) |void read_eeprom()
5 }) @  B) U" C, \! ~$ O{& g( A) O* h) l
        GapValue   = byte_read(0x1001);
2 W* U/ L& h9 o! p" q9 B# n        GapValue   = (GapValue<<8)|byte_read(0x1000);
0 A% m; k* J" O5 u# G  Z6 U7 T% X        a_a      = byte_read(0x1060);+ x! Z2 p$ t+ Y6 R0 r; t
}4 w- l3 N7 I2 ]7 X+ O  c

+ q( ~6 C" ?/ l6 S# u
- a7 B. ?' b1 z2 z" Z+ N$ O% U
/**************开机自检eeprom初始化*****************/
/ P/ H5 i) `$ W1 \& N9 ^void init_eeprom()
# F$ T& D' X, P; O{
) ?: a' y" `, j* }        read_eeprom();                //先读- g2 J  n& r- x9 p/ Y6 }9 G: e
        if(a_a == 1)                //新的单片机初始单片机内问eeprom
' I- ~5 S" K5 {) j  y  ]5 R        {! |1 Y" h& s+ b; A
                GapValue  = 3500;
) D, o  z. N( i% [/ b$ {' I                a_a = 1;
$ P0 o: }: N9 S2 g; m- o8 X                write_eeprom();           //保存数据
( u7 p1 S. p) V5 t( U- G" E% e        }        5 Q" M1 l0 _% Z/ r2 ^  P$ C4 H
}
4 i( Z) w- N* M8 V/ V2 Fvoid delayms(uint xms)                //延时
2 m! T7 D* q9 ] {+ G4 ~2 V4 Z, h" u
         uchar i,j;& L0 c  \: |. o, ?' i; X5 N$ s
        for(i=xms;i>0;i--)
/ p0 i% L7 C  o4 ~3 B                for(j=110;j>0;j--);
5 t. r+ L7 l+ Y% {% G  t }9 l. a& c2 ]7 T2 U# j& W  g
void write_com(uchar com)                 //写命令: l8 Y; F0 q2 f  L! e* K5 x
{
$ {* h6 j4 f: R0 J9 j* x         rs=0;
/ K+ H! P; d/ |) F/ U2 m- O; m//        P2=change(com);
3 o2 V$ v8 p, J& W2 O- B5 \8 f1 v        P2=com;
5 w: e+ P' w+ P( ^7 r1 f: N        delayms(50);
% b, q+ s6 A. c$ x        en=1;
' c8 q# X) O( Z4 O0 u6 k. F; `        delayms(50);/ T' Y* E$ N8 [% i2 ^
        en=0;        . S" p& S% `2 ]! c( ]+ w4 ?$ x
}  ?% x+ z) v) o6 N, i  M: A
void write_dat(uchar dat)             //写数据
* P( \6 S: L& c {
3 a0 t0 b3 e# ]# c' u         rs=1;
) A* e1 F6 g, J1 Z7 g/ a//        P2=change(dat);         5 o+ n2 H" l9 F& T! |4 D
        P2=dat;
& c6 r3 x* ]# [. i: `        en=1;
5 G+ I% w* y6 E9 q' m        delayms(50);
0 y: R- Y9 e8 r4 g( P1 @6 z        en=0;
: j$ T" N0 |4 Y }) L+ ]8 F! i: M3 v* m
void init()                                        //液晶初始化5 K8 m, j( W' g0 X. {* ~- q
{
3 K; l: h0 v9 R1 H         rw=0;& }( j+ A; I% \; g9 K. r7 `
        write_com(0x38); 0 L" T8 h+ N( S2 z1 _
        write_com(0x0c);  7 L+ ]/ `" ^* x& f. j0 G
        write_com(0x06);
# O1 _) C9 [0 p. b5 {! A' h" J        //write_com(0x01);
) \, t* S. c( y# @- G }        
, O* x& V9 l" |3 s8 Y/*****显示开机初始化等待画面*****/
! c/ |' n- S' ~0 s- [/*- u5 o, P/ d& S% m9 Y2 z
void Disp_init(void)    8 y8 m) n- o5 T- ]/ x
{6 Q5 L  b  I" _; t0 X
        P0 = 0x80;      //显示----1 ~/ P; u0 ^+ W: a- J; R
        P2 = 0xBF;                 //依次打开各位
! Q2 h" |7 v7 f5 a! w& J' Y        Delay_ms(1);                 //延时
0 o5 A1 C/ n  f        P2 = 0xEF;, }; @! d" H$ c1 p! j
        Delay_ms(1);   
1 `/ R7 T& w  u2 Q        P2 = 0xFB;
  n  z) k3 u1 f7 H* k        Delay_ms(1);4 y. P! x; N7 E6 h& C
        P2 = 0xFE;3 D. @2 w, ^5 S& Q3 {8 i3 f
        Delay_ms(1);
  o6 t) d+ P  e5 }) K+ m        P2 = 0xFF;         //关闭显示1 G3 }9 O8 I* n
}
9 R7 S9 u$ k7 p! P, X. W2 C*/+ z/ W0 V6 C( V" i* y" J, T6 u+ F
//显示重量,单位kg,两位整数,三位小数
/ t6 U% {1 V* h: @, a1 ovoid Display_Weight()
' w$ h: ?$ Q. M{                                                                                                                                                                                                                                                                                                                                            ;
9 I" C) B$ {4 F. t; ^2 R4 U5 K" x- K                        qianwei=Weight_Shiwu/1000%10;
, c$ L  Y( ~. `/ M% ^# s& m                         baiwei=Weight_Shiwu/100%10;                                                                                                                                                                                                                                                                                                                       ;+ l3 {# {+ H" q0 R: L4 k- ~' U
                        shiwei=Weight_Shiwu%100/10;
0 ^; v! \5 c8 {1 z2 `9 w; h                        gewei=Weight_Shiwu%100%10;
0 A; S4 r# u/ R2 j: q, o  S                        write_com(0x80+2);
$ E6 J. @9 f8 R, W2 W! d
4 e+ w. w- `* M8 o2 e3 @

* D% l& U0 y9 |. T6 t: T' ]" S                    write_dat(qianwei+'0');
5 k5 h- l9 ^8 w: Q7 {                        write_dat('.');
4 }* C- d- ?& `! K                        write_dat(baiwei+'0');
: s3 l1 W4 K/ g1 ^  B                         write_dat(shiwei+'0');                 1 e$ s6 Z* R$ n
                        write_dat(gewei+'0');
2 K  M8 G1 V- f0 h/ R" M                ! X- n7 l" B9 T" ~9 Q6 D' k/ p* x6 O
  ' c2 P0 f3 m5 z# \8 ]  K5 E; M9 Z
}  " q$ A6 b- _# X2 d/ R1 s
- k2 k$ |; U1 w, R

! m. K/ n* `  ]2 P//定时器0初始化' [4 u1 Y2 M; \% a' B; {8 E
void Timer0_Init()
7 e; J# K+ P, z, k{
- w6 P$ R" D1 W" Z4 }" [        ET0 = 1;        //允许定时器0中断1 R+ k6 r1 k" X/ `- X+ E# x# F( D9 V
        TMOD = 1;       //定时器工作方式选择
; y2 Q8 r: p7 T        TH0 = 0xb0;     
+ T/ y: l) Q; M7 v        TL0 = 0x3c;     //定时器赋予初值
# W* ~. Q9 X- v        TR0 = 1;        //启动定时器/ S+ j, d: u% q
}
8 s+ D9 B" i4 D, P/ ?  G
& n& J2 u" Z! S9 S+ P+ D3 ]8 L
. t; N" {7 r% {$ `4 U
//定时器0中断  o& ]# B4 }% U) W6 q7 B: [
void Timer0_ISR (void) interrupt 1 using 0
1 R( X* W( ]' A8 S/ Q& @& G6 t& D( X8 O& x{
/ j( {! E1 d7 D* B+ ]$ Z8 ^uchar Counter;' T5 e. n% N& U; y; k& d
        TH0 = 0xb0;
9 m& L1 T: g$ T0 R        TL0 = 0x3c;     //定时器赋予初值; m8 f% ^8 O) s4 c

5 h$ w1 J; U) }+ {
6 N9 ]5 N$ }, U& m$ \
        //每0.5秒钟刷新重量1 m+ u7 G1 o* _  L! ~
    Counter ++;
8 O8 X2 Y1 w% |$ S; B2 W    if (Counter >= 10)
! c* M$ y7 Z& u3 M' x4 j    {% s# D7 k9 l2 V- X. ?3 [; i' G
       FlagTest = 1;
6 ?1 O0 E' o% {/ |! l& N           Counter = 0;2 E" k2 H; E) I$ C
    }
% w# J. g1 ?- r4 k: Q* |}& s/ P4 P" E& Y' |) ~0 U9 S% _

9 r  Y- P5 k1 w- ~9 Y2 W

" K9 |2 N4 F7 I
2 l7 W: A( i0 \2 X% H! n; L: p

) |3 U7 j& }% M//按键响应程序,参数是键值
4 f' S( ^% j! ~/ Z# Q/ a//返回键值:7 D8 w% x9 h, _/ \
//         7          8    9      10(清0): K7 i* c6 K, D  t1 c$ x4 B
//         4          5    6      11(删除)- ]  D0 D3 t7 O! ?
//         1          2    3      12(未定义)
/ H0 G5 K1 I4 z5 w5 N//         14(未定义) 0    15(.)  13(确定价格)1 F; b8 {: l& S2 M$ o# \

! R8 D) F5 D2 M& N* M
' R& t+ Z1 Q& @* W* y1 L6 B
void KeyPress()
( L( @& S) y! Y) d8 @{
" c/ p( p% T4 H2 [        if(ROW1==0)   //清零键% m9 |# i( V  S& a# d! x: ~
        {
6 K/ T1 S7 C" w7 `* U8 W                Display_Weight();
3 s& O4 |% ^& s                if(ROW1==0)
) m6 U0 s' z" v9 r" m0 g  k                {
" n5 @7 e6 s/ o$ g$ A# |! S                        if(qupi==0)
$ p! A) [+ `9 z. X, P: C3 ^                        qupi=Weight_Shiwu;
% j$ r- f7 N& z6 N                        else
: a8 E5 W6 G0 g, H" E& J                        qupi=0;
9 o, R/ V+ O9 j9 D  @                        Buzzer=1;
" \: R& }% x  q- o5 {                        for(p=0;p<10;p++)$ M1 ~. F; y6 q1 [, k+ h8 G
                        Display_Weight();# @' b; X/ z/ @$ d2 D; ?4 x
                        Buzzer=0;          s* l5 _/ `0 }9 m/ x
                        while(ROW1==0) Display_Weight();
: p$ r0 b2 W- k7 u2 a                }
0 b" ?$ n  l6 h' U' @; o$ _1 \4 b( n        }1 s- u8 ?) C* `$ R4 l
        if(ROW2==0)           //加
# A. |) h% D! T' M6 v        {8 z+ S; {7 a4 i* p' q
                Display_Weight();3 h8 c' ^0 Z/ L8 t
                if(ROW2==0)
9 I& O8 A; g! f3 x, Q7 F2 v& C* }0 x                {
' z, a/ i2 ^% K, D/ R# y# Q                        while(!ROW2)4 d* d! `/ O) l% r
                        {! `7 A8 L! R6 n
                                key_press_num++;3 y5 ^2 q- Y3 h
                                if(key_press_num>=100)/ u7 @- q7 P6 r/ b' t
                                {
2 {6 K2 o* i2 H4 `, ], H0 |                                        key_press_num=0;! z, ?" e; ~! `' E
                                        while(ROW2)
2 L: M) }7 N$ a' b# f                                        {. X2 r1 k0 W8 q
                                                if(GapValue<10000)( S- L1 V* F0 C5 }- v
                                                GapValue++;  C, A4 [" n4 o1 P
                                                Buzzer=0;
- |8 _5 Z; \% a8 P3 ~                                                for(p=0;p<2;p++); |. ]/ y, u3 t7 M0 i% W& _
                                                Display_Weight();' H5 m& u$ ~* z7 k: i7 O) \% E& x
                                                Buzzer=1;; ~$ g8 m) X, h) s; @: q* {
                                                for(p=0;p<2;p++): H" P" \4 \2 x; U: ]+ l
                                                Display_Weight();
$ I9 q0 |) N0 V                                                Get_Weight();* p7 \" J+ o( c9 t6 V! N! h) f
                                        }
3 X, O8 n" G6 b  P                                }
  Z" ]5 h+ e) {2 U$ ]                                Display_Weight();
1 |0 Q* p9 ~' t" [                                Delay_ms(8);3 ?! B$ z! k9 l3 ~# i
                        }' v% h" L% \: L. {% Z6 F
                        if(key_press_num==0)
' @! w( o" u+ ?9 {2 Z* g$ P                        {
$ h8 X3 o: L+ C: {' l" F6 k                                key_press_num=0;4 I/ M7 `+ ~: k( m: A" k
                                if(GapValue>10000)
- O% w4 m# l  A                                GapValue++;% X( B" \9 [5 S! ?( z0 D, ?1 \
                                Buzzer=0;9 X7 C" ^9 w: T3 I* X8 ^4 x6 d8 R
                                for(p=0;p<10;p++)2 V$ i# K. R) o* ?
                                Display_Weight();" K( G, W0 K) P& ]% z/ T3 b9 G; z" k
                                Buzzer=1;6 }" V, O3 w( B6 h: M: Q
                        }
& S" ~/ B6 D/ P& c  [  u                        write_eeprom();               
4 G6 r/ K" R6 A* t8 O                }' @3 s3 T8 Z8 D; e/ Q% ]/ c# v
        }
9 n0 |# u$ m6 L2 j" k        if(ROW3==0)  //减
& f/ z0 ^; b1 q        {
$ A+ S1 N% n- u9 S/ Z- g                Display_Weight();2 g- d% ^& @: d( D& P+ `0 F) {
                if(ROW3==0)
" O% B8 F6 {/ S9 k% t) ?* ]% Y% ~' L1 @                {
; ~4 p2 ^1 S! s" `1 Z# ]+ [- W7 }                        while(ROW3)2 W9 a* i. ^0 F. {+ Q! J
                        {. `; ^4 s# C, ^% m6 h, s( d
                                key_press_num++;. K# Q7 J$ G+ x8 g4 `
                                if(key_press_num>=100); h9 k4 D! ]% @, G8 v2 v; _9 G
                                {5 u  |6 Y6 Z& z0 [# M2 k* u
                                        key_press_num=0;1 w( T1 x' N- h3 w4 K
                                        while(ROW3)# I! w5 G8 ]$ ^1 Y3 W# N6 H
                                        {
: t  b* y) v) K" z) Y                                                if(GapValue>1)9 q9 O( E( j0 m  E: x+ j
                                                GapValue--;/ a# S1 z& r/ a$ @
                                                Buzzer=0;4 O8 K/ P+ K5 e, o
                                                for(p=0;p<2;p++)
/ }! Q4 G5 h0 W; y2 E7 g# p$ F                                                Display_Weight();( m% n( j: q) s" l1 {
                                                Buzzer=1;
& [  P9 l* g) x8 a) O; @                                                for(p=0;p<2;p++)9 O; i9 q4 N3 g* e5 h$ A0 G8 J
                                                Display_Weight();8 X+ n% ?1 M2 q1 i% v( R8 n7 c
                                                Get_Weight();
; ~$ h; D4 U* V0 b3 Y3 c; r$ U2 f                                        }
" a3 Z1 G7 A- o, n                                }
. e9 o2 o+ i! W: E2 U: {- f3 N4 b9 w                                Display_Weight();$ ~# Z1 e# e- a1 @+ a0 ^4 G6 T
                                Delay_ms(8);
7 ?& |2 V- Z* B; S, n. s                        }. S* A  }. W3 b5 G: r
                        if(key_press_num!=0)
6 U6 @) ?: B, F& e  ?                        {
1 ?6 q/ c3 q; h5 n2 e( o                                key_press_num=0;+ L! P8 C( N4 g2 V  b3 B
                                if(GapValue>1)7 Y) b7 x7 b, e8 H3 w# _1 G* i
                                GapValue--;" W* _# z: ?6 G; l7 \$ V
                                Buzzer=0;
8 S9 Y% ?) j8 l                                for(p=0;p<10;p++); s9 Z/ F4 Q7 l4 V0 G& q; R8 t
                                Display_Weight();0 M8 v+ p& {6 b5 ?
                                Buzzer=1;
* D& [9 x  V* Z6 n( P! k                        }- B- k% V( Z8 R5 Z! }
                        write_eeprom();                           //保存数?4 I% A- M9 r3 o$ {0 A; q7 D4 i
                }  ~' n/ \3 E5 l1 j2 q8 S' t
        }
  `7 p( R  u4 Q}
( J1 w% e- x3 P8 e6 v' q: j//****************************************************  o) Z- {- J7 @) `% w
//主函数' U' |1 ]- U$ y- P" S
//****************************************************# D" i0 Z1 E, n
void main()6 ^) w, G6 E  o4 N% _
{        % u3 m6 F) `& c9 g+ H. y! `4 j* H
        init();
2 G1 D9 Q' ^  e6 B9 R2 h6 X. {% }        init_eeprom();  //开始初始化保存的数据
, J. ]9 ^& Q, t: e+ J+ G! R; p+ d   EA = 0;
* r; g( D9 r# g8 C   Timer0_Init();% f& p" |  s8 [$ v0 h+ O8 [* U& j0 W
   //初中始化完成,开断
  l  ?2 R. b# e/ `* l1 z& d8 ?6 ?2 v+ X   EA = 0;* _4 ?. P1 [. x+ b) L: M6 U; X3 t
   write_com(0x80+7);
* n5 o' r* O5 ]% l           write_dat('K');         
% Z+ ]# j* Q6 \6 q# @' K7 i        write_dat('g');
. J* K& N0 j$ [# c2 V! Z" k        while(1)
4 u' n0 O8 [) A0 i  F4 H- n        {                                                                         //每0.5秒称重一次
! w) F/ H$ c, N/ A& r4 B1 i5 k2 Z               
# J. Y( L& u2 ?! Y& S: r                if (FlagTest==1)
8 _" c9 I1 G, Z- o3 x+ {+ Q' u                {
+ h1 m4 ?% {5 M8 G. [. N: x                        Get_Weight();% ~1 r, u% c4 i( N4 Y, z
                        FlagTest = 0;. P) P* ^4 p: x% P
                }
8 }" H6 }+ x3 O- a3 T! D- T  _- J+ J                if(flag_cz==1)8 o# c/ Y* z) C
                {+ C  @) e3 k/ Z( }/ G( j
                        write_com(0x80+2);
8 X. M4 j+ V1 w6 T5 E0 {                           write_dat('0');8 z/ T; z5 C; @, ^, L$ ^6 `: F
                           write_dat('.');
4 Z7 K( _' v' \- a: E                        write_dat('0');
/ C; \& r# S+ L) O                    write_dat('0');0 R0 j2 ]+ i. ]2 C  T
            write_dat('0');
) }! b" [. n& B' G& P                        write_dat('K');         
3 G6 t/ q1 D; {) \; V                        write_dat('g');
# ]1 ^' C. `9 J# R4 v+ z$ d                }3 j" v" t, L& ]  I  X
                  5 D8 w  `1 l* r. w
                Display_Weight();         ' C  G) }5 a9 M; Q1 B
                KeyPress();
( ~+ v) G- g8 f  Z0 K$ Z  `+ R6 e        }$ h# [0 s8 t' x  ^8 n7 e6 u' ?6 X
}* V) ^' E5 j6 o' R0 S6 N
//****************************************************
% ~* E9 B! d. c; I8 L6 m- g//称重
/ P! s, ^* ^# t3 m6 F$ d7 E2 I' l//****************************************************
$ l- O0 f, s; O  G8 kvoid Get_Weight()
0 Q7 ]$ z/ T! r( @& }7 X{: A% b( S  Y) R
        Weight_Shiwu = HX711_Read();
% ^9 @/ a2 t# w! c6 o( c        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重; X" Q6 g* i- H* U0 I7 ?* I
        / ~2 }2 }4 [) ]! p2 m6 ^( Y; n6 `
        Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu*10)/GapValue)-qupi;         //计算实物的实际重量                                                                                                                                
# _; T% Y6 \$ C; q        if(Weight_Shiwu <= 10000)                //超重报警2 P( c! v" a5 m, b
        {
$ T) S( b) S2 H9 h: h                Buzzer = !Buzzer;        0 h1 t. k" Y( t; w: {0 v6 `6 U
                LED=!LED;1 ~) ?8 `* R  S$ `8 B
                flag_cz=0;- Y- i) B. P* C7 ]: M6 d  g9 G* z
        }
# _  K6 K+ \0 R0 \        else- i# h+ q5 T; Y( Z+ Q$ [" Y5 Q
        {/ x% o2 E0 m2 D( j: g! Q: Z* |
                if(Weight_Shiwu==0)9 x. d* d3 l$ K* \
                LED=0;" p2 A3 P1 }9 z7 a7 \2 A
                else if(Weight_Shiwu>0)$ d# H. ?( c) M; s9 z$ Q
                LED=1;
. c; n; P9 t/ G" s0 S/ i                Buzzer = 1;% `& x9 |( Z0 V% ~. l8 h0 C
                flag_cz=0;+ {: m8 Q3 I# D$ z$ Z
        }
9 j  b) S- R5 B6 K2 ?* [}8 B$ p0 |, N! E6 G* x- Z  O
…………限于本文篇幅 余下代码请从论坛下载附件…………
4 s! ^. i8 I( t: t# `- z) `; @5 O' T4 ]4 ?
: `, e( `  W) U1 \  X

0 z7 z2 v- z  T4 F# o7 X4 ?
) a; e4 Z. h! t+ h* J  l3 l4 c5 y, V9 `
游客,如果您要查看本帖隐藏内容请回复
: X) |: K7 d0 A/ O6 [

3 n* m6 U# _9 R0 O6 A4 K
* g# x& O3 r/ k- L* X+ I" {4 H

该用户从未签到

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-10-31 04:26 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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