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

【基于STM32】Stduino拓展学习(一)四位数码管

[复制链接]
stduino 发布时间:2020-8-24 10:19
键词:
51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管

6 _* r. }( B+ j5 S# Y
从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。
学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。
说明:
数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。
A01-四位数码管展示图.png
在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图:
A01-四位数码管单位说明.png
一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 9 个字符(如下图)。
A01-四位数码管单位说明01.png
共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。
A01-七段共共阴共阳说明图.png
有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。
四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 IO 口,显然这会占用过多的端口。
A01-四位数码管引脚说明.png
实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。
这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
A01四位数码管电路图.png
0 T0 g0 r* T# A+ `# T
实验目的:
点亮数码管,并实时显示程序运行的时间(秒)。
1 }: W  `" K0 q3 R( M& y  G9 E
器材:
Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
! q0 e; \  `8 l' q1 X
电路连接:
A01连线图带水印.png

( ^9 Q( Y* q/ g0 h
代码展示:
  1. int second = 0;9 \( S/ a) ~) [* Z% i  Q* C
  2. void setup()
    0 w7 v, P8 F4 B9 k
  3. {/ w; n8 i8 ?/ t) {# B3 k6 j
  4.   // put your setup code here, to run once:
    , x0 f2 ?1 C# o, R" e! p" i
  5.     pinMode(1,OUTPUT);//A+ `5 T" H8 f# }$ e: E
  6.     pinMode(2,OUTPUT);//B1 A: {2 _$ W/ {% q
  7.     pinMode(3,OUTPUT);//C
    : D$ m6 ~" |) h2 h5 A3 I$ X& y. J
  8.     pinMode(4,OUTPUT);//D; B" R9 [! }, Z0 V2 b
  9.     pinMode(5,OUTPUT);//E
    6 f0 E# g& v$ }1 `: M, l6 O
  10.     pinMode(6,OUTPUT);//F
    3 i6 n4 B& u9 C) P2 V
  11.     pinMode(7,OUTPUT);//G) T2 W& B8 g; m& S: U
  12.     pinMode(8,OUTPUT);//DP! G$ G' d8 F( Q; p9 W
  13.     1 a" s1 T; o4 ?/ ?
  14.     pinMode(19,OUTPUT);//19 f0 l5 o4 N' E
  15.     pinMode(18,OUTPUT);//2
    5 T" f3 H% ]* U3 q6 m1 c: ~$ @
  16.     pinMode(17,OUTPUT);//3/ Y! ]' M, t$ d/ }
  17.     pinMode(16,OUTPUT);//46 B, S1 l- h4 d% P
  18.    
    $ {+ _9 b% ~! C$ e: Y
  19.     " B( q7 p9 w: n+ m
  20.     digitalWrite(19,LOW);, T* q, U+ y, }( c! K! S
  21.     digitalWrite(18,LOW);/ q4 @8 ^) l. K
  22.     digitalWrite(17,LOW);
    / d; L* k: W8 ~" y0 P( T
  23.     digitalWrite(16,LOW);. b; I6 S; u' V" g: d  B- I
  24. 7 a. ?& o5 o! Q3 T9 X% f8 t
  25. }6 @) `/ M$ e, Y% |

  26. - ]/ ]" ^9 A2 N3 ~9 E+ h  x
  27. / F/ n+ x0 I, o9 T5 A9 L  b" o
  28. //void SevSegInit()
    " A. `/ D! }- s& H
  29. void showNum(int num, bool point=false)$ `* E+ K% Y! Y! _" @9 s
  30.     {   if(point). r; x5 j% B9 _8 i! f: R/ w
  31.         {1 o" N' v$ U' m4 Y' s) ]' _
  32.             digitalWrite(8,HIGH);//DP,TRUE
    , _2 B( Z5 l/ Q8 O6 q' \  u" N/ q
  33.         }else{
    1 I* B, g* C2 z& A: `. t: e* P
  34.             digitalWrite(8,LOW);//DP,FALSE. J; d! [+ ?; n$ _9 d& l$ t
  35.             }
    # u" P, m& R, e
  36.         switch(num)3 X# a- b5 f* J- w
  37.         {
    ( X: S% p& V$ M. g
  38.             case 0:
    ( x$ Z: u0 v6 L, I4 q8 _( a! j
  39.                 digitalWrite(1,HIGH);7 _# A* t. q' z* s3 _  U4 F
  40.                 digitalWrite(2,HIGH);
    8 d0 B0 Y3 |  P. {' Z6 V
  41.                 digitalWrite(3,HIGH);
    % Q$ [  L7 {) W$ j
  42.                 digitalWrite(4,HIGH);
    # C$ a7 w: A, p3 j+ k6 t" y
  43.                 digitalWrite(5,HIGH);2 Q6 o! M# R- C" C4 |0 W! j* t. i7 p/ ~
  44.                 digitalWrite(6,HIGH);- n. \# |- A( f1 N- l! I
  45.                 digitalWrite(7,LOW);
      D; y! M5 X. F: M$ t# l: c3 p
  46.                 break;
    4 W3 O/ e6 o3 }$ A4 e& B' j& w
  47.                
    # O0 I  R. l* }. O; o- G( J
  48.             case 1:7 q1 a0 E. ~8 Y% V( F2 e; U, g
  49.                 digitalWrite(1,LOW);  \+ B- D& ^3 w: b! @8 |
  50.                 digitalWrite(2,HIGH);
    % ^2 y$ A/ Q; b$ c( ^: a2 J) N9 g0 M$ B
  51.                 digitalWrite(3,HIGH);
    0 K# A0 Q# p! U' u: p
  52.                 digitalWrite(4,LOW);
    1 b! F4 g9 K- N3 c
  53.                 digitalWrite(5,LOW);* P( B( }1 K) s( h; E. G
  54.                 digitalWrite(6,LOW);- ^* E. f) j9 {. Q! K! i' g1 E
  55.                 digitalWrite(7,LOW);
      Y/ M/ k! P. R$ C" O- y- p6 f
  56.                 break;/ h# I5 ^- R: e( S
  57.                 % n) A$ [- X  k6 O( s; {
  58.             case 2:( t5 k9 f# a1 Y) p& B
  59.                   //20 v  u; s' L& [" {
  60.                 digitalWrite(1,HIGH);//A
    ' v3 s$ O8 p1 O) u  X3 A" V
  61.                 digitalWrite(2,HIGH);//B3 `" A( z0 c+ x; l  b7 x# {/ H3 w
  62.                 digitalWrite(3,LOW);//C
    3 V. j! Q, A( S- ~, C
  63.                 digitalWrite(4,HIGH);//D
    & Z' L7 [2 G' ~" C: T$ H! d
  64.                 digitalWrite(5,HIGH);//E
    ( W% t7 |2 l, C; a" n6 J" }
  65.                 digitalWrite(6,LOW);//F8 W! ]2 B7 b  d2 ^7 P; n2 a- S
  66.                 digitalWrite(7,HIGH);//G. Q9 C1 x6 J0 J# G' E) @
  67.                 break;. P1 D& t+ Q% l0 c$ M
  68.                   b; `5 O. q$ |! w; [2 i/ L: f
  69.             case 3:
    9 ?" N  l5 Q# K, ^3 j: `6 L( c
  70.                   //3
    # g, r( V& F- Q" M
  71.                 digitalWrite(1,HIGH);//A  V; [& _- o8 i! t
  72.                 digitalWrite(2,HIGH);//B
    1 R4 M$ P) y/ R
  73.                 digitalWrite(3,HIGH);//C) L8 g2 k. r# L1 d! k
  74.                 digitalWrite(4,HIGH);//D2 I. n4 x$ z% }, ^
  75.                 digitalWrite(5,LOW);//E1 H7 g! o% Q* S$ B5 t7 N
  76.                 digitalWrite(6,LOW);//F
    ) a2 ?9 v) n' `4 n6 p! m( b: V
  77.                 digitalWrite(7,HIGH);//G4 F$ R) a6 h4 ?* w

  78. ; U% M: I6 V2 X, M6 _2 U6 g
  79.         0 t" h7 k) X8 y" c3 \$ t0 U
  80.                 break;
    ; F5 e0 G5 Y4 W+ [4 o( P/ Q' R6 q
  81.                 * _7 L; E8 s& P/ U  c7 e: [, _
  82.             case 4:& b9 V% w* r9 b1 n5 c
  83.                 digitalWrite(1,LOW);//A
    0 R) h% A4 N; ]
  84.                 digitalWrite(2,HIGH);//B
    0 v% n7 C7 }1 [, J3 ^
  85.                 digitalWrite(3,HIGH);//C# X  N* p$ }% Z' ]3 ?2 d
  86.                 digitalWrite(4,LOW);//D2 s; J8 ~1 ^+ q, s/ t& Y$ T# T; k
  87.                 digitalWrite(5,LOW);//E. G; U& _0 b5 ]" ~7 k
  88.                 digitalWrite(6,HIGH);//F! ?0 Z: `: D+ c0 c( h1 ?
  89.                 digitalWrite(7,HIGH);//G1 m! P8 g; S! u7 F4 E. m  u
  90.                 break;; r5 x3 p( Y- V& H
  91.                
    + |! ]8 m5 L# N0 q
  92.             case 5:
    # h0 |, o  x& O
  93.                 digitalWrite(1,HIGH);//A
    1 [) {# ?  D2 [5 E2 ?
  94.                 digitalWrite(2,LOW);//B: @5 b1 Q1 b& R# A' u/ x2 U! O
  95.                 digitalWrite(3,HIGH);//C6 B+ ^# I$ B3 j! a
  96.                 digitalWrite(4,HIGH);//D, c5 v' @! N% [! x
  97.                 digitalWrite(5,LOW);//E
    ; J* O$ \( I  Z7 J; E
  98.                 digitalWrite(6,HIGH);//F
    & t: g! B  S, c- K0 d5 F
  99.                 digitalWrite(7,HIGH);//G
    % ]/ n2 J( |, ^: J
  100.                 break;$ e- D* O% S' \6 n
  101.             case 6:
    - S" i" j% l( S9 W+ ^8 H
  102.                 digitalWrite(1,HIGH);//A: Q/ N7 ~& w# k  k& R/ N4 E
  103.                 digitalWrite(2,LOW);//B
    ) t6 z8 N/ D/ y$ b. H+ k2 n
  104.                 digitalWrite(3,HIGH);//C
    7 n( r4 G1 a+ g. [: ^! N! g
  105.                 digitalWrite(4,HIGH);//D
    3 q% w( J- [. G! g
  106.                 digitalWrite(5,HIGH);//E9 A1 S. o4 S: r! M) l  e# e
  107.                 digitalWrite(6,HIGH);//F. ], N4 r# ^6 K9 J
  108.                 digitalWrite(7,HIGH);//G
    2 w9 e+ T( U# t
  109.                 break;! K' U$ D# p+ w
  110.             case 7:8 V3 e# Z' Y% M! m
  111.                 digitalWrite(1,HIGH);//A
    , ~! _/ a* f9 d0 h
  112.                 digitalWrite(2,HIGH);//B
    7 x7 S( V2 v( U1 m& [, }
  113.                 digitalWrite(3,HIGH);//C, k6 ]4 m* v3 {/ q
  114.                 digitalWrite(4,LOW);//D
    ! {4 Q2 t+ F! q  P2 {
  115.                 digitalWrite(5,LOW);//E
    2 P, d/ a$ p5 o1 C6 Z
  116.                 digitalWrite(6,LOW);//F
    ; y2 Q! d& I! w8 e9 [$ d
  117.                 digitalWrite(7,LOW);//G8 F# k3 f- Q  I  K$ \
  118.                 break;/ i; Y$ P1 V: q" n
  119.             case 8:8 U) k6 [/ {% I$ J9 ^# O
  120.                 digitalWrite(1,HIGH);//A" r( r4 F- A% t1 R0 e
  121.                 digitalWrite(2,HIGH);//B
    9 ]* e5 k( f6 P2 j( I
  122.                 digitalWrite(3,HIGH);//C! f6 `$ c- H# @9 L: h3 Q, ^5 d
  123.                 digitalWrite(4,HIGH);//D
    ) N3 M* o" G1 ]6 q
  124.                 digitalWrite(5,HIGH);//E
    2 M. N# s; y1 A) Y9 Q% P" M
  125.                 digitalWrite(6,HIGH);//F* F& J7 g8 s1 H3 A4 {& Q
  126.                 digitalWrite(7,HIGH);//G
    ) ~  J8 @* T$ R8 k: E2 c
  127.                 break;
    ; x. i6 J) [) k
  128.             case 9:1 \( Y2 v$ X( F6 N
  129.                 digitalWrite(1,HIGH);//A
    % Y9 Y" L/ u* |9 _, [4 P2 \
  130.                 digitalWrite(2,HIGH);//B
    / u: ~( k3 ]2 Y2 F# J
  131.                 digitalWrite(3,HIGH);//C
    / G0 d4 X& N- k+ Y, Y# Y
  132.                 digitalWrite(4,HIGH);//D% K" A5 @1 b1 T2 }
  133.                 digitalWrite(5,LOW);//E
    ( e- z% _) ~7 }- ]
  134.                 digitalWrite(6,HIGH);//F. g' N& ^4 k" A& F
  135.                 digitalWrite(7,HIGH);//G
    # i6 K5 B% r7 L  X. L6 f
  136.                 break;$ F, u9 E# K& {1 d+ y& x
  137.         }; q! b. l- ]! C$ M7 X- ~7 N4 j
  138.     }
    . t: ^; }4 y8 \2 @& w3 F0 n# V7 }

  139. * R: f" h7 ?  O; r1 J* E
  140. void setNum(int num)
    ; K3 X1 @5 i$ C! r8 y2 ]- i- b. z/ o
  141.     {' K! Z1 Q4 v1 s$ h& L& `: B/ P
  142.         ; g# {( u, H, z$ N6 J" F
  143.         int d0=num%10;
    ' L$ n9 h& w; ]' C
  144.         int d1=(num%100)/10;
    , z3 ]9 p# P1 u4 b% V& l* \
  145.         int d2=(num/100)%10;: i: B8 H  H5 k2 N; u
  146.         int d3=num/1000;* e+ T. x/ u. I$ @5 M% ?. y: f
  147.         
    , b- f' l: r9 s  v
  148.         & \. o8 w0 U% d4 N  o
  149.         int add=250;9 h) _8 c0 E+ {+ B  w1 s2 A7 Z
  150.         
    , ^5 E+ X4 M2 [5 y$ q
  151.         digitalWrite(19,LOW);
    7 S1 b( T& ~2 Q! A
  152.         for(int i=add;i--;i<0)
    ' n1 L# y# U1 c  _! z, a+ Z8 o$ V8 W5 Q
  153.         {" H3 Z# G3 f: V7 ]( j' Q
  154.         showNum(d3);- H& G3 K0 ?5 S9 B7 B5 A* K  E
  155.         }
    ; G& {+ q! H' E8 |
  156.         digitalWrite(19,HIGH);
    # z, T( k4 e- s8 N; g
  157.         6 m1 ~) Z: ?- J8 D9 h$ g& ?
  158.         digitalWrite(18,LOW);& ~# }% {4 X% u$ y; q' x- ?
  159.         for(int i=add;i--;i<0)% x% h" a2 _: @0 G' N
  160.         {
    " K: ^8 b9 [" I2 Z* c( g% |4 j3 R
  161.         showNum(d2);
    - H# o# E. @) p) U- w7 E
  162.         }
    : ~0 l' C1 W! E
  163.         digitalWrite(18,HIGH);: o( X4 e8 S7 }
  164.         
    8 Z* M1 q1 V: v* Z; E
  165.         digitalWrite(17,LOW);4 A& y1 s8 z+ M# B4 N) \9 g& _
  166.         for(int i=add;i--;i<0)
    ( J0 X" n2 L1 K9 S# d& e
  167.         {3 U: T+ A' L: C% a. _
  168.         showNum(d1);
    2 J' G2 ?0 \4 f
  169.         }# C* E* f3 l! `& [* n% }
  170.         digitalWrite(17,HIGH);
    3 f2 m% a1 R/ q/ y% v, u9 u4 x7 n
  171.         
    4 Q) Y8 J' F) z- ?2 E% x
  172.         digitalWrite(16,LOW);4 N4 Z$ a$ m/ J
  173.         for(int i=add;i--;i<0), w5 m5 z1 F9 j' d3 G6 x
  174.         {% ~# c+ c7 }* M: F7 F, R! A, `
  175.         showNum(d0);
    1 J" l; }9 t' m! t! N, _
  176.         }
    8 t# Z$ k! q5 k0 G% u+ g. @6 w
  177.         digitalWrite(16,HIGH);
    5 r( l6 _9 \% Z! v) ~. g4 o
  178.         ) o2 l8 @; }* F9 b; g3 p( I' t
  179.     }
    5 L: I# }; ~. Y/ R4 p
  180.    
    ' @! r! D: @0 P1 I3 j
  181. void loop(): n0 W9 r( C' i; p( R# M
  182. {
    4 Y" T- q5 P0 G' p. u- B+ @4 K
  183.   // put your main code here, to run repeatedly:
    7 J, Q; e; z% w2 c. X: v4 G0 T) ^' B
  184.     setNum(second);
    $ s* w( w% s7 w! t8 s" G! K
  185.     second=millis()/1000;1 k* ?4 Q" v7 p" S
  186.     . ^5 o) Z2 C* K- \) B/ l2 D
  187. }
复制代码
实验效果:
A01效果图.png
% d4 }% g9 ^9 V4 r1 |& p
8 j6 v( W) R; }+ G8 m

Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。
" M: l4 W0 h8 \; S2 [IDE当前支持的功能有:


    9 P8 C; T& Z3 g$ I7 H9 U1 U' j( o! `  B! n
    1 l1 W1 Y+ c- T
    2 ]$ K/ ]% s1 B3 j1 p

    2 K* R- ^4 B+ p$ u& x! S# J
    ( Z! k* i, l: O& a! p/ ^
  • GDB调试
  • 封装库下载安装
  • 代码自动补全提示
  • 中英文模式
  • UTF-8\GBK编码格式
  • 代码快速格式化+ t' G# G9 j) S) f" A2 `6 I) M0 {" n
  • SWD\串口程序下载&调试(已验证)
    . U# [. g7 A$ a( A% n7 ?/ V
  • DFU程序下载方式(待验证)2 ~* }0 L% K9 u* j9 G
    , @! c9 A: f4 G2 d! L! ^+ g
  • USB HID程序下载方式(待验证)1 B4 ^4 P  l- E, c# {2 p) |( I
    / h; I. b6 h' M  b) Q8 X( M
  • maple DFU程序下载方式(待验证)
    ) ^5 @9 U" y6 g: O  m

    ; s, Q& W: w/ _8 \+ q! i( g& K
  • maple DFU2程序下载方式(待验证)
    & ^  m# J: M1 S6 w
    5 e) f& z" o* Z# b# J" `7 \
  • MassStorage程序下载方式(待验证)9 i5 d% o6 |; F3 c" S# u5 m) g% Y
    8 T$ s/ k6 a- I; \" }% c9 n
    更多功能细节请前往www.stduino.com
    进行了解
    ; W+ J7 I1 t' d1 k

    已经支持的芯片&板型列表:


    3 S; ]2 e. w/ F$ V9 N4 t
    • Stduino UNO&Nano
    • Nucleo 144 boards
    • Nucleo 64 boards
    • Nucleo 32 boards
    • Discovery boards
    • Eval boards
    • STM32MP1 series coprocessor boards
    • Generic STM32F0 boards
    • Generic STM32F1 boards
    • Generic STM32F3 boards
    • Generic STM32F4 boards
    • Generic STM32H7 boards
    • Generic STM32L0 boards
    • 3D printer boards
    • LoRa boards
    • Electronic Speed Controller boards
    • Generic flight controllers
    • Garatronics boards
    • Midatronics boards
      5 a& V9 ?) ]! c" u0 w/ P% Y% j6 ]  X: S7 ]* d. D- J

      更多功能集成正在进行中~

      $ _' o( `1 D  b+ t0 I
    3 U# H1 m9 p! D4 D5 z

& e7 o, }6 D7 Z
收藏 评论0 发布时间:2020-8-24 10:19

举报

0个回答

所属标签

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