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

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

[复制链接]
STMCU小助手 发布时间:2022-5-12 11:29
一.硬件方案' J1 t: f+ Y' L$ V+ c
本设计是一款基于STM32单片机的电子秤系统,随着科学技术的不断发展,传统的机械秤逐渐被电子秤所取代,相比于计量不精确,费时费力的机械秤,电子秤采用在方便快捷的同时,又保证了结果的准确性。本次设计采用STM32单片机作为处理器,控制各个传感器和外设,采用LCD1602液晶屏作为显示器,显示检测到的重量,压力传感器用于称重,通过检测物体对传感器造成的压力,通过公式计算得出物体的重量,此外通过16个按键组成矩阵键盘,可以输入数字,并进行加减乘除操作,通过重量和单价计算出总价。7 Z4 `8 I! a5 ]# e5 F$ ^% Z% ^. y
主要由STM32单片机+最小系统+LCD1602液晶显示模块+HX711模块+LED模块+蜂鸣器模块+矩阵按键模块+10kg压力传感器;如图:
% J+ {8 D3 H& F2 |+ W+ |; `$ Q! Q, L/ J8 ]
%}U3H``IVU84WV4RPMD(}$M.png
! q4 \# U% K* X2 L
& {2 N2 x+ _4 ?0 e& _% n4 u二.设计功能
- T5 G% y9 e4 g(1)液晶显示当前重量大小。
2 u! I4 B- a7 I" D+ `1 I(2)按键可以设置当前物品单价。
6 r! O. W+ H- D, _* W(3)具有去皮清零功能。  g- a* h; E: k: W2 [3 d
(4)按键确认按键液晶显示当前重量,单价,总价。
% {% h2 ^- W/ q# l
9 y5 L$ ~: j0 X. m6 O' D; {8 v三.设计原理图% N1 o: G7 W4 V) [( t
(1)原理图主要采用AD软件进行设计,如图:
. {0 J+ V6 G, d( s0 ^8 j4 h
! z% C- k7 g; T3 b' Q- f, [) |0 w Z3)VOKLGHANU_YT)F{VGx.png + {3 I# \/ _& b

3 V; X: G  }! H/ x# i(2)PCB图如下:! R' B" b, n  C5 y5 B

4 b7 L8 R$ B: E Z3W2$H4`R]EO73K`B0M@EDI.png
7 V6 T6 C$ d) K8 `$ j9 I. T- W* F6 Z; ~" p9 `
四.软件设计
8 E! D1 M7 _- x1 a(1)程序流程图' W3 w/ S$ b- R3 s, i- Q

6 t6 _: p: J2 Z" x 8YZLP`IOZTWZTGTC14Y_E.png ( J$ B  [2 J# v

* R% F3 Q9 y; G(2)主程序源码
7 A& _/ a; a: o' Y8 D+ g9 z; Y
- g, K4 d+ r) M' ^$ W" H
  1. int main(void)
    3 V* D) L0 c, W, c0 R/ Y4 o
  2. {        # G0 J  x# O3 `8 K% i) n& E
  3.         u8 test_interval = 0;
    8 X2 k* B% O8 O& {  B
  4. . y5 X% g& x, a: Z9 h! m
  5.         delay_init();            //延时函数初始化         
    ; `8 X$ t& }/ Z! }" G8 [/ T; n
  6.         KEY_GPIO_Init();    //按键初始化7 y" `: l2 m7 |( ]
  7.         HX711_GPIO_Init();" ]/ a" ?6 A" P& I$ @) t6 F
  8.         delay_ms(500);       //上电瞬间加入一定延时在初始化
    ; o; m6 v+ ]( y  r1 ]3 g2 J
  9.         LCD_Init();         //屏幕初始化2 I6 ~8 u( R  C5 I4 m4 D1 e
  10.         delay_ms(300);
    , S: I' @2 Y1 u2 Z, V  K3 M) e
  11.         LCD1602_write_com(0x80);                                                //指针设置# Z7 x3 T0 v& E! \% h2 C7 D7 Q. j
  12.         LCD1602_write_word("Welcome to use! ");
    ( {" x5 ?4 C. w7 X' o
  13.         To_Zero();
    % C# Q" \: \. f: e
  14.         LCD1602_write_com(0x80);                                                //指针设置' u! g0 k, P$ Q6 u1 J
  15.         LCD1602_write_word("WE: .    PR:  . ");; i# M5 b* j3 I7 N% R/ `
  16.         LCD1602_write_com(0x80+0x40);                                //指针设置
    6 K) e6 ~2 S; Y7 d
  17.         LCD1602_write_word("MON:   .        ");
    2 o6 O- t/ N+ q: t7 y0 P
  18.         Display_Price();& n' c/ w! j6 Y. h) h
  19. 8 O: v: l, i, _8 c
  20.         while(1)% ~4 V8 V8 K7 p$ U7 C) g4 |
  21.         {     
    2 u. J/ k6 x* G9 c& g9 D
  22.        //每0.5秒称重一次
    : d+ @( W/ F! C0 r  z1 ]" d
  23.         if (test_interval ++ > 25)3 \- a% J& K$ |3 e6 P3 v$ D
  24.         {) S5 L3 t1 C9 E7 u
  25.             test_interval = 0;
    2 J' j8 m$ }4 S. |) p
  26.             //称重,得到重量值weight,单位为g+ P8 S6 L! p* C3 h
  27.             get_weight();
    3 b; N) ?1 `' F8 p

  28. 8 m6 Z( T' i/ V9 v2 m1 Q
  29.             //如果超量程,显示‘-.---’; U" s7 v1 N$ g, O. `
  30.             if (weight >= 10000); o/ n: _, O. Z& Q1 k$ Z  K" v
  31.             {7 f6 W* ?; p5 U* y4 C4 o
  32.                 pre_weight = 10000;3 a4 l' E8 c4 I
  33.                 LCD1602_write_com(0x83);6 \9 x2 |. O; x. {
  34.                 LCD1602_write_word("-.---");1 w6 T  f' u/ f) D- M3 j
  35.             }
    ' g* q4 l! ]1 R- }- F
  36.             //如果不超量程
    2 _1 a7 X# T; T9 A8 S6 F
  37.             else
    ! U3 P. v$ z4 G0 A
  38.             {! L& Q# i* a- m( M" c
  39.                 //显示重量值
    6 V( T. J  E' v' W- d' j! s, ?
  40.                 if (pre_weight != weight)
    % @* Z8 n- F$ n# |
  41.                 {
    7 }, V) }  m+ @5 v) j4 {0 z. ]3 w
  42.                     pre_weight = weight;: f) L- \' u2 E
  43.                     Display_Weight();1 D! w+ ]0 R: _) \" v9 V. n
  44.                 }: g+ G% J0 b" V4 H; M! X8 Q
  45.                 //如果单价设定好了,则计算价格2 a- M, h7 B- k7 P1 N9 Q
  46.                 if (FlagSetPrice == 1)7 Y7 N3 T; t' Q; L6 P+ U
  47.                 {
    . Y& @- W& O- E- T  v) L7 b# k/ u! U! a
  48.                     money = weight*price/1000;  //money单位为分7 w9 r  U# X0 H. Y7 u6 k
  49.                     //显示总金额7 ?* _1 h+ I4 |- H4 W0 X* Y' M! {
  50.                     if (pre_money != money)
    $ g' H! U  d8 U/ q( W
  51.                     {
    / I7 z4 \7 t& @! W' i$ @' u5 ~, ]+ F
  52.                         pre_money = money;5 N, Z$ s9 W0 N% H# q- {5 {
  53.                         Display_Money();
    + z; h" I9 K$ v! ]4 j* }6 M' P
  54.                     }
    ; D+ M7 m3 M. y3 y0 w* j
  55.                 }
    : j7 l! q1 Q; i% n! G0 N& `; K
  56.                 else
    4 A7 n  l4 k& u- ]' I
  57.                 {3 Q* X' A' T% A- i2 }
  58.                     LCD1602_write_com(0x80+0x40+4);
      O# d1 Q  d, L0 z# x
  59.                     LCD1602_write_word("   . ");
    5 B* T% v; R- h! H
  60.                 }
    # y% w  d% `, z9 m6 m: y
  61.             }* c4 B. R+ L8 h3 m+ G  ?0 Q
  62.         }
    , [1 A' y5 D  l# \9 \# S
  63.         //获取按键. e! L; H  A, |' X5 C, w7 F9 N% ~
  64.         keycode = KEYSCAN();) O' C" ~; o+ v! r
  65.         //有效键值0-15
    ' J# f* y: x7 C5 A$ a1 D8 W
  66.         if ((keycode<16)&&(FlagKeyPress==0))) w# K/ |- u/ o; ~5 \6 n
  67.         {
    . _7 a0 c; ]( z; L
  68.             FlagKeyPress = 1;5 j2 ?/ F* L- `: O# g
  69.             KeyPress(keycode);  @1 H  L0 r( K1 g
  70.             FlagKeyPress = 0;
    9 Z2 j2 A/ s  y. J
  71.                  delay(100);
    7 ?# D. |- j. v  G  g
  72.         }
    , I- U* F  n& j
  73.         delay(1);3 P. x& r; C) z* \! w
  74.     }1 {! W  N$ B; {
  75.                
    6 A( o( m% e0 a  J5 L  _4 d5 ?/ _
  76.         }: O; i% m8 P, ?3 o# w. s1 ^, v
复制代码

  P; t, b0 }& n% t% v) W7 E
4 o9 S0 V  {. Y+ m; D# a
1 A  @& T0 V, Z
赞 收藏 评论0 发布时间:2022-5-12 11:29

举报

0个回答

所属标签

相似技术帖

官网相关资源

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