你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】基于STM32的智能电子秤设计

[复制链接]
STMCU小助手 发布时间:2022-5-12 11:29
一.硬件方案- s* y1 z- W. |2 y2 s/ B0 L
本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性。本次设计采用STM32单片机作为处理器,控制各个传感器和外设,采用LCD1602液晶屏作为显示器,显示检测到的重量,压力传感器用于称重,通过检测物体对传感器造成的压力,通过公式计算得出物体的重量,此外通过16个按键组成矩阵键盘,可以输入数字,并进行加减乘除操作,通过重量和单价计算出总价。, R/ [: _, R4 X* z( b  v$ e
主要由STM32单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图:
0 G' k" r* v" F
$ }9 c* D& m9 O4 S; } %}U3H``IVU84WV4RPMD(}$M.png ' G- H$ l* K3 v

4 L& Q; h' r3 E二.设计功能
1 P$ k$ q9 |) p# r(1)液晶显示当前重量大小。3 w3 u& s% l. ~: y1 H
(2)按键可以设置当前物品单价。* H8 g) S" A$ q4 c
(3)具有去皮清零功能。
1 f7 q3 G5 p% i5 D( n) w* R$ l(4)按键确认按键液晶显示当前重量,单价,总价。
! M. B0 C8 A' o$ C' U! K4 n  D/ ~7 }% r0 m9 `3 R
三.设计原理图/ J! V$ u, |# k& v, d
(1)原理图主要采用AD软件进行设计,如图:( L4 Y% y9 N0 f4 c

" K; r; J" b  p& i6 a' e) n" s- B* M7 f Z3)VOKLGHANU_YT)F{VGx.png
9 q2 b" ~5 d6 E8 x
( ~4 M: n* B- X5 t  z(2)PCB图如下:7 M- C: O. z  W$ w, n5 H- |. I- s: m' x

) H2 B! z' ^8 Z Z3W2$H4`R]EO73K`B0M@EDI.png
6 _6 n. c: |/ ^2 E& Y! n
3 x  }! c( z% Y) M9 \四.软件设计. d5 }7 A" q- M2 M, K1 Y6 h. Y
(1)程序流程图" S9 J6 p2 H4 M% W

  b% z: r- T" Y/ @! C5 I 8YZLP`IOZTWZTGTC14Y_E.png
