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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
基于单片机的电子秤设计 原理图和PCb图 源代码
) {2 V" s. u7 a
1 ~' n. p8 Z# W) X6 M0 z

6 Q, H$ x% ~( @* d2 D+ o+ e原理图:) M  ]! H  W# {/ E- j8 y

$ P% ^& ~& E1 T3 L" |
# R$ }2 I0 m$ V( y* w( E( i单片机源程序:
6 w* ~! w) U( L/ \
//程序采用的是模块化写法,你写论文时也分开写两个小标题把代码粘贴进去就行了。7 B: u1 T$ a- Y0 Y- C! _  {
1 O( R3 o, E. r# w
+ q+ m$ h" [2 A, [
+ w! Y/ C2 l- J$ h, \

. _7 I4 B; b1 S& M& Q8 i% q
9 F$ A' \7 l& R4 ]

, a3 q$ P# g' D0 m& H3 e' m//HX711的AD转换代码
  D5 n, W6 n( }8 y$ j
: a# H# q1 [/ @6 y2 l4 V

( z' R6 ?* p; s3 q: q, k#include "HX711.h"' N" y+ r2 m1 R0 V8 K% u* ^, r0 c
* W/ f5 K$ a: Q- D

( g4 z! E: S5 E% j) U2 O6 H7 b; O0 g  w8 V# }& o* Q0 |
, m) R4 o/ O* ?& t
//****************************************************
5 f  o; z* h+ m1 A/ v2 K//延时函数( D' S8 a/ S; y  Z
//****************************************************& ?8 ^% Z2 \/ ~: Y( n, E% v
void Delay__hx711_us(void)
$ n8 a" ]+ }2 x/ [{- U! G$ e+ A% x4 C% s; \
        _nop_();
6 H2 X: l& o" l, L7 }# x        _nop_();6 K, [& i1 M/ ]  R
}
1 V) B- v( U' J! G" s( N0 {; X* D1 q. \, y$ v' R+ }+ l* s: T4 w) J
* S0 ^4 f' z9 d5 c& d8 I
//****************************************************
# }$ |  \! a1 x6 h$ Y7 @//读取HX711& P- `7 B6 G3 y" l
//****************************************************
. z+ F6 I: P; Z  H& m9 f2 Eunsigned long HX711_Read(void)        //增益1289 T8 w: h- f; D) d
{% [) \2 K+ y4 e" h1 \* |& N' C9 }
        unsigned long count; 3 a/ Q- U6 s' I
        unsigned char i; 5 x; E7 ^# m; L0 u$ z6 @
          HX711_DOUT=1; ( y0 D3 X+ {2 B3 d+ K
        Delay__hx711_us();! C* b9 I+ _# `% g
          HX711_SCK=0;
/ p3 |' D' u' y          count=0; 0 v$ W+ q7 S5 t. a, h
          while(HX711_DOUT); # l- u; N, n3 |$ m
          for(i=0;i<48;i++)
" n. K9 C! O$ N8 g5 N        {
3 V, ?4 k1 ]# I' _# b' |- R) P2 Z9 A                  HX711_SCK=1; " G' P% h. d% D
                  count=count<<1; 6 `9 [, Y) U# o  H
                HX711_SCK=0; 0 v& }( ]" w# w2 }6 l
                  if(HX711_DOUT)5 ?0 I5 r) W+ l, B: D1 t
                        count++;
, p3 `5 U+ [  n) J' f        }
! ^+ l1 I. y6 m" t+ O         HX711_SCK=1; + U6 z, |) v) g2 j( \$ {4 K
    count=count^0x008000;//第25个脉冲下降沿来时,转换数据7 T* n# i+ k" C- N
        Delay__hx711_us();
( f/ l9 r9 C0 V2 k        HX711_SCK=0;  ' `& l0 V- H9 v) ~1 t1 R9 e7 C
        return(count);
  j& g  Q  F9 D" c; ?}$ M. ~0 C7 o+ B4 Y* k' |) `; u% F; ~. F
# m! u+ }2 v# a0 I5 n

5 j  q) L6 N" K1 ]2 W: \  q4 ^
' [' ~/ d" U4 ?9 H

4 I) C" A, B7 n0 |- t6 ?) l主函数程序7 I# N/ n) n; W  X: Y+ y* g

4 j; J3 p# O5 p! d, Q
. C& b  W% V' Z# `8 x4 ~5 r
#include <reg52.h>
% P3 g2 z+ q* h& u! j  X#include <intrins.h>" N7 g) P( L9 l" P
#include <string.h>
3 [- ^( P6 F& X#include "main.h"
6 s* U8 o/ W; t7 s3 m* g" Z#include "HX711.h"
4 d% _* D$ X0 u, P1 f4 Q3 @5 h#include "eeprom52.h"/ a* B+ E' q8 Y& ^) q, C5 f- P

8 {  |1 V4 `+ Y9 {% e7 s8 N. \8 d" R

/ Y8 ^6 S- h) l+ B7 X#define uchar unsigned char& ^0 a4 q2 C0 Q0 s  E
#define uint  unsigned int% [% w( y5 v4 g! S$ T
uchar qianwei,baiwei,gewei,shiwei;
1 U. M/ ^$ U' C% s, C' Eunsigned long HX711_Buffer = 0;
/ q* w, X5 n+ h" R- i# @unsigned long Weight_Maopi = 0;2 B# j) y- Y# ?8 P3 L
unsigned long Weight_Maopi_0 = 0;
4 h' ?6 ?3 Z/ Q* n! B: `3 K  G' R/ Rlong Weight_Shiwu = 0;
% ]1 Z4 ~7 i  {3 munsigned int qupi=0;; i/ j% x; {9 y! ^3 q# Q. v
unsigned char p=0;
& u) s6 B0 t  p4 |" J: P' [//键盘处理变量! z$ i$ s" b1 `3 Q
unsigned char keycode;/ l. X, B4 m' v+ I, R8 t" r
unsigned char key_press_num=0;
/ T1 [2 A- ?% U+ j# f1 s2 @9 Y
, \% l, \, D5 a' G' _
0 X* n  N- k$ U6 z" p, G
uint GapValue,GapValue1;
" q1 l9 e; j6 R8 F6 Y6 J2 `bit flag_cz=0;
0 b" U! {9 g8 `3 r) W
2 r7 U+ x  \6 J
7 {% Z( E% o; d; n9 P0 n
//uchar code  LEDData[]={0x5F,0x44,0x9D,0xD4,0xC6,0xD3,0xDB,0x57,0xDF,0xD7,0xCF,0xaA,0x9B,0xDC,0x9B,0x8B}; //数码管显示码表8 G; K; Q# K' X  g4 M; d
//定义标识1 h4 ?/ z5 }4 G4 |3 Z% y- F5 R
volatile bit FlagTest = 0;                //定时测试标志,每0.5秒置位,测完清0
- {! J" p5 y3 ~3 d1 {. Tvolatile bit FlagKeyPress = 0;  //有键按下标志,处理完毕清0* K4 N$ `' X( |/ T( ?
//校准参数# @- B  c% z/ J) a* M" q- D9 u9 O
//因为不同的传感器特性曲线不是很一致,因此,每一个传感器需要矫正这里这个参数才能使测量值很准确。9 Y' H& m" @- y  C
//当发现测试出来的重量偏大时,增加该数值。
  ~% A, I5 D8 w  v- V' l- y//如果测试出来的重量偏小时,减小改数值。5 \' Q- S: t. j9 O! J
//该值可以为小数
. Q1 s/ p$ z# J6 d% a& Y. j//#define GapValue 349
% L  Y  g' \. j8 V1 h6 Csbit LED=P1^1;) R1 N4 W3 s- X9 N$ g( E" c
sbit ROW1=P3^0;. M7 G" N4 R3 k/ z3 |! F0 j* N' j, ]
sbit ROW2=P3^1;
& p' Z$ [/ g, ^4 e9 g, _( isbit ROW3=P3^2;
8 b# s. Y" a9 [  o0 Usbit ROW4=P3^3;& j5 L; M5 v6 m: L+ ?4 }3 l2 Q
//sbit DIAN = P0^6;                        //小数点% Z3 P6 L) v- f" n0 m" o
sbit rs=P0^7;
7 ?( e& k) S- ?) w' Osbit rw=P0^6;( j3 K) e& j: ?
sbit en=P0^5;
* @0 C" Y! j9 ]5 V* d3 p  E" nsbit D1=P2^0;
/ M( j& F* {6 M6 c' E2 Z
9 a8 b3 }. u( l- ~

6 }! D/ j# a+ P, p- E0 P4 Evolatile bit ClearWeighFlag = 0; //传感器调零标志位,清除0漂
( O/ A7 y- b# L. a
& {! d& x  O* w$ z% K4 C

+ j6 V; @3 b3 w  d# J) A/******************把数据保存到单片机内部eeprom中******************/+ {3 a7 c% Y8 |: ^; d5 A
void write_eeprom()
, Q0 |  M7 @2 v8 t5 `( s{" K4 r9 m2 Y6 x- P( A" _! m
        SectorErase(0x1080);
1 Y1 {; S; w& @2 G        GapValue1=GapValue&0x00ff;
% W8 ], [; l0 G( F0 E- A% o$ N" @        byte_write(0x1000, GapValue1);
7 K9 p% z0 F+ E        GapValue1=(GapValue&0xff00)>>8;& U1 O4 D$ {( [5 t
        byte_write(0x1001, GapValue1);7 A& v; F  ^# J( M; d# E# i
        byte_write(0x1060, a_a);        ) X" }- d; i/ s+ I  N) A7 h) u! X
}5 b% h* s- k" o" y$ L
8 H3 y* I5 u, v( r& j: ~
( n, F- Q; z7 {! `4 a" f
/******************把数据从单片机内部eeprom中读出来*****************/7 b0 E2 j% @6 {" O# a7 T' l+ _$ q& K
void read_eeprom()! J9 [! t" Q3 \* ]
{) t% R9 Z. x9 W  G6 f# [
        GapValue   = byte_read(0x1001);4 c; {1 C! C2 ^# i' U) g1 l
        GapValue   = (GapValue<<8)|byte_read(0x1000);. \3 S, [) |( B
        a_a      = byte_read(0x1060);2 G6 ~9 `  f6 k# K+ q( V3 X( b
}( O! ?( J9 `8 L5 U$ \8 K
1 a( X' F' V# n3 _% N/ |0 Q
1 b. S1 I* v5 B  r: ?9 }- P
/**************开机自检eeprom初始化*****************/, N5 P6 s7 l$ N# K8 R; T; _9 i: d
void init_eeprom()
( L2 i. H: D4 C4 t1 _8 A{
* N4 h. x2 s/ W8 a; w7 t0 V- H        read_eeprom();                //先读7 `3 C% _( r- f! J+ u  b( f- [6 s) Q, b
        if(a_a == 1)                //新的单片机初始单片机内问eeprom8 l: n6 O; |# H, L
        {
$ Z1 N- f8 @! R4 U$ X                GapValue  = 3500;
1 e9 @5 S( G3 h6 B! U                a_a = 1;
7 @+ |( o$ b! Q                write_eeprom();           //保存数据9 Z2 Z4 k, b8 M; m
        }        
7 [9 g9 u; R( q" B  U3 u$ D" t}0 A0 u4 U! i) K* e6 p: l
void delayms(uint xms)                //延时
1 T& K- |. w5 J1 ?  E {
8 C5 d4 P, Y, S. `+ Z         uchar i,j;
. G1 i6 {" Q; S% ~5 }4 U$ X8 K        for(i=xms;i>0;i--)
: M3 p: z" `, c2 N+ V+ l2 a                for(j=110;j>0;j--);
5 r8 U% x* V* u+ y! ~) C6 ~; m }/ F3 Q0 w$ s- O9 ^2 a% }( \+ ^
void write_com(uchar com)                 //写命令9 @! q) A' U5 t8 h' s
{6 O& P6 W( |4 r. c
         rs=0;3 |: h; k+ h6 F9 d5 }/ ?
//        P2=change(com);
9 K7 k5 `# K$ \7 I, q; `        P2=com;
9 y# F% B9 d. h. u3 ?        delayms(50);: ~% I/ S, z  E4 `! |& _
        en=1;
  D1 C9 u3 G2 _* [0 d6 r* \. [4 U        delayms(50);: F3 `* v# R3 w
        en=0;        
( ?& T( H7 h3 B8 E! D$ t6 I }3 \* ~% `; g+ L8 z5 E& Q# I
void write_dat(uchar dat)             //写数据' v8 F* l# O6 \3 K3 S
{
$ B2 e" b* ]/ }3 f2 W         rs=1;) G, W: R& W; n$ j0 f/ d* t
//        P2=change(dat);         
) r9 b9 h  U/ N! A5 A0 F5 i        P2=dat;6 Q) u, d9 V) z, n5 V6 t3 x" ~# k
        en=1;
# F& e9 G  B/ K) R* q- _" \        delayms(50);, z. U0 R) G4 F. ?9 _) D3 J
        en=0;
- i; Y6 x* h3 p. ^1 u }
# l$ O* B- J' F" Y void init()                                        //液晶初始化
$ p% q$ S) @* A1 a( n0 C) b" | {
9 m  i2 W+ ^1 S2 I+ b) G8 I         rw=0;$ W) ?" Y! K# U8 n5 G
        write_com(0x38);
9 e7 j3 `7 s" t! u# m4 v8 t( ]# H        write_com(0x0c);  . F$ }% D& t7 H5 W! |. X
        write_com(0x06);2 r6 N# ~' z7 i
        //write_com(0x01);8 {3 A; y( l; \# a( v- i+ \
}        
$ H, y  Z% ?0 {7 z, t/*****显示开机初始化等待画面*****/
# G6 R- m1 ]. o7 A/*: r& g9 e! M- S9 w# H( M
void Disp_init(void)    4 U$ s9 T5 r8 q& a
{
$ I3 s# P: g, X3 s- U+ ]9 Q9 @        P0 = 0x80;      //显示----' R" x- x  m  J, u% h
        P2 = 0xBF;                 //依次打开各位9 M5 U% S' s0 y
        Delay_ms(1);                 //延时& n1 b3 {: B  @, O* {3 O! {2 w3 a
        P2 = 0xEF;
2 }8 _0 e: E) i2 A; e8 K; f3 y8 }. \        Delay_ms(1);   
9 a% V- a0 p$ [% Q        P2 = 0xFB;
  Q% |3 }# a- w. h        Delay_ms(1);
- L$ i2 D! o9 @        P2 = 0xFE;
! f( H7 z6 T# U: V        Delay_ms(1);7 d# K/ c+ o/ a/ A5 u# ?1 U. n3 Z
        P2 = 0xFF;         //关闭显示6 ~6 `4 f/ p$ p7 W$ c/ R# P# K
}4 ~- h  n+ U8 j0 `# h
*/( G) Z5 d1 q: g3 U, |% Y* ~
//显示重量,单位kg,两位整数,三位小数+ m# @3 O- n3 p# W
void Display_Weight()
+ J7 M/ k5 c- q# G% j! U" _{                                                                                                                                                                                                                                                                                                                                            ;5 ^& c$ n% {3 E5 A! s  r  ^  Y  @; A
                        qianwei=Weight_Shiwu/1000%10;
& W. i0 ?# @, i/ d2 r' k+ K8 s: n9 D                         baiwei=Weight_Shiwu/100%10;                                                                                                                                                                                                                                                                                                                       ;
$ o) w! S8 R+ L1 |$ c0 r# `- \                        shiwei=Weight_Shiwu%100/10;
+ ~( U) u/ s* \2 ]/ S8 M( U                        gewei=Weight_Shiwu%100%10;  c3 [3 L! \. B( `  o9 E# Q7 l/ Z
                        write_com(0x80+2);
2 e, d: F; g6 p* L4 }
5 `6 E: B/ U$ I2 F) ?& |+ B  h( Y
0 T; G+ R1 ?- N7 I. O- {; n
                    write_dat(qianwei+'0');
2 c5 r4 I$ @9 U                        write_dat('.');2 K4 V. O7 ?6 ~
                        write_dat(baiwei+'0');. h% w' A0 @( a5 H; T) y
                         write_dat(shiwei+'0');                 * q8 d: Z9 F( @% L: q6 f2 t
                        write_dat(gewei+'0');) \. A- E. B$ a  `! D2 V' h5 X
               
  x, u: E# W% B; Y7 c) Z0 B  
0 S6 g; t" G0 o1 }$ X, _$ @}  
* A) L8 O4 ?& ?1 f" I5 E: B' [0 ^4 t9 y8 d5 q0 Z

# n+ J4 @7 i% _+ |5 T. D//定时器0初始化
3 |: E% S5 o7 m8 ?7 S& Ivoid Timer0_Init()
! u/ G7 H9 d' o{. N' f! R6 q: [
        ET0 = 1;        //允许定时器0中断1 e$ x+ M; S2 b' a
        TMOD = 1;       //定时器工作方式选择
5 K" J! x% @. y# o8 \5 v        TH0 = 0xb0;     * w( ~: k3 r1 y" u+ @. Y
        TL0 = 0x3c;     //定时器赋予初值
$ Y+ _! E5 \' a" P* C0 l( S        TR0 = 1;        //启动定时器
. S8 ]( `5 E4 Z2 T1 b; s, _}$ W. }8 F, m" E- J

' a( S: k% y1 {- y
. A. L. N+ c% K9 O$ M5 e" P
//定时器0中断# [& H; o& h  s0 S2 B/ m1 @0 y
void Timer0_ISR (void) interrupt 1 using 0
) E& M# d0 z- k. ~5 z" n. Y5 A& k{% C9 F1 ?9 ~1 @& n" p% W
uchar Counter;
7 `. J6 r/ o  _  `3 n        TH0 = 0xb0;, B1 @$ [$ H$ z, E
        TL0 = 0x3c;     //定时器赋予初值0 f- D6 k2 v& A1 l7 Q) Z
% \* ^$ W6 m5 {! \- _3 j8 Z
& M# h' f/ B- Q9 m. H$ [
        //每0.5秒钟刷新重量# Q) E8 n5 H6 a& G: P6 a
    Counter ++;7 }3 i8 T& o7 O( e, z
    if (Counter >= 10)
; |0 ?6 M3 I& k. l    {) r* D6 v6 P6 N* \5 U0 O, Y
       FlagTest = 1;
) b+ w$ q. F6 x7 i& s           Counter = 0;
' F8 m! B2 u" W: ~. N    }/ ]4 H8 x! |; _$ e) X4 H8 J
}
/ }" N) k. ~) p+ q% y" ^9 T* a( n" g: e& N2 l# b2 ^
1 {6 N$ C: \* t6 M; S; ?
, E: k+ v  g7 F+ R# e- u9 k

% Z7 m# x8 g8 H) ?& ]1 r+ O2 X//按键响应程序,参数是键值) Q- l& f! X  E3 B; W6 t
//返回键值:
- k$ t7 y0 g! i1 P$ B  D" y//         7          8    9      10(清0)
& K+ E% P' j2 V# s5 c6 V//         4          5    6      11(删除)
$ ?4 o1 V/ B3 i/ D7 M- x+ f+ y8 R//         1          2    3      12(未定义)6 v6 H3 W3 ~: e6 S- p. A1 j
//         14(未定义) 0    15(.)  13(确定价格)
, u8 H( X3 G; l! H$ s$ l
5 c" T/ b7 l9 }: A* F

1 n! \) {% L+ l: [# Avoid KeyPress()
, _+ I1 |4 D* Q$ S; K{
; q1 ?# A$ k. k  X7 i' Q0 Y7 w: [        if(ROW1==0)   //清零键
" ~9 Z% }' [! A: _6 {/ @        {
) i' C0 L7 W4 ^, R6 v1 J                Display_Weight();
& W! T5 B- `/ W2 x2 o0 T                if(ROW1==0)7 \6 v& P! I, T1 W" {
                {
. \0 h1 z9 H$ c7 Y2 ?                        if(qupi==0)
+ N+ p1 N- M  R0 z; z9 n5 N- d                        qupi=Weight_Shiwu;: {5 E: e; F& V3 K, _1 a  f# e" \' x
                        else
+ U, u9 l# K1 |$ n7 q! Q- w                        qupi=0;
3 V! Z# o+ p( Y/ o. y, q9 S                        Buzzer=1;
: Q9 u0 `9 Y7 g0 p, e  Q7 Q3 Z                        for(p=0;p<10;p++)+ y9 U( ~, [9 E9 A- }- k
                        Display_Weight();3 J6 I; A5 o" |0 y
                        Buzzer=0;        
) P' S( [- E( a+ {                        while(ROW1==0) Display_Weight();
8 d  b/ i' u# e+ C7 I4 e% u9 ?+ x+ v                }
8 a4 J$ K* |8 ~' ?        }8 L  b) W% @8 a" z9 `6 ^
        if(ROW2==0)           //加
' j) t3 L- l/ b7 [' s8 z* w        {
* w* L  p) z# X4 T% f' ]                Display_Weight();
# t7 ~( ]+ V! ~, t9 M2 C                if(ROW2==0)
- c# z1 I* h# N4 I                {+ }  h9 R# @0 B. |+ g& r
                        while(!ROW2)
, F( w5 a4 R6 |. n                        {: l- X4 H8 C1 P' r( V7 z* s9 \
                                key_press_num++;
: y2 X0 Z3 ^) J$ x9 F" \& Y5 V                                if(key_press_num>=100)
, x9 s* ^! x  p9 G                                {1 T7 [& L  ^( D
                                        key_press_num=0;, l: H9 S- E) E7 W) S# s& l
                                        while(ROW2)2 @: r0 `: L1 H" z) u
                                        {
, g4 C2 J2 k/ B9 f. z                                                if(GapValue<10000)
' @2 j8 Y) H- V4 I. X3 L8 t                                                GapValue++;
# I6 _4 S& I6 V) r+ i3 p$ U                                                Buzzer=0;: L7 U' h5 j/ \) R
                                                for(p=0;p<2;p++)" R, j' r  g+ L$ c
                                                Display_Weight();& O% x8 S$ {: B
                                                Buzzer=1;
" e: b# r( S! f& d4 e                                                for(p=0;p<2;p++)
' o# @. q! g( g/ s! k: J4 z1 Z/ ^                                                Display_Weight();+ C$ f: ^0 o7 ^' k+ `
                                                Get_Weight();% z$ Y3 l2 p- t: F4 M3 y
                                        }0 S  `# C, {" e6 {" ^1 {( V
                                }
8 |; V7 K" U' ]5 E# v3 G! c                                Display_Weight();: Y  Y9 D. p+ c( l5 U: `
                                Delay_ms(8);  T* ~- w* M- @! _1 |8 |" M
                        }
, [# C1 o" V0 v5 `                        if(key_press_num==0)$ Q: g. ~% _$ B; d2 s  ]8 M
                        {" U+ @3 b5 Q/ K9 S+ A7 d' i
                                key_press_num=0;
4 a+ P, S" ]% c& Y3 d# |. R, I7 e3 c                                if(GapValue>10000)
- q% H  l- o# `9 {# Q- j, k                                GapValue++;
) M$ J$ ]' G; B6 K( y! E+ ~& r, T                                Buzzer=0;
7 K8 h& ^# I3 Z% v# J- Q" j. z                                for(p=0;p<10;p++)
+ {% ~, B- c% U8 T                                Display_Weight();- w) e7 O2 H( ~5 J' B
                                Buzzer=1;* G: n+ c2 I- O0 y2 v  f
                        }) P3 g2 [( S, _
                        write_eeprom();               
7 C; Z8 N" d# O3 h                }: x% q: o; W9 c9 e+ `/ x& Z! o: C
        }# E7 y& S& V+ y' W3 n9 v+ Y
        if(ROW3==0)  //减
2 X- _: G. e6 t% i        {4 ?( s1 ?# H/ f4 Y
                Display_Weight();5 k1 V' N) J6 {& h, T- p" f/ M
                if(ROW3==0)- o  V9 z# }$ x, l. Z
                {  `, w9 V7 P  Z! Y* A
                        while(ROW3)
7 o! i9 C( [! e7 R                        {
: D% G( H2 H7 _, T/ O4 V9 K                                key_press_num++;8 S3 Y% B' n* x5 R. i0 N& n' H
                                if(key_press_num>=100): N! F4 q# \8 p2 B; k9 S5 i3 C. R
                                {6 e# A! B1 j* K
                                        key_press_num=0;9 o6 a) D/ W& ]* \- X( K4 R2 N' r
                                        while(ROW3)2 C' H" Y% l- B( E) Z
                                        {0 @& `  H/ X2 Q! R
                                                if(GapValue>1)
* B4 a6 x  ~% }" r5 }                                                GapValue--;
) V1 }" \4 [9 ^  k. \; i                                                Buzzer=0;5 D: }8 [7 ], q
                                                for(p=0;p<2;p++)# X0 H' p/ @7 y  z0 W: Q
                                                Display_Weight();
7 v' ]4 a/ O5 B                                                Buzzer=1;
0 a5 L- P3 I+ o9 C. ^6 Q# x                                                for(p=0;p<2;p++)
' C  s0 L; {0 {/ K' D% S5 c! G                                                Display_Weight();
: ~1 s$ o( b. a2 p$ m5 P                                                Get_Weight();
7 M2 ]7 k. B5 O% W                                        }, x3 g' |/ A3 P( ~7 p
                                }
. i% Y- Z, w% u* E, Z                                Display_Weight();. S$ d. H5 n7 Q9 O
                                Delay_ms(8);
. t% I3 t) K9 a4 G& w+ N# J7 G! W                        }$ g- ]; t1 M) m6 N; P3 _. P
                        if(key_press_num!=0)# R( E3 s( |, v' G( O0 Y# q
                        {4 F" H- T1 {9 u1 j5 W2 {
                                key_press_num=0;4 j) o" c2 x) Y+ j# d# e3 l
                                if(GapValue>1)* V' s/ b5 k& c4 i7 b, _6 v. S
                                GapValue--;
8 l) A. f0 v, I3 d( B1 E1 _                                Buzzer=0;
: \! I0 f4 N9 \; U                                for(p=0;p<10;p++)7 Q4 b$ C, I/ ]- n% m. _
                                Display_Weight();  I0 @: M3 k3 B
                                Buzzer=1;
3 ~8 V: ^- z: t# |6 y  S                        }3 }8 N4 |' P, m! a& l
                        write_eeprom();                           //保存数?* r( m1 Z8 M  K' Y! O
                }
, u2 q; c) ~$ ^  _! }9 j        }! W5 g9 c% L& F9 R' I' z6 H' [
}. V4 ^: z' v5 T* e- ~* z
//****************************************************
( g( p. k3 b+ V//主函数' Q! ~' s0 s9 b& i
//****************************************************
6 \( _" U3 [7 y0 ]3 d$ e' bvoid main()" l9 h! e3 _9 s& x
{        0 V- X, A. n; U8 ^
        init();7 L/ O. l' `* ?$ d
        init_eeprom();  //开始初始化保存的数据+ v2 s9 L0 F1 b9 Y( T# ]
   EA = 0;
# f  M, j8 M6 n6 n3 O# s; |   Timer0_Init();
  B6 ]# w) u  y8 V3 J   //初中始化完成,开断
# }( }9 G6 s8 F% o+ O   EA = 0;
5 N( y/ L0 V. g   write_com(0x80+7);
* h4 j2 d" m7 E* @* f' h3 ?: e           write_dat('K');         ! x" d- u7 b$ d- \7 n+ M
        write_dat('g');
" w8 u) F% [9 G9 p9 \* R        while(1)
8 L8 p7 e$ E0 s" @2 M2 s        {                                                                         //每0.5秒称重一次
/ U2 F* O4 g4 n: ]* g# Z/ h                & I. a, A- H# q' @9 @# E- s
                if (FlagTest==1)
2 T5 |% n* f6 D- r( |' s                {7 L# a. N$ d9 b; K$ O- n; ?
                        Get_Weight();: h" `/ p8 g, ^6 \; _( c9 l
                        FlagTest = 0;' ]% N3 a! Z6 Q% E7 ]- v: u3 Q
                }- [& b! B, w: X: R0 l0 F
                if(flag_cz==1)
, O) q2 U1 H3 L2 d% d4 g                {
2 a' e  X0 N' I/ \0 D3 J                        write_com(0x80+2);0 k  S0 h+ p. g: @2 A0 B  [: C
                           write_dat('0');
7 a0 v8 G3 X' a% o; m7 o                           write_dat('.');; E6 W9 v$ y7 g6 I/ z' t
                        write_dat('0');
* N) u# D: X+ {& ?/ F  ^                    write_dat('0');
3 y. q7 }1 {4 }- {6 _5 F; E            write_dat('0');
" W+ ?9 e- n! c0 s/ r                        write_dat('K');         
# h  R5 j0 v) M9 v6 k" f4 r3 R                        write_dat('g');$ t& w# {" K6 _7 d. e% s# s
                }6 z+ K. g7 ~1 C6 ~, @7 q( S
                  + P% n6 v- P/ M
                Display_Weight();         
% |3 K/ Q+ J7 b5 K( ^% j                KeyPress();+ F2 e5 U4 P6 ]! M! N
        }! U- `; @( R  `4 H5 Z
}
4 W/ S0 g0 O" k//****************************************************
7 J0 X! f" G2 Q( H! g//称重
1 u- }0 e- \, T//****************************************************
+ q4 W1 Q3 N( ]: P5 U: a& e7 g' Bvoid Get_Weight()
' p, v. Z& }* O1 O5 b{
; k. z/ L/ K) L. ^# L5 ^        Weight_Shiwu = HX711_Read();: N9 v' L9 D3 r$ U+ `0 G2 j. Y& k
        Weight_Shiwu = Weight_Shiwu - Weight_Maopi;                //获取净重: p/ I6 @, K- }0 z
        + _# T9 m- ]0 O: W2 A% V2 q
        Weight_Shiwu = (unsigned int)((float)(Weight_Shiwu*10)/GapValue)-qupi;         //计算实物的实际重量                                                                                                                                + K6 t" p$ w% G) }$ r4 ?
        if(Weight_Shiwu <= 10000)                //超重报警
0 M" c6 N; v; @        {2 T- z/ ^( l" C
                Buzzer = !Buzzer;        5 ^9 {0 I$ ~: w& z  B$ E9 B( Y
                LED=!LED;
: o0 x0 A' D2 j, y4 n* ^! _                flag_cz=0;
9 ?3 V" }2 t* Y/ A: {* j7 U        }
! h0 @, ?8 g, c; [/ @        else
4 a/ u4 O3 f) b  Q        {
4 [0 ?0 Q- T8 g0 |. r; ~                if(Weight_Shiwu==0)! ^/ s7 b% E% b& T+ F0 O
                LED=0;
% N" w  _5 P- P6 v* D                else if(Weight_Shiwu>0)5 q( E( I; k  ]7 H
                LED=1; 1 Y- E* K' Q$ [+ o# ?
                Buzzer = 1;
. L4 s0 |- }! R' G, k; e9 L0 ]! q                flag_cz=0;( ]5 H5 Y6 j& n! t5 U
        }+ x& b5 |, p; ]- o
}# N/ Z7 d3 w9 v! N) T
…………限于本文篇幅 余下代码请从论坛下载附件…………
2 r$ r  F% I# s/ o, w# s1 {2 O5 z- X" e' _

* P! X! T% I2 _9 m% l0 Q: X4 \! `. o# p
% e9 h1 I' ]  x8 J
游客,如果您要查看本帖隐藏内容请回复

+ v4 y1 `: X  c5 u* L( ]9 t3 S. g3 u! J' G3 n! G

( C# P# u4 N( F

该用户从未签到

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-11 20:57 , Processed in 0.171875 second(s), 26 queries , Gzip On.

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

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

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