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

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

[复制链接]
stduino 发布时间:2020-8-24 10:19
键词:
51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管
% ]4 t2 B" e9 B& ^3 j5 N; P) L& c8 f
从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 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

2 N. |% Y* ~) w* S8 m% A
实验目的:
点亮数码管,并实时显示程序运行的时间(秒)。

0 T7 {. j' X1 x3 }, b) X
器材:
Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
* k, Y0 k7 L( K: u1 k
电路连接:
A01连线图带水印.png

9 D+ p2 H, t! Q
代码展示:
  1. int second = 0;, @0 ^8 @9 \+ Q* Z2 V& E$ d7 f& n
  2. void setup() ) W$ k& a( ]# @$ }' a- @2 ?
  3. {
    ) u! f$ ]) z1 S; [/ @5 H
  4.   // put your setup code here, to run once:2 Y! P& q  t6 q! C
  5.     pinMode(1,OUTPUT);//A3 `! ^7 y3 R! a+ Y: @6 f
  6.     pinMode(2,OUTPUT);//B
    % q( c& _& s. y5 L3 n
  7.     pinMode(3,OUTPUT);//C4 t/ F; f; }% p/ N" C
  8.     pinMode(4,OUTPUT);//D1 n" E: G( n7 H7 s; d
  9.     pinMode(5,OUTPUT);//E4 I* |8 X4 z3 x( [" ?8 z- F0 g/ N
  10.     pinMode(6,OUTPUT);//F
    3 J. A5 |# X" o; C4 M
  11.     pinMode(7,OUTPUT);//G
    & o* G# W. c9 o3 \
  12.     pinMode(8,OUTPUT);//DP- j* ?4 h% t6 ?; i8 r: Y! y
  13.    
    8 U& q: p; h- b3 W
  14.     pinMode(19,OUTPUT);//1
    ( p/ ?3 t! k7 ]- S$ |; a
  15.     pinMode(18,OUTPUT);//23 C; W$ h, X8 e. U' a
  16.     pinMode(17,OUTPUT);//3/ d3 L- r. R8 ?
  17.     pinMode(16,OUTPUT);//4
    * k! H% P( v9 [+ \# f; x
  18.    
      t) O, G7 s9 l; V- s: X
  19.    
    3 C4 N9 k* W3 ~2 H5 {* B' L0 o
  20.     digitalWrite(19,LOW);5 p; p3 v5 J# \2 u  @7 H
  21.     digitalWrite(18,LOW);
    ! T7 o$ G( \7 N4 Y7 L! i8 p1 S
  22.     digitalWrite(17,LOW);
      V- P" x5 N3 d- s1 c
  23.     digitalWrite(16,LOW);: Y  \' n7 I( X$ k+ X8 N
  24. 9 Z5 [6 o. a/ n- a
  25. }2 f6 ?) i" G/ ^9 d+ ~
  26. " g; f( c5 \8 m% u5 Q
  27. / T. B. S9 R9 [" C6 z
  28. //void SevSegInit()1 m1 u7 L* `# f$ R" n9 V
  29. void showNum(int num, bool point=false)
    , [/ z5 v6 B; e
  30.     {   if(point)
    ! G  m% k9 ~9 W$ C9 J) I
  31.         {! s5 X: V! y8 `/ T1 B
  32.             digitalWrite(8,HIGH);//DP,TRUE1 `, B, f0 |  q% ~% T" J
  33.         }else{- y, ]. B4 p1 m6 ?( a4 y4 @9 h# P
  34.             digitalWrite(8,LOW);//DP,FALSE1 a/ C! H- {. R: V' [# j! C
  35.             }
    % s" Q. q. d3 q
  36.         switch(num)
    ( c* c3 [7 W5 k, G3 [
  37.         {
    3 I. V* i/ G! _8 F( B( T1 V6 |
  38.             case 0:# y7 p0 T1 @. [6 I
  39.                 digitalWrite(1,HIGH);# B9 S3 E* j# R4 u+ s; M* Q
  40.                 digitalWrite(2,HIGH);+ A" p6 p  ^2 \
  41.                 digitalWrite(3,HIGH);
    ! {7 |8 A- b: M
  42.                 digitalWrite(4,HIGH);% D! P6 R8 ^* J
  43.                 digitalWrite(5,HIGH);2 Y$ _" F. y( d9 ~$ G
  44.                 digitalWrite(6,HIGH);' K7 U1 q4 a! k( ~* e
  45.                 digitalWrite(7,LOW);" J& W' v5 L# d7 w1 l
  46.                 break;
    7 ~& i6 r# |+ S$ a5 N8 O/ v
  47.                
      G1 ?3 H+ [3 X5 {& U0 l$ h
  48.             case 1:
    8 P% `, G7 E& q7 K' b8 _- E
  49.                 digitalWrite(1,LOW);
    " p# t0 |! u% g0 B' q
  50.                 digitalWrite(2,HIGH);
    7 K! _* G8 j7 r* J# N
  51.                 digitalWrite(3,HIGH);
    $ S4 P3 C8 D) M+ U; v
  52.                 digitalWrite(4,LOW);
    ! L, N' a# J: T, }6 u
  53.                 digitalWrite(5,LOW);
    / n6 K: r2 y& R8 i
  54.                 digitalWrite(6,LOW);
    * {/ t$ `9 q; _7 g& a$ ~. A# ]; v
  55.                 digitalWrite(7,LOW);! u; F' ?* |( N5 ?6 H4 d  i2 j$ x/ i1 W
  56.                 break;3 z$ I# c& q- }4 t. x6 M  G
  57.                 5 O9 @* N* s/ O( r0 g* y7 K
  58.             case 2:
    7 s0 [- n. [3 E" s: m! _
  59.                   //2
    ) Q6 c3 g) z9 Y4 e6 E2 H8 I9 w2 B
  60.                 digitalWrite(1,HIGH);//A
    " G0 {. s7 c5 ?, j  Z% h& B  g
  61.                 digitalWrite(2,HIGH);//B2 X8 p" b* r  V- k& N& h6 p
  62.                 digitalWrite(3,LOW);//C3 Q* O6 a6 V1 l, p9 o. j
  63.                 digitalWrite(4,HIGH);//D: j  b9 `9 q! h& @8 Z+ @5 X3 C
  64.                 digitalWrite(5,HIGH);//E
    1 y0 F" h9 f, n  S' @3 N# i
  65.                 digitalWrite(6,LOW);//F
    8 r0 e/ j" p5 c) P+ r
  66.                 digitalWrite(7,HIGH);//G: P$ I* Q+ M: K' \; I9 q9 W
  67.                 break;3 \' i. Y% [9 G" R5 J
  68.                
      [+ N% d+ ]1 }
  69.             case 3:
    * w9 R& A  {- U  a4 V& C' k) T( q
  70.                   //3
    $ C+ ?8 J/ k, P/ k# C' c7 V2 D
  71.                 digitalWrite(1,HIGH);//A! d/ n3 J; L' J  B7 `* p
  72.                 digitalWrite(2,HIGH);//B
    9 M  a4 _8 Z5 G6 K
  73.                 digitalWrite(3,HIGH);//C
    2 ^: C; O/ K/ t9 B
  74.                 digitalWrite(4,HIGH);//D( |6 u: _: h7 u# Q% i( h% N
  75.                 digitalWrite(5,LOW);//E& c3 @7 _9 i4 W
  76.                 digitalWrite(6,LOW);//F, X8 u! U8 i: ?0 @
  77.                 digitalWrite(7,HIGH);//G8 r( B! |5 R. C/ Z$ o

  78. $ D1 a( R9 [" e5 ?- u, g
  79.         9 `/ B/ h" T- E* J9 T
  80.                 break;9 {- U' Z$ ~+ @
  81.                 " A8 L$ N( D# y! m. B5 I! c7 X! j
  82.             case 4:/ w! ~4 C5 E: U+ I1 v2 m
  83.                 digitalWrite(1,LOW);//A4 y7 `, y' B  g6 B2 T' `9 v7 z8 K
  84.                 digitalWrite(2,HIGH);//B
    ) T5 z# [4 v( O$ S( `9 n# M
  85.                 digitalWrite(3,HIGH);//C
    / a2 Q9 Y+ m- }6 q' W; c
  86.                 digitalWrite(4,LOW);//D- ^0 Y- {+ U1 T2 \$ x* x  e
  87.                 digitalWrite(5,LOW);//E6 r; U3 w" ~. _8 W3 Y& V
  88.                 digitalWrite(6,HIGH);//F
    0 K4 t$ d5 q7 A5 w. d3 Y. G
  89.                 digitalWrite(7,HIGH);//G* D  v7 Z+ X+ W, t1 x) L
  90.                 break;4 J0 _$ k* I- [. w. T8 ?6 C, x$ ]
  91.                
    . N( a1 }% ?- Q: n; x5 {" \
  92.             case 5:; X3 U' }* G7 b% E2 f% ]3 L
  93.                 digitalWrite(1,HIGH);//A, @8 \- v$ p2 s! p+ f7 R' v
  94.                 digitalWrite(2,LOW);//B5 C! `3 z; F0 M# x. S0 _8 N
  95.                 digitalWrite(3,HIGH);//C6 S$ i) W2 f4 T4 O  h' T
  96.                 digitalWrite(4,HIGH);//D, G$ C+ I( q( m1 G8 p
  97.                 digitalWrite(5,LOW);//E2 e4 N- g( Z; c& t
  98.                 digitalWrite(6,HIGH);//F
    : v8 t3 V4 ?! {) a( B1 w7 B
  99.                 digitalWrite(7,HIGH);//G
    " @. V( a2 ?; ^
  100.                 break;6 y  ~$ C8 Z! K0 z+ i) ?6 a
  101.             case 6:& }, o# S9 K, t' S) C
  102.                 digitalWrite(1,HIGH);//A
    ; M! m! C- t9 z6 W, Q, B6 ?
  103.                 digitalWrite(2,LOW);//B
    5 |; j: D* ^6 G- o  j
  104.                 digitalWrite(3,HIGH);//C
    # r6 U6 Q3 f- X. m) [; o" R4 b' |
  105.                 digitalWrite(4,HIGH);//D
    ! i% ]& }+ n" q0 ]: @
  106.                 digitalWrite(5,HIGH);//E0 b" t& L& s6 x; J
  107.                 digitalWrite(6,HIGH);//F. ?  m. H5 x8 f: K' q4 ?
  108.                 digitalWrite(7,HIGH);//G4 U4 W- W1 N: R3 W3 Z  p, }2 E
  109.                 break;1 |5 R: u( i% K3 E& p% U& [7 @
  110.             case 7:
    7 H9 Q* W; v0 b$ s+ E( f7 e
  111.                 digitalWrite(1,HIGH);//A
    1 q& H: L$ q. I
  112.                 digitalWrite(2,HIGH);//B6 p# _1 E) g. s/ J* k
  113.                 digitalWrite(3,HIGH);//C
    7 ^. b- E  ^9 M; L
  114.                 digitalWrite(4,LOW);//D
    % y4 z9 e! I- b+ W
  115.                 digitalWrite(5,LOW);//E
    ) |0 q: |3 n& D" p
  116.                 digitalWrite(6,LOW);//F
    4 V; x2 y: h* j; e
  117.                 digitalWrite(7,LOW);//G9 g- N% |! ^# r$ Z; s' {' N" E" c
  118.                 break;
    * x! ?9 [# D! D3 j; g/ j
  119.             case 8:
    ! b* D  ?; Q/ Y# p. Y9 s
  120.                 digitalWrite(1,HIGH);//A
    + A' ?" H' s# |# i* z( M) X
  121.                 digitalWrite(2,HIGH);//B% v( u+ C$ H6 B; G4 C: |( [& d
  122.                 digitalWrite(3,HIGH);//C
    4 O9 c$ E9 `' }! _+ P
  123.                 digitalWrite(4,HIGH);//D3 M) |, K1 ]6 o, z0 A
  124.                 digitalWrite(5,HIGH);//E
    + ~+ j4 L3 `2 ~; D& u/ h3 j, N
  125.                 digitalWrite(6,HIGH);//F& o' s; E, \( X8 T) E6 x& |3 J8 A
  126.                 digitalWrite(7,HIGH);//G/ @( G8 y  C' @  p5 d
  127.                 break;
    3 I- C; c9 E6 x# ^# W; Q. A- L* q
  128.             case 9:
    8 C) f; A+ E+ J+ J2 d4 V
  129.                 digitalWrite(1,HIGH);//A
    * n4 c) H: {# N; H
  130.                 digitalWrite(2,HIGH);//B
    0 A3 B- x& A1 R, f- b
  131.                 digitalWrite(3,HIGH);//C9 W9 ?4 P& l- k  p' `3 h4 d
  132.                 digitalWrite(4,HIGH);//D+ @" P' z* t/ J- r$ a
  133.                 digitalWrite(5,LOW);//E) m  U9 x% P8 g4 w1 f9 `
  134.                 digitalWrite(6,HIGH);//F
    1 G4 \/ A) M, z$ o/ }
  135.                 digitalWrite(7,HIGH);//G! ]3 ^# e5 N/ t$ R: o- i1 a
  136.                 break;' u& F. J# _" J  q2 A: u
  137.         }) _* ^! {& Y8 u2 ]4 R6 F' h
  138.     }& S2 C( [4 l$ e+ q% \8 D% R
  139. 6 o: c) \% A0 \$ u  s
  140. void setNum(int num)
      u2 W) ]2 G0 S0 `) |! g( a
  141.     {
    2 n9 ^$ I# h+ ]& b
  142.         3 [5 A, h, M. c4 e9 j2 g# C
  143.         int d0=num%10;7 j) ?# i) Z7 K
  144.         int d1=(num%100)/10;
    6 [4 u* Y) }% R1 H5 h
  145.         int d2=(num/100)%10;
    ) B% A. O* Y5 z% b" A/ s1 ]1 J- ~  a
  146.         int d3=num/1000;, m+ o2 O- X* G0 A) Q
  147.         4 ~3 \9 e! v9 Y  f: o' C
  148.         , n# d' q/ n( y
  149.         int add=250;! g# @0 Y0 m* M2 U: O3 u7 k
  150.         3 J- T4 F* Z4 S* n5 T, ^: F, A) o# v
  151.         digitalWrite(19,LOW);
    4 q5 E: x; ]3 E: V
  152.         for(int i=add;i--;i<0)
    3 [4 }: Z$ w# b( W( x4 A
  153.         {
    ' g# Y( k6 E* c& w* r
  154.         showNum(d3);
    7 m' I0 Y/ a, C! o- o, Q9 O
  155.         }
    ! }& e& ?. `) i+ }
  156.         digitalWrite(19,HIGH);3 D( _7 {( e  T' p6 [) f
  157.         
    & v9 f; N+ H2 A
  158.         digitalWrite(18,LOW);
    7 T3 B$ R4 t; s' a
  159.         for(int i=add;i--;i<0)! P0 _% `! o# m7 Z% z) E/ ~: ~! Q% x
  160.         {
    8 p: A/ P3 L: e
  161.         showNum(d2);
    3 E" f# Y" ?2 ^& |: [$ w
  162.         }2 ]7 P8 ^: ~; m3 t% x. \* U
  163.         digitalWrite(18,HIGH);0 {. T5 \( L4 Y+ b
  164.         
    3 G; y) e! W# i8 Z/ Y& I
  165.         digitalWrite(17,LOW);
    ! k5 H5 m: H0 W8 {2 ^
  166.         for(int i=add;i--;i<0); D. `0 _; s3 w5 f3 J$ g) y
  167.         {
    1 {( W5 B, {2 ?8 |
  168.         showNum(d1);0 ?+ m5 E+ E/ u
  169.         }3 K; ?% |$ K6 Z  E" c: m2 y* a
  170.         digitalWrite(17,HIGH);
    4 C4 @# N) }! y2 z
  171.         
    2 C* V# a; s6 M. U" Z
  172.         digitalWrite(16,LOW);) t3 y$ b" s( |0 j
  173.         for(int i=add;i--;i<0)1 S6 C9 `; i8 E2 Y
  174.         {
    , _  s' w) ^) U0 s" t
  175.         showNum(d0);
    : b+ r7 ^6 w& a/ k: R
  176.         }6 V, N& @! j  m8 w# H8 n' m4 i
  177.         digitalWrite(16,HIGH);
    7 l3 H; D! @' _. x
  178.         
    . L) {: h( J% L, M9 J
  179.     }
    . t5 U" X6 n$ f! n, V! q
  180.     - W/ z, D9 Z8 D. D( L3 D& W9 o
  181. void loop()0 H0 S( @: M- E
  182. {. {$ v+ K2 \* W* e0 t$ J  ]
  183.   // put your main code here, to run repeatedly:* I; S0 R1 u) B( p9 F
  184.     setNum(second);: N( F2 f6 Y# g$ M: N/ x
  185.     second=millis()/1000;
    1 k+ c! ?1 }. m# E
  186.    
    ; s# h/ K& X: u( D/ o
  187. }
复制代码
实验效果:
A01效果图.png
' L" m5 l; M2 S& C+ B9 ]
5 t: z$ }# L; n# ?+ m7 m4 n

Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。
2 _9 q. g. u6 m' VIDE当前支持的功能有:

    , ]' D# k8 x5 D  e
    6 N" B$ u; Z7 |4 V3 P/ j

    3 T1 m; Z3 B' F1 V5 c! _5 K, O- }  d

    " T) p/ W9 Q. t2 B) Y
    5 G& y, S- h! ]6 y: C# I: {$ {* z5 ~
  • GDB调试
  • 封装库下载安装
  • 代码自动补全提示
  • 中英文模式
  • UTF-8\GBK编码格式
  • 代码快速格式化% u' U- k' c+ D" L8 P3 k8 M
  • SWD\串口程序下载&调试(已验证)
    5 O7 J' ]0 E- d9 S
  • DFU程序下载方式(待验证)% x+ f& W5 h4 K/ @  c3 @5 ?3 Z

    & T) V% V4 m+ {- Y: r, p* L
  • USB HID程序下载方式(待验证)
    1 e# C1 G. k, r2 n

    % O: W9 T0 u( s4 e  X
  • maple DFU程序下载方式(待验证)! f3 ^) E1 m3 V, B; O1 f
    * X% \7 y0 Y& ^% }+ x0 M
  • maple DFU2程序下载方式(待验证)+ n3 H" O, g' w/ r$ r

    3 y5 u* c, _5 a% l! ~
  • MassStorage程序下载方式(待验证)$ x" Q" _( f1 j1 ]
    ' {2 J& ~: g- w9 y/ V; [
    更多功能细节请前往www.stduino.com
    进行了解
    7 a. e! e) q+ M  |2 o4 k

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

    3 E, a: ?# a! q$ H/ A
    • 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( a/ K- ?6 j8 Q# q' [
      * `- C8 @1 W: D6 q) i9 A- L4 H

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

      9 Y0 l4 h; D6 ~. w

    5 \/ a2 O% V- `* \( p) k
% Z7 ^8 G7 v, q, p
收藏 评论0 发布时间:2020-8-24 10:19

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版