1 v3 r  \+ G- W& {8 N7 v: t1 h, \0 B8 n& [0 R$ `  T
(2)主程序源码
! I5 e: F7 ~1 Z! L- r+ b5 I0 I( g! s4 b; a7 h- l
  1. int main(void)
    1 [: e; i' a( k: u5 o. R8 j
  2. {        : {" v, m5 v$ J) T: k
  3.         u8 test_interval = 0;
    % w# L$ D2 P+ |0 Y4 p/ ?

  4. ' ?1 S0 L- w6 N+ r% h
  5.         delay_init();            //延时函数初始化          ; t+ u) k- ]. m) z3 @
  6.         KEY_GPIO_Init();    //按键初始化/ U5 I2 P' U! O
  7.         HX711_GPIO_Init();
      P) Q( N) }1 [7 R' P6 @# `$ ~
  8.         delay_ms(500);       //上电瞬间加入一定延时在初始化5 \, O. f/ ?- B4 Q: j- \! o# B
  9.         LCD_Init();         //屏幕初始化
    # |5 R; P4 C1 {, L! E5 s' I
  10.         delay_ms(300); 3 p3 e) ]6 x. Q3 k+ R* \
  11.         LCD1602_write_com(0x80);                                                //指针设置
      z0 I" t( V, ~1 J
  12.         LCD1602_write_word("Welcome to use! ");& \. F) Y* _) F2 G- l
  13.         To_Zero();
    : Q) [8 S) T( {- L; }# |4 |4 Q/ Z
  14.         LCD1602_write_com(0x80);                                                //指针设置7 E0 M* u* |+ I6 H  Y( I
  15.         LCD1602_write_word("WE: .    PR:  . ");
    2 s. [8 X. P  s: F8 C. g
  16.         LCD1602_write_com(0x80+0x40);                                //指针设置
    ; S, P5 A( h/ R! e! M3 h! L9 O( k# ^
  17.         LCD1602_write_word("MON:   .        ");3 a! F9 y% e$ D& T3 b3 S
  18.         Display_Price();
    $ J; B) W, m/ p1 j$ H1 F
  19. 3 `# \2 A0 R2 d, O2 F2 R  q
  20.         while(1)# W: M# T& @0 q- d: x4 O
  21.         {     
    7 O6 t4 `8 f; I" y
  22.        //每0.5秒称重一次! ]& w/ e6 K0 d  D1 J* l8 h5 D5 z7 F
  23.         if (test_interval ++ > 25)
    , H' G7 s0 q% e# z8 K/ N
  24.         {
    1 s2 u: l: y$ S2 P( f: |6 [
  25.             test_interval = 0;
      e# M* z9 Q8 R* D) B6 u
  26.             //称重,得到重量值weight,单位为g, p( f4 E: J, D* `( L9 Y, r) b
  27.             get_weight();
    ' |' u3 h4 M5 Q8 \3 k
  28. 7 L. {9 z" X5 D  ]: p
  29.             //如果超量程,显示‘-.---’$ P8 q2 D* I9 ~
  30.             if (weight >= 10000)
    4 h- Y( {! L* M  o/ J; h% s
  31.             {3 A/ J' s/ V: a( \; R- c* H" a9 w
  32.                 pre_weight = 10000;
    7 Y. U8 x+ m! D& c$ h6 k+ `
  33.                 LCD1602_write_com(0x83);
    8 [1 G* t3 a) Q, ^/ i+ O- R. }
  34.                 LCD1602_write_word("-.---");% E& M) I$ [9 L: u: ~0 n& C& e
  35.             }+ Q* I! r( j1 M0 L; @; o
  36.             //如果不超量程9 c6 \$ y* y8 J, W1 r1 C
  37.             else' w6 s* s5 F- z- |. `
  38.             {
    , j! E6 v2 d3 f
  39.                 //显示重量值1 H9 w0 _; ~. h+ J- B7 h) E
  40.                 if (pre_weight != weight)
    1 m9 K1 r  E4 K# A
  41.                 {
    + V4 W* o0 M$ {4 q7 Q; Y
  42.                     pre_weight = weight;
    . w2 w- k/ d; B2 `
  43.                     Display_Weight();4 r' t  j  ?5 a$ B2 r/ m, e
  44.                 }
    ( q5 N$ g* f4 e2 f4 k+ V
  45.                 //如果单价设定好了,则计算价格
    * M, r# M. f$ j' J2 [
  46.                 if (FlagSetPrice == 1)9 @0 z0 b" n3 T* g+ j0 i/ @0 Y$ Y
  47.                 {
    ; {4 l' @+ H1 M* ~) J  M
  48.                     money = weight*price/1000;  //money单位为分& v; O0 p1 z8 F+ ^8 h& i" A: X
  49.                     //显示总金额( H$ v; t" G9 i; Y/ Y
  50.                     if (pre_money != money)
    1 e4 b0 M8 J3 Y* @6 U2 E
  51.                     {0 j" u: U5 U5 @6 w2 l
  52.                         pre_money = money;( ]& j0 h2 C% R
  53.                         Display_Money();# c5 ^% {' v9 I, T2 N
  54.                     }3 p) Z: s( k3 @( a3 m" P3 `
  55.                 }
    * _0 H; L4 ]& @8 I6 w; }) ^* s
  56.                 else4 a4 q3 C1 L  d6 X( @
  57.                 {
    : A; E- J& e9 s+ S) W. q/ U
  58.                     LCD1602_write_com(0x80+0x40+4);5 f& v% [5 l" ^: F* w
  59.                     LCD1602_write_word("   . ");0 s* f/ P1 S  |# ]; f
  60.                 }
    ( o/ `: O: C/ ?4 L  `" R! T- e
  61.             }
    6 v% A; U9 r+ T9 v# O$ ~$ S4 I
  62.         }- g5 ~/ h7 J/ G* U
  63.         //获取按键
    ( R, P$ N* L# ~" f- y
  64.         keycode = KEYSCAN();
    2 d/ d' Q2 D5 S. Y$ ?# E
  65.         //有效键值0-15! p* Z8 ^9 v* {% [  A* v
  66.         if ((keycode<16)&&(FlagKeyPress==0))# F# c9 W5 s6 Z8 }
  67.         {
    5 m5 D3 E; J; D
  68.             FlagKeyPress = 1;/ W$ l: C, v  k2 o3 {" k* P5 t
  69.             KeyPress(keycode);
    . s: L% d1 N9 i+ o
  70.             FlagKeyPress = 0;, i# B9 N3 Y  s, q. L' L7 w
  71.                  delay(100);
    9 d& m" g9 P+ D# \
  72.         }$ X: P, q# i* M* |# E
  73.         delay(1);( [* ^, s2 F2 K0 G7 }( b  ?+ N0 b
  74.     }
    " `7 t3 i3 |7 X1 ]4 w# X. Q9 h
  75.                
    $ s" @$ }7 M/ M3 w
  76.         }$ Y1 d9 @' o) |7 z
复制代码
' @; O* l7 C5 D- B4 Q7 r* W

* t/ ~0 m  M( n# u+ t; s5 e5 s' A+ _3 \
收藏 评论0 发布时间:2022-5-12 11:29

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版