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

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

[复制链接]
STMCU小助手 发布时间:2022-5-12 11:29
一.硬件方案8 ~; q$ P0 ?8 Q* P
本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性。本次设计采用STM32单片机作为处理器,控制各个传感器和外设,采用LCD1602液晶屏作为显示器,显示检测到的重量,压力传感器用于称重,通过检测物体对传感器造成的压力,通过公式计算得出物体的重量,此外通过16个按键组成矩阵键盘,可以输入数字,并进行加减乘除操作,通过重量和单价计算出总价。
5 C2 _. N' R. C; r5 ]& C主要由STM32单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图:
1 W0 S; e! F7 b4 V' h0 G' ?
2 I  Q* A, c3 ~9 N( V( ` %}U3H``IVU84WV4RPMD(}$M.png ' o& w( l$ g8 n6 C. G
* y6 K# `. a0 c9 I& _
二.设计功能
8 U' {4 D) X: e5 x0 Q9 N4 ^5 Q* r' v(1)液晶显示当前重量大小。; T- P( a; @7 a8 t. R
(2)按键可以设置当前物品单价。, B/ F$ G) d' x$ x! J4 X* i
(3)具有去皮清零功能。* w: N) {. ]& q3 w
(4)按键确认按键液晶显示当前重量,单价,总价。. O6 ^7 I) d' A( C

