关键词: 51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管
4 I/ q" H/ z; k& D, L f0 Q; Z从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。 学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。 说明:数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。 在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图: 一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 这9 个字符(如下图)。 共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。 有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。 四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 个IO 口,显然这会占用过多的端口。 实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。 这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 个LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
4 @* n4 |$ I! ]$ ]实验目的:点亮数码管,并实时显示程序运行的时间(秒)。
, g! f+ G" ?, b/ Q! M9 \& @) X 器材: Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻 9 \9 x3 T/ O- U
电路连接:
4 O4 _$ h" v6 o% v" h$ Q w) _
代码展示: - int second = 0;. x) j6 p+ H7 ?: V9 O( A; B
- void setup()
/ j% S6 _+ V j3 m; M3 k - {( I; J# p0 s" C4 `0 Y
- // put your setup code here, to run once:
% P* v: ~5 ?" {- g. b# Z2 g, q - pinMode(1,OUTPUT);//A
$ I9 ]2 H& I% g" p& a2 S% V2 o - pinMode(2,OUTPUT);//B
3 I W2 O/ B1 @. f" n2 ^5 O3 m# _6 K6 V! B - pinMode(3,OUTPUT);//C) y8 @) K+ T u& r8 I0 a+ Z* E
- pinMode(4,OUTPUT);//D8 I* Q3 y" h& u3 Y/ n
- pinMode(5,OUTPUT);//E
1 |5 f6 c/ C( m6 ?& X0 z& Q - pinMode(6,OUTPUT);//F8 `3 v/ G! Z1 E' w* A7 C; Y
- pinMode(7,OUTPUT);//G4 ~0 I3 ], o$ K2 ^: V8 g( g
- pinMode(8,OUTPUT);//DP8 e7 U4 U x- M
-
) L/ \9 W! e p8 @4 @; ^; V& C - pinMode(19,OUTPUT);//10 G8 L* \+ ?6 o) |7 F* J" c9 R9 L: R
- pinMode(18,OUTPUT);//2
, Y! e5 x& Y" C0 m' ~3 G- E - pinMode(17,OUTPUT);//3
: k) |2 D( q+ D7 z" Q- i - pinMode(16,OUTPUT);//4
% F6 r$ I# F' K& J$ o* y l$ ~ - + D! h" c4 G7 V4 p5 ?. D
-
1 v! C/ C' y9 ~4 N - digitalWrite(19,LOW);3 k1 K: H" X# c5 _/ X9 V4 k3 p
- digitalWrite(18,LOW);
2 ?3 h; i, p5 [+ s& i& B - digitalWrite(17,LOW);
) _/ f5 w+ L6 `. F% x - digitalWrite(16,LOW);
" B( J' U& F/ X, i1 p% `# |# j - , a! U; y# c) v N7 h$ P, S1 s
- }# h2 B% j- O$ c
" ~4 M& R1 B/ a: J7 Q9 \: _, C4 a- _: J$ C3 z# ?: m+ e
- //void SevSegInit()
1 ~) @( f4 W# }" g( U - void showNum(int num, bool point=false). F9 _# Z" v; C
- { if(point)) @4 Q# I0 p1 k6 y& g: P
- {
% q4 W6 l! ~& r" K3 k: { - digitalWrite(8,HIGH);//DP,TRUE: |) s" ]# E8 t7 W% L6 @
- }else{
& ]2 T) M2 E+ H* V9 M - digitalWrite(8,LOW);//DP,FALSE
: G- b$ D% O* h - }; @6 x' g7 W& S' X0 C
- switch(num)) D7 [6 m7 z- g# q: m- G
- { G2 ]+ g5 W! [
- case 0:
* F( q2 M5 `$ T. [' P5 v5 m4 F - digitalWrite(1,HIGH);
/ I# f H% ~8 U! R( |$ r - digitalWrite(2,HIGH);; ?3 o1 M3 s2 t3 ^6 r
- digitalWrite(3,HIGH);) b/ s! P7 c, a8 c4 i3 g3 t( H2 ]
- digitalWrite(4,HIGH);
$ D+ G. h+ f, D1 P& x7 v x9 K2 i - digitalWrite(5,HIGH);
- j9 b1 r. t+ m - digitalWrite(6,HIGH);
' @. {4 F2 K3 Z& x - digitalWrite(7,LOW);% A7 i; j4 `& q! k/ f* W
- break;5 o: ^) ^2 }; y6 |) A1 d9 u* ^
- 8 R$ E$ g3 t! q
- case 1:& V2 n' ~- Q9 c3 R: ^( t8 {
- digitalWrite(1,LOW);6 \" v$ U) _. O2 R" @) }
- digitalWrite(2,HIGH);, O' }: L+ e6 U9 o7 e% j6 S
- digitalWrite(3,HIGH);
3 X8 B/ w" {* P8 I - digitalWrite(4,LOW); ^; n: b& ~: c) f( E
- digitalWrite(5,LOW);
: H# Z+ e, X. c - digitalWrite(6,LOW);
6 d! Y; n$ [ S4 \! Y - digitalWrite(7,LOW);
/ g6 e5 ^. y$ n" g$ j: r, Z - break;
- t! G; i1 J3 R; V! e - 9 L8 a: P: {% @" \, Q
- case 2:( Z* F% n+ p1 Z k6 j% w$ ^
- //2
; p. k. c( ?3 L - digitalWrite(1,HIGH);//A
# v5 v9 e }1 d% e& L - digitalWrite(2,HIGH);//B
3 S# }: b4 L' ~! B7 r# r5 g( d - digitalWrite(3,LOW);//C
9 B3 {# _' g+ K( k1 V - digitalWrite(4,HIGH);//D) T9 c. E* N G
- digitalWrite(5,HIGH);//E
! ^5 A/ k3 T: O9 F2 [ - digitalWrite(6,LOW);//F
% b, x+ h" J/ T/ l- s - digitalWrite(7,HIGH);//G% E# @2 C' G% p6 y* l/ V3 q1 v# ?' F
- break;: c% l5 M0 {% h3 s6 t/ s" ~7 ]
- # S5 {' Y0 X+ W6 @
- case 3:! _6 ^6 C* F( _+ I' F* Z
- //3
9 ]( {: }! a$ k" E4 Y x' u - digitalWrite(1,HIGH);//A5 G8 d, X9 T8 h" r% w
- digitalWrite(2,HIGH);//B# a$ k) g% D2 a0 l) ^/ V6 A5 U
- digitalWrite(3,HIGH);//C
. S" L$ I. K; y* S: N - digitalWrite(4,HIGH);//D
! Q$ i4 [! c9 Z4 A - digitalWrite(5,LOW);//E
; U; {; @0 W: H0 o. Q7 u* N4 M - digitalWrite(6,LOW);//F0 ~6 `( n1 C0 ] X
- digitalWrite(7,HIGH);//G
) v- y% ]/ Q6 r0 z$ c$ K+ i - ( E9 R& [$ Z4 \, l) I4 O
-
4 y3 h/ [- e+ v2 t+ H8 U - break;
8 }* {6 g% T l( a. m, O - + }" c$ N, M1 O! Y6 b6 F7 A
- case 4:$ P" O: [5 G# M, s
- digitalWrite(1,LOW);//A
. I" N) x8 x. C* { - digitalWrite(2,HIGH);//B/ r9 w {/ W- q% g# Z/ g2 ]5 E
- digitalWrite(3,HIGH);//C4 n0 T7 K/ p: V1 m7 W
- digitalWrite(4,LOW);//D$ W- O6 Q7 r; F& i$ H
- digitalWrite(5,LOW);//E
. Q7 C& [* ~0 Y, L8 J$ R - digitalWrite(6,HIGH);//F/ e$ A7 N3 Y- z, D; _
- digitalWrite(7,HIGH);//G
' w2 E: Y) |- S, f - break;& C* `% p \& S+ ]/ t; n
- ! x+ p6 {, }3 R0 w; D
- case 5:3 N+ c* C! \. k. u
- digitalWrite(1,HIGH);//A
+ _/ d. R3 h9 Z+ z4 D - digitalWrite(2,LOW);//B$ U( c7 G A% L% v
- digitalWrite(3,HIGH);//C) F+ n2 p- H* w% a, X
- digitalWrite(4,HIGH);//D
: @, M' y6 |' A, V - digitalWrite(5,LOW);//E
6 `* X& P$ A: W, G$ n - digitalWrite(6,HIGH);//F5 P! ~# `6 \1 U/ l' A K5 L/ Y
- digitalWrite(7,HIGH);//G: X" h: J+ |2 i8 H6 I7 j2 G
- break;6 ?# y* I/ ^5 n# G, t4 `
- case 6:3 w6 n! b1 ~' ?
- digitalWrite(1,HIGH);//A3 W8 R) g; ]* V3 m
- digitalWrite(2,LOW);//B9 \& E$ q2 J" N" _
- digitalWrite(3,HIGH);//C; S' M1 c2 p+ z
- digitalWrite(4,HIGH);//D
+ k, Q2 G. Q. |5 z: y5 V! ]$ X. ? - digitalWrite(5,HIGH);//E2 D( }3 A8 |% {" F f T5 w
- digitalWrite(6,HIGH);//F
2 ]" _ q( q1 b; c& r - digitalWrite(7,HIGH);//G1 X) p9 \$ |, f, y
- break;
5 v& }$ H, q# D8 Q' F7 Y& w( v7 p - case 7:% p+ G6 g: ^% q' x$ k: @ O2 o p
- digitalWrite(1,HIGH);//A; W$ o4 @1 f, t( ?7 [
- digitalWrite(2,HIGH);//B1 g, u" E* y' [; F( i- c; h9 E
- digitalWrite(3,HIGH);//C) ~& ~8 v5 A4 }! X1 {2 }; x
- digitalWrite(4,LOW);//D
0 D6 x& s8 k* P, N: y - digitalWrite(5,LOW);//E: ~+ f4 B0 e. H( T7 t# K$ f
- digitalWrite(6,LOW);//F
- i: q/ b b5 r% h3 C; q* H - digitalWrite(7,LOW);//G
* t8 L6 G$ B" C+ p# q7 J - break;- Z7 h$ a6 t0 J/ t. K
- case 8:
, |# @) r5 O8 W; x. e! l2 C - digitalWrite(1,HIGH);//A
. G% f% T: K' ~$ d9 H - digitalWrite(2,HIGH);//B, S H$ t& J' `/ X! |, ]4 V
- digitalWrite(3,HIGH);//C
: M* L. S x5 W2 h0 A& f: u, g- S - digitalWrite(4,HIGH);//D
) \# Q4 r4 J" e; c+ r; W3 T - digitalWrite(5,HIGH);//E
5 {# s# f+ l2 o) V1 ^1 G% Y. H s - digitalWrite(6,HIGH);//F
' s8 |/ k( }/ I2 S6 S9 X - digitalWrite(7,HIGH);//G
8 x5 S( F9 [* n, {4 g v - break;
4 H8 q$ b+ i. [ - case 9:
1 q8 k9 U; @# ^& W; `& P - digitalWrite(1,HIGH);//A
7 ^2 R+ c" [" T8 o - digitalWrite(2,HIGH);//B( o, y0 ]; _4 H A
- digitalWrite(3,HIGH);//C% O+ h; L# q' s: X( a6 |
- digitalWrite(4,HIGH);//D4 K: B3 [! Q+ Y1 D& R
- digitalWrite(5,LOW);//E- K2 T- j" @, ?
- digitalWrite(6,HIGH);//F
4 h- [) T* `/ y$ a9 i0 d - digitalWrite(7,HIGH);//G0 j+ D( Q" C9 b8 x% u' J
- break;
- v# s- _' e" _! g1 L8 f- ` - }' P; y. M7 [6 l
- }2 U% C: Y b! ]4 k
, B7 X5 {( i9 c) E1 k/ |- void setNum(int num)$ _: {- Z% ], m; `4 S3 y
- { |2 Q h2 A7 S6 Y) A
- ( m3 ]0 K) A0 N V$ o
- int d0=num%10;
4 \; s3 j3 u! S- g6 q! n4 e' q7 c - int d1=(num%100)/10; a8 s8 ^5 H/ i, u4 u1 I. S/ Z
- int d2=(num/100)%10;2 n' E/ I% a Z( ?, ^
- int d3=num/1000;
# P2 [/ x+ z! C4 c, H, z -
4 y8 j b0 K" \0 o6 p - 8 z; V+ H7 F3 l
- int add=250;
" M7 C( X, {# r! ^- k' v! u -
0 b; K' | g$ f5 m; _2 |- w. w! S' a - digitalWrite(19,LOW);9 y/ v. t1 L8 c& M. J# U" S
- for(int i=add;i--;i<0)1 [6 [: U0 Q' d5 z, W+ x% G
- {6 h5 h: s# V1 A) [$ j
- showNum(d3);
7 Y! s+ ?- s1 f4 P1 q! s& B; ~3 F2 K- Y - }" G! q, _6 w/ O& b% R7 ^# [; U4 @3 n
- digitalWrite(19,HIGH);4 b& ]2 y5 J9 D; A9 S
- ! X/ e, T0 @/ {( l" ]% N
- digitalWrite(18,LOW);
) t) Y9 b2 ~+ K- x' U* U, T! D- N - for(int i=add;i--;i<0)
" E4 `! T* }7 |- e5 x" K" x - {, Q- F: S( G) s9 j7 P2 I
- showNum(d2);
: U8 r l( K7 e" {& Q2 S; I - }
: Z/ z# B- C) q3 l" p - digitalWrite(18,HIGH);
6 P6 y6 d, o# N2 [2 u8 G& s" w - % A8 w0 s4 B4 C K! P. Y
- digitalWrite(17,LOW);
6 y: d- ]1 v! m2 s8 R - for(int i=add;i--;i<0)
& ]. \9 l% q5 S& z - {: M2 B4 R7 b* _! n+ h$ h
- showNum(d1);" n: M; k, p) ^$ ^2 i
- }
}; V6 E5 w1 b$ z" W1 x - digitalWrite(17,HIGH);
) \ ^1 e9 Y* ~: v. M- x - 3 j. t) a1 {. s6 u7 J; Y
- digitalWrite(16,LOW);9 T2 A3 C M/ \1 C/ O: T& a
- for(int i=add;i--;i<0)
3 Q+ M. F0 l- x- @" p - {
% T* ^4 P+ }% e { - showNum(d0);8 a: E! u+ ]( t* G
- }% m9 R' q7 ?8 V7 e! @/ {
- digitalWrite(16,HIGH);
! q2 {3 F d" l* b; U: d7 x -
! f* `$ F# m, Y5 a8 b( v1 y - }
6 c9 q- p. [, X - ) X X* E7 E+ i+ [9 ~
- void loop()0 d0 ], w+ [. R+ ?' x Q
- {. s1 _" P% L( I# M/ {6 z
- // put your main code here, to run repeatedly:% }: y+ k, t& W0 D% o, O
- setNum(second);
( X* \ h( a8 L. t1 T - second=millis()/1000;
" G2 A1 p. {1 x7 C" K - 4 I& j4 n6 x* T+ L; J$ N6 P
- }
复制代码 实验效果:
9 b* q- N: l0 E# Z& N; Q# q
P) a& p0 B5 V9 |( VStduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。
Q) [7 s. O- x2 c* N1 fIDE当前支持的功能有:
& U) x/ Q) |2 r' v6 W/ c) n8 k# M3 G* [; B# o1 U) \' |
: I1 J5 W5 m8 `1 x5 ?$ \ W: z
; \3 m2 r: u7 n, l( R; T' z- L1 N
& N' T5 J" L y9 Z
4 d( X. r$ ~1 ], K- GDB调试
- 封装库下载安装
- 代码自动补全提示
- 中英文模式
- UTF-8\GBK编码格式
- 代码快速格式化
9 o* P" B" n; B - SWD\串口程序下载&调试(已验证)
" p4 s4 j7 A' b# M) S6 E, \ - DFU程序下载方式(待验证)' ~! Y& `+ y; W: l0 c0 v" s
7 B4 g& x( J3 j
- USB HID程序下载方式(待验证)7 M7 l% }8 S5 O$ |" X) V
& ^8 ]9 P2 `1 M/ Z1 w% G$ V7 G
- maple DFU程序下载方式(待验证)
6 ^& ?4 H K* i7 u+ k
" i8 d& f7 h3 {) C2 ^, ~ - maple DFU2程序下载方式(待验证)
4 P% y- ?7 O y6 ^+ G4 Q
/ G, J2 M! v* I* @/ m$ e, b - MassStorage程序下载方式(待验证)
' j+ e, v5 a5 C' z: b
" f$ ^ E$ e$ s& Y更多功能细节请前往www.stduino.com进行了解% m8 U/ N5 v! |
已经支持的芯片&板型列表: ^& P# b# f; g' c3 y, b# S
- 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
" E+ P# o4 w' D6 a; d/ }5 U/ f6 N2 M8 ^
更多功能集成正在进行中~ % t7 x) b1 F y A- p/ m0 t
* F N9 k) F6 w- P* Z
9 Y1 d B( O4 T* q3 ~5 r
|