|
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 J7 {% 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( Y0 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 |
|