关键词: 51 ; STM32 ;Arduino ;Stduino单片机; Stduino UNO和Nano;四位数码管 % ]4 t2 B" e9 B& ^3 j5 N; P) L& c8 f
从大部分开始,我们将介绍更多的电子元件。其中大多数大家可能并不熟悉,但是如果你把前面的 37 个传感器都测试过了,这些对你来说不过是稍微复杂,繁琐一些。 学习这些扩展的电子元件,不需要从头到尾学习一遍。就是在你需要用到它的时候,知道有这么个东西,然后再来看看就好。原理很简单,会用就行。 说明:数码管(七段显示器)能够显示 0〜9 十个字符,生活中进场在一些只需要显示数字的地方出现,例如电子秤,食堂刷卡终端,电梯楼层显示等等。数码管有多种型号,其中显示4 位数的为四位数码管。 在讲解四位数码管之前,我们先介绍一位数码管,也是最简单的一种。如下图: 一位数码管的数字共有七段,每一段实际是一独立的 LED ,因此数码管也被称为七段数码管。通过控制LED 输入的高低电平控制亮灭,从而变化出0〜9 这9 个字符(如下图)。 共阳极,即七段 LED 公共同一个阳极,那么通过控制每一段是否接地来控制亮灭(接地,则电路导通,点亮;反之交替)。共波长,即七段LED 共享同一个波导接地,然后通过控制每一段输入的高电平控制亮灭(如下图)。 有一些数码管带有 IC ,能够通过集成电路进行控制。但是这个数码管比较原始,一个七段数码管需要更长的IO 口,需要我们自己手动写每个一个字符的高配置。 四位数码管就是集合了四个单位的数码管,其也包括共阴型与共阳型两种。我们知道七段数码管需要插孔 IO 口,四位数码管每个数码管的数字不同,那么就需要进行单独控制。所以应该需要32 个IO 口,显然这会占用过多的端口。 实际,四位数码管每只有一个数码管显示字形,其他三个数码管断电不显示。四个数码管依次循环显示,当频率足够大时,人眼由于视觉残留的缘故,就会觉得四个数码管是同时点亮的,看到连续的显示效果。这就好像,,每个帧都是不同的,但是播放的速度足够快( 24 帧每秒),人眼就会觉得画面动起来了。 这样,四位数码管只需要连接 12 个插座。其中有时用来控制单位数码管的8 个LED ,称为段码;另外四个用来控制选择点亮和熄灭的数码管(每次只有一个点亮)。
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
电路连接:
9 D+ p2 H, t! Q
代码展示: - int second = 0;, @0 ^8 @9 \+ Q* Z2 V& E$ d7 f& n
- void setup() ) W$ k& a( ]# @$ }' a- @2 ?
- {
) u! f$ ]) z1 S; [/ @5 H - // put your setup code here, to run once:2 Y! P& q t6 q! C
- pinMode(1,OUTPUT);//A3 `! ^7 y3 R! a+ Y: @6 f
- pinMode(2,OUTPUT);//B
% q( c& _& s. y5 L3 n - pinMode(3,OUTPUT);//C4 t/ F; f; }% p/ N" C
- pinMode(4,OUTPUT);//D1 n" E: G( n7 H7 s; d
- pinMode(5,OUTPUT);//E4 I* |8 X4 z3 x( [" ?8 z- F0 g/ N
- pinMode(6,OUTPUT);//F
3 J. A5 |# X" o; C4 M - pinMode(7,OUTPUT);//G
& o* G# W. c9 o3 \ - pinMode(8,OUTPUT);//DP- j* ?4 h% t6 ?; i8 r: Y! y
-
8 U& q: p; h- b3 W - pinMode(19,OUTPUT);//1
( p/ ?3 t! k7 ]- S$ |; a - pinMode(18,OUTPUT);//23 C; W$ h, X8 e. U' a
- pinMode(17,OUTPUT);//3/ d3 L- r. R8 ?
- pinMode(16,OUTPUT);//4
* k! H% P( v9 [+ \# f; x -
t) O, G7 s9 l; V- s: X -
3 C4 N9 k* W3 ~2 H5 {* B' L0 o - digitalWrite(19,LOW);5 p; p3 v5 J# \2 u @7 H
- digitalWrite(18,LOW);
! T7 o$ G( \7 N4 Y7 L! i8 p1 S - digitalWrite(17,LOW);
V- P" x5 N3 d- s1 c - digitalWrite(16,LOW);: Y \' n7 I( X$ k+ X8 N
- 9 Z5 [6 o. a/ n- a
- }2 f6 ?) i" G/ ^9 d+ ~
- " g; f( c5 \8 m% u5 Q
- / T. B. S9 R9 [" C6 z
- //void SevSegInit()1 m1 u7 L* `# f$ R" n9 V
- void showNum(int num, bool point=false)
, [/ z5 v6 B; e - { if(point)
! G m% k9 ~9 W$ C9 J) I - {! s5 X: V! y8 `/ T1 B
- digitalWrite(8,HIGH);//DP,TRUE1 `, B, f0 | q% ~% T" J
- }else{- y, ]. B4 p1 m6 ?( a4 y4 @9 h# P
- digitalWrite(8,LOW);//DP,FALSE1 a/ C! H- {. R: V' [# j! C
- }
% s" Q. q. d3 q - switch(num)
( c* c3 [7 W5 k, G3 [ - {
3 I. V* i/ G! _8 F( B( T1 V6 | - case 0:# y7 p0 T1 @. [6 I
- digitalWrite(1,HIGH);# B9 S3 E* j# R4 u+ s; M* Q
- digitalWrite(2,HIGH);+ A" p6 p ^2 \
- digitalWrite(3,HIGH);
! {7 |8 A- b: M - digitalWrite(4,HIGH);% D! P6 R8 ^* J
- digitalWrite(5,HIGH);2 Y$ _" F. y( d9 ~$ G
- digitalWrite(6,HIGH);' K7 U1 q4 a! k( ~* e
- digitalWrite(7,LOW);" J& W' v5 L# d7 w1 l
- break;
7 ~& i6 r# |+ S$ a5 N8 O/ v -
G1 ?3 H+ [3 X5 {& U0 l$ h - case 1:
8 P% `, G7 E& q7 K' b8 _- E - digitalWrite(1,LOW);
" p# t0 |! u% g0 B' q - digitalWrite(2,HIGH);
7 K! _* G8 j7 r* J# N - digitalWrite(3,HIGH);
$ S4 P3 C8 D) M+ U; v - digitalWrite(4,LOW);
! L, N' a# J: T, }6 u - digitalWrite(5,LOW);
/ n6 K: r2 y& R8 i - digitalWrite(6,LOW);
* {/ t$ `9 q; _7 g& a$ ~. A# ]; v - digitalWrite(7,LOW);! u; F' ?* |( N5 ?6 H4 d i2 j$ x/ i1 W
- break;3 z$ I# c& q- }4 t. x6 M G
- 5 O9 @* N* s/ O( r0 g* y7 K
- case 2:
7 s0 [- n. [3 E" s: m! _ - //2
) Q6 c3 g) z9 Y4 e6 E2 H8 I9 w2 B - digitalWrite(1,HIGH);//A
" G0 {. s7 c5 ?, j Z% h& B g - digitalWrite(2,HIGH);//B2 X8 p" b* r V- k& N& h6 p
- digitalWrite(3,LOW);//C3 Q* O6 a6 V1 l, p9 o. j
- digitalWrite(4,HIGH);//D: j b9 `9 q! h& @8 Z+ @5 X3 C
- digitalWrite(5,HIGH);//E
1 y0 F" h9 f, n S' @3 N# i - digitalWrite(6,LOW);//F
8 r0 e/ j" p5 c) P+ r - digitalWrite(7,HIGH);//G: P$ I* Q+ M: K' \; I9 q9 W
- break;3 \' i. Y% [9 G" R5 J
-
[+ N% d+ ]1 } - case 3:
* w9 R& A {- U a4 V& C' k) T( q - //3
$ C+ ?8 J/ k, P/ k# C' c7 V2 D - digitalWrite(1,HIGH);//A! d/ n3 J; L' J B7 `* p
- digitalWrite(2,HIGH);//B
9 M a4 _8 Z5 G6 K - digitalWrite(3,HIGH);//C
2 ^: C; O/ K/ t9 B - digitalWrite(4,HIGH);//D( |6 u: _: h7 u# Q% i( h% N
- digitalWrite(5,LOW);//E& c3 @7 _9 i4 W
- digitalWrite(6,LOW);//F, X8 u! U8 i: ?0 @
- digitalWrite(7,HIGH);//G8 r( B! |5 R. C/ Z$ o
$ D1 a( R9 [" e5 ?- u, g- 9 `/ B/ h" T- E* J9 T
- break;9 {- U' Z$ ~+ @
- " A8 L$ N( D# y! m. B5 I! c7 X! j
- case 4:/ w! ~4 C5 E: U+ I1 v2 m
- digitalWrite(1,LOW);//A4 y7 `, y' B g6 B2 T' `9 v7 z8 K
- digitalWrite(2,HIGH);//B
) T5 z# [4 v( O$ S( `9 n# M - digitalWrite(3,HIGH);//C
/ a2 Q9 Y+ m- }6 q' W; c - digitalWrite(4,LOW);//D- ^0 Y- {+ U1 T2 \$ x* x e
- digitalWrite(5,LOW);//E6 r; U3 w" ~. _8 W3 Y& V
- digitalWrite(6,HIGH);//F
0 K4 t$ d5 q7 A5 w. d3 Y. G - digitalWrite(7,HIGH);//G* D v7 Z+ X+ W, t1 x) L
- break;4 J0 _$ k* I- [. w. T8 ?6 C, x$ ]
-
. N( a1 }% ?- Q: n; x5 {" \ - case 5:; X3 U' }* G7 b% E2 f% ]3 L
- digitalWrite(1,HIGH);//A, @8 \- v$ p2 s! p+ f7 R' v
- digitalWrite(2,LOW);//B5 C! `3 z; F0 M# x. S0 _8 N
- digitalWrite(3,HIGH);//C6 S$ i) W2 f4 T4 O h' T
- digitalWrite(4,HIGH);//D, G$ C+ I( q( m1 G8 p
- digitalWrite(5,LOW);//E2 e4 N- g( Z; c& t
- digitalWrite(6,HIGH);//F
: v8 t3 V4 ?! {) a( B1 w7 B - digitalWrite(7,HIGH);//G
" @. V( a2 ?; ^ - break;6 y ~$ C8 Z! K0 z+ i) ?6 a
- case 6:& }, o# S9 K, t' S) C
- digitalWrite(1,HIGH);//A
; M! m! C- t9 z6 W, Q, B6 ? - digitalWrite(2,LOW);//B
5 |; j: D* ^6 G- o j - digitalWrite(3,HIGH);//C
# r6 U6 Q3 f- X. m) [; o" R4 b' | - digitalWrite(4,HIGH);//D
! i% ]& }+ n" q0 ]: @ - digitalWrite(5,HIGH);//E0 b" t& L& s6 x; J
- digitalWrite(6,HIGH);//F. ? m. H5 x8 f: K' q4 ?
- digitalWrite(7,HIGH);//G4 U4 W- W1 N: R3 W3 Z p, }2 E
- break;1 |5 R: u( i% K3 E& p% U& [7 @
- case 7:
7 H9 Q* W; v0 b$ s+ E( f7 e - digitalWrite(1,HIGH);//A
1 q& H: L$ q. I - digitalWrite(2,HIGH);//B6 p# _1 E) g. s/ J* k
- digitalWrite(3,HIGH);//C
7 ^. b- E ^9 M; L - digitalWrite(4,LOW);//D
% y4 z9 e! I- b+ W - digitalWrite(5,LOW);//E
) |0 q: |3 n& D" p - digitalWrite(6,LOW);//F
4 V; x2 y: h* j; e - digitalWrite(7,LOW);//G9 g- N% |! ^# r$ Z; s' {' N" E" c
- break;
* x! ?9 [# D! D3 j; g/ j - case 8:
! b* D ?; Q/ Y# p. Y9 s - digitalWrite(1,HIGH);//A
+ A' ?" H' s# |# i* z( M) X - digitalWrite(2,HIGH);//B% v( u+ C$ H6 B; G4 C: |( [& d
- digitalWrite(3,HIGH);//C
4 O9 c$ E9 `' }! _+ P - digitalWrite(4,HIGH);//D3 M) |, K1 ]6 o, z0 A
- digitalWrite(5,HIGH);//E
+ ~+ j4 L3 `2 ~; D& u/ h3 j, N - digitalWrite(6,HIGH);//F& o' s; E, \( X8 T) E6 x& |3 J8 A
- digitalWrite(7,HIGH);//G/ @( G8 y C' @ p5 d
- break;
3 I- C; c9 E6 x# ^# W; Q. A- L* q - case 9:
8 C) f; A+ E+ J+ J2 d4 V - digitalWrite(1,HIGH);//A
* n4 c) H: {# N; H - digitalWrite(2,HIGH);//B
0 A3 B- x& A1 R, f- b - digitalWrite(3,HIGH);//C9 W9 ?4 P& l- k p' `3 h4 d
- digitalWrite(4,HIGH);//D+ @" P' z* t/ J- r$ a
- digitalWrite(5,LOW);//E) m U9 x% P8 g4 w1 f9 `
- digitalWrite(6,HIGH);//F
1 G4 \/ A) M, z$ o/ } - digitalWrite(7,HIGH);//G! ]3 ^# e5 N/ t$ R: o- i1 a
- break;' u& F. J# _" J q2 A: u
- }) _* ^! {& Y8 u2 ]4 R6 F' h
- }& S2 C( [4 l$ e+ q% \8 D% R
- 6 o: c) \% A0 \$ u s
- void setNum(int num)
u2 W) ]2 G0 S0 `) |! g( a - {
2 n9 ^$ I# h+ ]& b - 3 [5 A, h, M. c4 e9 j2 g# C
- int d0=num%10;7 j) ?# i) Z7 K
- int d1=(num%100)/10;
6 [4 u* Y) }% R1 H5 h - int d2=(num/100)%10;
) B% A. O* Y5 z% b" A/ s1 ]1 J- ~ a - int d3=num/1000;, m+ o2 O- X* G0 A) Q
- 4 ~3 \9 e! v9 Y f: o' C
- , n# d' q/ n( y
- int add=250;! g# @0 Y0 m* M2 U: O3 u7 k
- 3 J- T4 F* Z4 S* n5 T, ^: F, A) o# v
- digitalWrite(19,LOW);
4 q5 E: x; ]3 E: V - for(int i=add;i--;i<0)
3 [4 }: Z$ w# b( W( x4 A - {
' g# Y( k6 E* c& w* r - showNum(d3);
7 m' I0 Y/ a, C! o- o, Q9 O - }
! }& e& ?. `) i+ } - digitalWrite(19,HIGH);3 D( _7 {( e T' p6 [) f
-
& v9 f; N+ H2 A - digitalWrite(18,LOW);
7 T3 B$ R4 t; s' a - for(int i=add;i--;i<0)! P0 _% `! o# m7 Z% z) E/ ~: ~! Q% x
- {
8 p: A/ P3 L: e - showNum(d2);
3 E" f# Y" ?2 ^& |: [$ w - }2 ]7 P8 ^: ~; m3 t% x. \* U
- digitalWrite(18,HIGH);0 {. T5 \( L4 Y+ b
-
3 G; y) e! W# i8 Z/ Y& I - digitalWrite(17,LOW);
! k5 H5 m: H0 W8 {2 ^ - for(int i=add;i--;i<0); D. `0 _; s3 w5 f3 J$ g) y
- {
1 {( W5 B, {2 ?8 | - showNum(d1);0 ?+ m5 E+ E/ u
- }3 K; ?% |$ K6 Z E" c: m2 y* a
- digitalWrite(17,HIGH);
4 C4 @# N) }! y2 z -
2 C* V# a; s6 M. U" Z - digitalWrite(16,LOW);) t3 y$ b" s( |0 j
- for(int i=add;i--;i<0)1 S6 C9 `; i8 E2 Y
- {
, _ s' w) ^) U0 s" t - showNum(d0);
: b+ r7 ^6 w& a/ k: R - }6 V, N& @! j m8 w# H8 n' m4 i
- digitalWrite(16,HIGH);
7 l3 H; D! @' _. x -
. L) {: h( J% L, M9 J - }
. t5 U" X6 n$ f! n, V! q - - W/ z, D9 Z8 D. D( L3 D& W9 o
- void loop()0 H0 S( @: M- E
- {. {$ v+ K2 \* W* e0 t$ J ]
- // put your main code here, to run repeatedly:* I; S0 R1 u) B( p9 F
- setNum(second);: N( F2 f6 Y# g$ M: N/ x
- second=millis()/1000;
1 k+ c! ?1 }. m# E -
; s# h/ K& X: u( D/ o - }
复制代码 实验效果: ' 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
|