关键词: 51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管 ! v1 s8 L7 O- K
从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。 学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。 说明:数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。 在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图: 一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 这9 个字符(如下图)。 共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。 有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。 四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 个IO 口,显然这会占用过多的端口。 实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。 这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 个LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
^ w# f* O: V- [实验目的:点亮数码管,并实时显示程序运行的时间(秒)。
3 l# `4 P8 s; m7 M0 x9 P 器材: Stduino纳米/ UNO; 4 位数码管;杜邦线;面包板; 220 Ω电阻
3 p+ t% C" w0 S- t& \9 m 电路连接:' i3 a6 G4 f i3 `; L9 E }: H* n
代码展示: - int second = 0;2 e6 h3 v% d% T9 N' ^+ G
- void setup() * q e6 S4 \0 U. T; `
- {
( h& m8 T# T: p: |$ X7 H. T - // put your setup code here, to run once:
u6 _3 W, [2 r8 M - pinMode(1,OUTPUT);//A
* ~1 u6 T: m8 X7 q# j: ^ - pinMode(2,OUTPUT);//B; M3 ]0 D: S7 e& Y5 Y, z: w# @
- pinMode(3,OUTPUT);//C
& |6 M- ]. h7 w+ G* d& M' { - pinMode(4,OUTPUT);//D
! Z" c0 k" ~" W. I6 [ - pinMode(5,OUTPUT);//E \4 v$ _6 y, h$ v
- pinMode(6,OUTPUT);//F
* ?" E9 }% Q. l - pinMode(7,OUTPUT);//G. C; {7 X- A# D9 r7 C) `
- pinMode(8,OUTPUT);//DP
6 _. G) ~0 Q8 Z* ` -
% y9 j Z ^: _; [5 X( | - pinMode(19,OUTPUT);//1( q8 M, k8 f: T* A- v
- pinMode(18,OUTPUT);//2
0 k. \6 `9 j6 C0 m B - pinMode(17,OUTPUT);//3
4 H' V# \# ]& f/ N! F' R3 }0 j6 R - pinMode(16,OUTPUT);//4
. x. p) k h; Y - + g( H+ x: H+ x e! R) w
- M+ |4 N3 N3 [& M; R: d
- digitalWrite(19,LOW);
. Z0 [1 N2 Y. Z1 P7 | - digitalWrite(18,LOW);
# Q" {( E+ x/ {$ y( d/ t - digitalWrite(17,LOW);
' u: `' I7 Q H4 W% C- v - digitalWrite(16,LOW);9 m' h. z0 M- {, C( D
2 ^7 W* U- z# u. }- }
% P& [3 W% x$ U0 N
& q, B% M9 [- X- ' y: p; o( Y9 J" @0 D& ]% @
- //void SevSegInit()
; k" v* D) }, H% @4 N! Z - void showNum(int num, bool point=false)
! e& f6 X/ u! Z - { if(point)% C" V0 o/ j) a, K( k. y# r
- {* `% O( p$ A- g: b7 X1 K, [
- digitalWrite(8,HIGH);//DP,TRUE: @! w; t# _: V4 a# S, t. d1 @
- }else{
]. y) v( \ J' {3 _ - digitalWrite(8,LOW);//DP,FALSE+ Q ^: `2 X% T# y. a) i
- }+ @# X G7 @( K; A: J8 N$ b" V% e
- switch(num)9 n1 k+ a& x: M1 I% D( m
- {* p, @! T, X3 @- J
- case 0:8 V7 F+ d S$ u ?
- digitalWrite(1,HIGH);
$ r) H. u5 p! v& U# } B5 w$ |5 l5 I - digitalWrite(2,HIGH);
: b4 U. U# ~; ~& g2 T2 l - digitalWrite(3,HIGH);/ G2 U& q& f9 j, a# u
- digitalWrite(4,HIGH);% I, I2 c9 v# n# J; Q
- digitalWrite(5,HIGH);' \+ o! k7 W$ p3 V" [& |9 J _
- digitalWrite(6,HIGH);: f7 r& {$ w' L$ A3 v
- digitalWrite(7,LOW);6 p5 R% B: r, |9 [. e! @$ C8 g* t
- break;
" V5 ]9 G0 |- ~! O( z+ Z -
8 x8 u9 O0 ?8 B, d - case 1:: U9 a6 L* V+ M+ I' T+ x4 R; O f8 b
- digitalWrite(1,LOW);
8 f* k ~+ K8 N7 r: T1 P - digitalWrite(2,HIGH);2 f" D O$ } F1 [, Z. f3 B
- digitalWrite(3,HIGH);
" V) w# X$ A- _" g1 _ - digitalWrite(4,LOW);
, |- g$ M7 Z* F G& X" B$ } - digitalWrite(5,LOW);+ R5 O+ S+ s0 Q3 L6 p
- digitalWrite(6,LOW); w" I# p o. u% u4 Y" l; f
- digitalWrite(7,LOW);
' }& S* ^4 l3 ~0 C! N6 w: q - break;
' Q0 l; e9 Y2 K9 H/ k! R1 O0 [ -
2 ~9 m% [: g" s) B7 S* P - case 2:
7 u) d6 c* _! ] - //23 _5 d% e+ `" e
- digitalWrite(1,HIGH);//A
' f' W+ }. Y7 _4 S% c; h, ] - digitalWrite(2,HIGH);//B( d; S9 T* W) R Q+ H5 P& E3 Q4 T A
- digitalWrite(3,LOW);//C
' d! n5 Z7 V; H - digitalWrite(4,HIGH);//D
9 d( k6 }0 u9 i v/ g - digitalWrite(5,HIGH);//E
e7 b- z5 T* V - digitalWrite(6,LOW);//F% ]) V+ s! U, ]! p+ Z9 E+ S {' s( L
- digitalWrite(7,HIGH);//G
: \9 O- j4 F" J# R. ^ e - break;
! `9 Q. j/ d3 H3 s g5 ? - % U* f" B( N! c4 k6 F2 L
- case 3:
5 N" p: I! S6 Z; r1 e2 l - //3+ L+ t2 u W# q$ k% ]0 H
- digitalWrite(1,HIGH);//A- {. K J' o0 V" ~0 V
- digitalWrite(2,HIGH);//B3 l6 R1 D* s7 U, C5 _0 p
- digitalWrite(3,HIGH);//C
+ X' f3 f! e# D' C - digitalWrite(4,HIGH);//D! z: ?7 T# D! F9 ?: b
- digitalWrite(5,LOW);//E' F7 P1 Q# y: ^
- digitalWrite(6,LOW);//F
# O% ]) F' K) h - digitalWrite(7,HIGH);//G1 L) L, g, X2 Q) ?, d
) z* ^ a. _0 d: r-
5 v# c5 U, r J+ B* \6 |- M - break;( v% I2 j: G2 X. \8 X: n$ c- M
-
! _5 ?8 n* y3 ?; i - case 4:4 D2 } m6 N4 t& u9 x# S" U" I
- digitalWrite(1,LOW);//A
/ m6 K; d' D) a - digitalWrite(2,HIGH);//B
* k/ m* a! B K - digitalWrite(3,HIGH);//C
( z, `# V$ g1 a0 z+ h$ [5 Y. }- T8 q - digitalWrite(4,LOW);//D! x4 z/ ^) k% h! r$ g
- digitalWrite(5,LOW);//E
1 e; q2 {, {& p. ?2 Z! n - digitalWrite(6,HIGH);//F
! e- j% _3 T4 S" D4 l) K$ O. H - digitalWrite(7,HIGH);//G
$ Y* c8 z& D. K! g0 Y9 G - break;8 A- H, b5 N/ s( }6 m. @
-
( @& |) \) @9 T8 x5 I - case 5:
& g6 L, W1 O4 Q - digitalWrite(1,HIGH);//A
$ }+ j) Z* y2 I2 O! v8 W3 l) x - digitalWrite(2,LOW);//B
$ A; @1 k% _) F5 Z5 S" p3 Y* o - digitalWrite(3,HIGH);//C
+ t0 J" B$ ^0 I7 o - digitalWrite(4,HIGH);//D
; e7 r3 Y, z; Q8 k! e# I - digitalWrite(5,LOW);//E
1 v8 n2 I( w% b( U3 i: A - digitalWrite(6,HIGH);//F) B- @/ k5 w* Z! L1 f
- digitalWrite(7,HIGH);//G! f I5 t( v( `1 X8 z8 e' w
- break;
' M. |, E( L0 v/ W8 N" q - case 6:
( ]7 O/ a6 U0 l) F; a* W: o) R2 G - digitalWrite(1,HIGH);//A
/ b3 `9 l# Y, Z3 @5 b - digitalWrite(2,LOW);//B
# t' Z' X9 B. ]3 H0 v6 [. `" \ - digitalWrite(3,HIGH);//C
1 j7 S7 `( M8 v% Y - digitalWrite(4,HIGH);//D
9 ^" v' |' K" ]/ G - digitalWrite(5,HIGH);//E# d* x$ U+ S% O
- digitalWrite(6,HIGH);//F
% s; S/ w5 \& p& `! f9 b - digitalWrite(7,HIGH);//G
9 Q5 {6 F g8 {0 @ - break;# i+ Q# }* y/ p. I/ h! m. B; Y
- case 7:
" Q7 |' p. [# G9 S; L% Z, F& k2 d - digitalWrite(1,HIGH);//A
! n9 @, T5 A3 ~, ~2 u+ t - digitalWrite(2,HIGH);//B
* z) l3 T5 E- d( O* X, j4 T( C - digitalWrite(3,HIGH);//C6 g2 k5 J) x8 n2 E: _1 J
- digitalWrite(4,LOW);//D
$ M8 g; y y. i4 Y" G - digitalWrite(5,LOW);//E& v# p+ A" _$ a3 G$ m
- digitalWrite(6,LOW);//F
" T8 o& v, {5 q - digitalWrite(7,LOW);//G
1 I& h. o; r- Q3 n4 G - break;# Y, D: g* ]4 p3 N% v, s
- case 8:
& O1 U) L+ { T. ], d - digitalWrite(1,HIGH);//A- P3 \8 [: X! {0 P4 g6 W8 s* t
- digitalWrite(2,HIGH);//B
( S8 q! f8 w+ E - digitalWrite(3,HIGH);//C
' o# ?9 D$ T9 X) q# ^# Z4 C* ^ - digitalWrite(4,HIGH);//D1 N8 e, f2 o* R4 a$ N/ l
- digitalWrite(5,HIGH);//E
) w V6 Z$ i, Z1 c' Y3 } - digitalWrite(6,HIGH);//F
$ C- i) p: q' w2 [$ p - digitalWrite(7,HIGH);//G
- K9 _; b4 E( U5 W7 A* N' M; q - break;; _5 ?# s, e* t/ F* c3 H. |! }
- case 9:, z1 J' D" v# E6 u
- digitalWrite(1,HIGH);//A, }: t4 I1 L+ f4 ^
- digitalWrite(2,HIGH);//B' O' a' e7 T, k; Z+ @ |6 T
- digitalWrite(3,HIGH);//C
) u: v% T8 d; |" f) r - digitalWrite(4,HIGH);//D
" I/ N+ p# q! H C# d0 b$ e2 V - digitalWrite(5,LOW);//E e0 ?0 A, ?1 o& H' i& \2 a' j
- digitalWrite(6,HIGH);//F
( I& n+ ?6 j1 j: ~$ @ - digitalWrite(7,HIGH);//G
* @+ @' f9 e1 l% [ - break;9 O2 V5 W- `) S) P
- }) ^! {' w' F5 Y0 t: f/ C- u
- }9 F8 a5 i; Y, d7 X+ X; |
- 6 P' \" r7 t- x& |* z' b3 g7 d3 D
- void setNum(int num)8 ], N" n& f6 y& K) j
- {8 H+ s$ B! V+ d# s3 h
- & s6 m% e; d! l
- int d0=num%10;- }/ d# D9 R: q) v
- int d1=(num%100)/10;0 {) G4 f H! D" A, H' L9 r
- int d2=(num/100)%10;
7 a" |$ e' t3 E. Z) C7 e1 j9 D - int d3=num/1000;8 o% F$ n0 c/ T5 E- s
- 0 X9 Y3 ?. a. G& R& Z
-
5 K z- _* q. U7 i3 G - int add=250; h! Z1 r) V5 `& U* m x, P a
- ; z6 R$ u! W5 Z8 ]# I( B/ w5 U
- digitalWrite(19,LOW);
k3 J4 _3 e3 W2 c& b - for(int i=add;i--;i<0)
% e6 F1 c4 u8 [; a ?. l9 Z - {1 |2 b. |" v- L, H* c; ^
- showNum(d3);
$ Y" G+ |5 u# X! {6 { - }
$ `2 W) u! o4 B - digitalWrite(19,HIGH);# s+ I, g D' T1 \5 ~ Q, {5 B( f
- Y9 N \' E z+ L
- digitalWrite(18,LOW);& C: h, G: g: B8 I4 r! M! Q
- for(int i=add;i--;i<0)" q6 f @% A! W
- {
! ~$ l3 C3 T8 q% h# { - showNum(d2);
5 `" M" O! u4 }4 l - }+ r9 q3 \, z0 _: t% f" e
- digitalWrite(18,HIGH);; X, P; L: T8 U" z* `" U
-
9 z$ Y0 F+ |* r! q g- x, A - digitalWrite(17,LOW);3 ^- F: k, K6 G
- for(int i=add;i--;i<0)
5 a: \8 L0 I8 ]6 I& Z0 `# N - {
! \" \3 X8 X/ R) I0 s5 Z- _ - showNum(d1);
" @. a4 v0 e" ?: M - }% }. V" y6 {7 O
- digitalWrite(17,HIGH);! z- ~" v, T4 L% n* E# k
-
& U+ V8 i' U# B/ r) }, k - digitalWrite(16,LOW);# D+ i, u0 w3 v( W
- for(int i=add;i--;i<0) C- g( L4 S8 X+ c
- {( a# k& L8 _5 `/ C0 G
- showNum(d0);' J# n. O. w1 |$ T' u/ [3 b
- }
2 X( I* {9 K$ _/ Z; s - digitalWrite(16,HIGH);
/ r: L5 p* Z) { -
* G2 Z2 a2 e3 q" z$ M - }( ]. o6 @! E6 s) Q
-
. c8 v0 Y" _! i4 c0 m( @ - void loop()2 d- C% p* V5 b: U2 p6 { i! w! ]
- {3 k3 J- A) x6 A* A
- // put your main code here, to run repeatedly:0 A3 `+ b2 c( ]3 Z7 J( e
- setNum(second);
- L5 [* D' `# h, i5 }& ] - second=millis()/1000;
- g8 D& \( Y! a: R/ f -
# A8 w6 R) L, `1 Z9 C - }
复制代码 实验效果: 5 T3 l5 S, |' M& [* u
3 ?, |3 @( j/ s3 x3 D, j- P
Stduino IDE是一款面向32位处理器快速入门学习的集成开发平台,目前已经支持Arduino_Core_STM32框架,集聚快捷、高效、免费、开源、易得于一身,软件还集成了GDB调试功能。6 \# D% u+ M2 d; l
IDE当前支持的功能有: 5 o$ n- |, q3 W t3 {3 l
% |; D- T3 P% b% e/ E
7 a2 g: a+ u4 `' W& w8 T2 m: ]3 I6 t
2 C. v6 l% p1 ]$ E0 E
6 I, W. J8 i& K0 L/ e: O
- GDB调试
- 封装库下载安装
- 代码自动补全提示
- 中英文模式
- UTF-8\GBK编码格式
- 代码快速格式化( Q7 J `7 e( z3 a# Q9 N
- SWD\串口程序下载&调试(已验证)
F! Q0 H2 |2 m+ h2 o - DFU程序下载方式(待验证)8 \& Z1 J7 L+ O6 x
) M5 A) o" b* D4 ~1 N8 m1 r - USB HID程序下载方式(待验证)
3 T& v' c9 I2 [+ @' P1 j
2 V5 h8 e& x5 J% `$ A2 F& p - maple DFU程序下载方式(待验证)3 r6 i0 J7 B7 g0 O r u _* C; L
6 R9 R5 w) l! C& u/ t
- maple DFU2程序下载方式(待验证)
. k3 B3 @9 c: u, k) d# j0 N- D7 L+ j5 b" r( Z0 q) v
- MassStorage程序下载方式(待验证)
+ ]5 Y% D$ }5 t/ N
6 x! K8 R9 l! Q) J# ~8 g更多功能细节请前往www.stduino.com进行了解
; M& v- G" p% \已经支持的芯片&板型列表:
% N/ k: P7 l+ i- |8 F- 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
% x+ s$ r3 S$ w6 a$ ~2 P& m4 S0 z2 q" \) s" ~, e1 [7 g
更多功能集成正在进行中~
' T! w2 C3 Y! o! R# h& O6 s. j 0 j* W o# _ P% Q. T
( \6 B* A. a, q6 W
|