, K2 b& M4 K5 q) E( q三.设计原理图
3 }3 }/ k4 }7 J4 W(1)原理图主要采用AD软件进行设计,如图:; w8 ~+ ^) d% @5 c; i
: A# P6 c; H, M% N, ]/ m
Z3)VOKLGHANU_YT)F{VGx.png + X( z+ h* K. G! d

7 W( Z: _' d. e; v6 K; a: z2 G(2)PCB图如下:
/ N; r* b$ j4 ^7 f% c* X7 F8 g& r( u
Z3W2$H4`R]EO73K`B0M@EDI.png
. L) ~7 e* k- |- a- e  x- `, N1 v- ~  M
四.软件设计
% z+ g8 l4 p3 b5 |(1)程序流程图4 o: c/ m6 v* @+ R+ u2 G' o# }

( S- o7 E0 n5 Q3 G) B" G2 C 8YZLP`IOZTWZTGTC14Y_E.png
& T2 n. V% ^2 k, P2 z7 s) p6 @8 S$ o  H
(2)主程序源码1 h7 ^- v+ ~( q
3 D, d7 I/ s" b- ^: m
  1. int main(void)
    # g4 W1 @) O3 {
  2. {        
    7 o0 `; a( j% ^% B0 e
  3.         u8 test_interval = 0;
    ; V0 S7 R  |  p! v% v' A1 a

  4. ; V+ B% F- N0 D% ]7 x
  5.         delay_init();            //延时函数初始化          , ]6 G) E: _; E8 h3 c1 B: w! E
  6.         KEY_GPIO_Init();    //按键初始化
    " B* S+ K' `0 h( C4 R
  7.         HX711_GPIO_Init();1 c$ v4 \0 i1 k' k! z5 j
  8.         delay_ms(500);       //上电瞬间加入一定延时在初始化5 H' h2 J0 T: l, N
  9.         LCD_Init();         //屏幕初始化+ A& r0 }3 k7 Q( ^# T( |
  10.         delay_ms(300);
    5 ^- Z9 g, U9 p2 J" x$ ^8 n( d
  11.         LCD1602_write_com(0x80);                                                //指针设置: m# i0 k+ X) i
  12.         LCD1602_write_word("Welcome to use! ");0 Z; U7 E4 `) v: z; w1 A
  13.         To_Zero();
      }5 |& V( C4 u- h; [2 _
  14.         LCD1602_write_com(0x80);                                                //指针设置
    * m' n  m& m) \  c4 E
  15.         LCD1602_write_word("WE: .    PR:  . ");8 q' R9 j6 c! N3 ^
  16.         LCD1602_write_com(0x80+0x40);                                //指针设置
    $ `" ]* ~4 n  Y; G
  17.         LCD1602_write_word("MON:   .        ");) f+ r( p1 a0 d. ^: J6 y) v7 [  Q6 O, T
  18.         Display_Price();- M* \( ?. d) ~9 _$ _
  19. 2 l  ~" U( f8 j, d! \
  20.         while(1)1 O! d; M+ B8 j1 Q/ Z' |1 g
  21.         {     
    " H8 @- |" N2 o+ i$ L
  22.        //每0.5秒称重一次
    5 @0 H+ n, P  O; S8 U  c' P, m: I
  23.         if (test_interval ++ > 25)
    9 i; y* L2 O6 m+ t
  24.         {
    0 f% g& p& n# U& d) r
  25.             test_interval = 0;9 U* {; q7 R  C
  26.             //称重,得到重量值weight,单位为g
    5 a5 {; [  c" r6 u! W
  27.             get_weight();% g, @, y' J4 k- n8 I" X9 b

  28. 7 O0 X# p: s; V% E
  29.             //如果超量程,显示‘-.---’( v! F5 [5 r* S4 S( S  z( _
  30.             if (weight >= 10000)) P, ~, E* }2 a# R- l2 A% o9 f0 N
  31.             {
    : m: L2 v% k' e. J
  32.                 pre_weight = 10000;
    % y$ z2 H& N, |+ z" L) v
  33.                 LCD1602_write_com(0x83);
    ( j2 J4 }+ ~3 Z  {' v1 \
  34.                 LCD1602_write_word("-.---");& y! Q5 y' a& x- M" }3 N
  35.             }& U: f# W+ r; w6 X  b7 z
  36.             //如果不超量程, f# o' C9 p) J2 Q# n' O- @
  37.             else
    / h  H( S2 e6 g2 m: }! \3 v$ @
  38.             {2 s& k- }8 V) Y  A
  39.                 //显示重量值3 n8 P# f8 v/ V7 O, b
  40.                 if (pre_weight != weight). \3 z; ]/ _/ \: k# d- F
  41.                 {
    ) Q' ], [# I/ T4 v$ o4 x
  42.                     pre_weight = weight;
    / `; z1 P1 i* ~3 i. Q
  43.                     Display_Weight();
    3 E" F; Y6 |) V
  44.                 }
      H, F! ~! B% S0 ?* n" Q* s  x
  45.                 //如果单价设定好了,则计算价格$ t5 |; l* `3 P, C( o  Y
  46.                 if (FlagSetPrice == 1)# D; o( ~% t9 q& ~* O0 _4 M5 r
  47.                 {
    + X; p, P$ J, ~( h6 @
  48.                     money = weight*price/1000;  //money单位为分
    ! x) C7 V5 h# \- ?% D
  49.                     //显示总金额: s* a/ U% |7 A8 O4 f6 g5 V0 I
  50.                     if (pre_money != money)3 _  E) z2 ]3 y+ S: `( j7 t
  51.                     {3 {7 _0 L8 h! I& C( w7 G
  52.                         pre_money = money;
    , P" y0 ^% {. v0 i. E* u# T
  53.                         Display_Money();
    6 l" _& R" G- w9 V7 Q6 y
  54.                     }
    ! u3 o6 J# H8 W4 h
  55.                 }
    # @1 ]  o- O, u2 J5 e4 }$ ^
  56.                 else9 f1 W7 H& M" T
  57.                 {* F+ S9 A" I4 w& o4 j) o
  58.                     LCD1602_write_com(0x80+0x40+4);3 ?! U: e4 D; p( z" s
  59.                     LCD1602_write_word("   . ");
    . l0 b; Y9 N# T  X1 _
  60.                 }2 y/ V7 G+ I4 v( w
  61.             }
      ^" U$ s2 W0 G' K3 \) w2 }( N5 q- u* u
  62.         }: |* j* L; F) |* t' ^3 ?  T& ^
  63.         //获取按键
    & c1 b! v8 u' Q- B/ u; }
  64.         keycode = KEYSCAN();
    ! a  s1 t1 S* g+ ~( [+ H
  65.         //有效键值0-159 \  c+ @! t; x- `5 S
  66.         if ((keycode<16)&&(FlagKeyPress==0))
    - U. m& N4 f, A7 u9 y8 L+ [
  67.         {  E; [) a$ h$ H$ ]6 W7 Y
  68.             FlagKeyPress = 1;
    * u) v% R# t1 ~: V# I! A
  69.             KeyPress(keycode);
    + K/ H) e& z5 \9 P2 Q
  70.             FlagKeyPress = 0;
    ' c: T3 ?" Z0 x1 W6 v
  71.                  delay(100);9 @4 q+ ?# |0 U- D( P
  72.         }0 X* w$ _4 M: r* p! t
  73.         delay(1);
    6 Y; Z2 V+ s  }: P( \
  74.     }
      W2 A+ w- C$ n
  75.                 % H, }! U1 c2 r4 G; _
  76.         }$ z' `* w* ~- G- [: x& L6 }& |4 k  A
复制代码

1 m1 x5 f5 n" l( n& m6 y* C: X2 ?/ I$ S/ G! J

- r! U0 F1 N8 f1 r; p4 G6 Z
赞 收藏 评论0 发布时间:2022-5-12 11:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版