我们按键信号作为控制信号来使用,但是我们不能直接去使用,因为轻触按键在按下或者松开时,信号非常不稳定,会导致在按键没有完全按下或者松开时,信号出现很多的毛刺,这样的信号不能作为我们的控制信号,所以我们在写控制逻辑之前,我们首先需要对按键做一下消抖处理,实现信号稳定。我们处理的原理是,当信号一直处于低电平或者高电平一段时间后,我们默认信号处于稳定状态,这个时间我们暂定为10ms。
7 w3 H2 Z# J4 x( j$ _1 N0 W
接下来我们先进行新建工程,首先点击create project。
% {7 ^6 P) t5 w2 G% C
5 I% F. J) d' w( d( q8 d
' ?! R3 n! W% K
然后在打开的界面修改工程名字为key_led。
9 B9 O: H% T: S0 b" N
7 T+ M/ L4 i' C
/ Z- `: c5 B" \
保存位置确定后,点击next。
5 C6 m' r% Q% e0 P2 f: N
6 H- W& j- r; B; `
9 [/ u$ u3 V/ N5 b+ f) i* z! ^- e, [& K
我们选择RTL Project,点击next。
0 ^( _6 C/ y) m( L/ S0 V9 P; ?" W/ L) c
7 p9 V; n/ n8 n& f) h5 I+ \5 p$ ?4 i
我们在搜索窗口搜索我们板子的芯片型号,确定好之后点击next。
, L6 N5 b m9 p) C4 D8 F- M h( |
+ k; |4 F. q; }! i3 J6 R# J: a2 x- [8 n4 t! Y8 A2 C& r
( U8 x K+ @" G4 y$ G" r7 H* W5 L! P3 C$ Z
* O% z( _2 N1 h( v6 o4 u+ E
5 |0 L, A/ @: {5 d G2 q. p1 m
0 O5 b' e5 s7 j( y3 [
点击Finish完成新建工程。新建完成之后,我们开始根据前面我们所讲的理论开始写代码。
! e2 U- g @5 w1 b/ N7 x0 N% F4 \) s
6 f# r$ E0 j: C$ V7 _- h4 L3 S, }
5 V6 G+ i' _0 e' k- X
* O9 g& Q1 O- B9 f; D8 a% w5 w5 K* m: [/ S' v u1 V2 q, n0 e, i, J1 W) k+ R" j0 h
$ p: {2 \4 f7 B5 W) T* p
点击上图红色方框的加号开始新建代码文件。
7 l; q8 M1 Z6 K0 g. z3 U5 x
3 \ b: P" s5 e X. G
# l" T% l! M+ J7 G) P: Y
+ K6 e( Z2 z% K: B! `/ k/ q
4 U& C$ y: z ?! s+ G' z" _
. ?% [1 }3 p+ `( M$ H5 I# T! P9 d! l. X* L1 i- k
) ~0 b( B0 I2 y
点击next。选择创建文件。
2 e |7 S" N5 r6 K* q' f
1 v. x9 h/ a+ x" Y# C+ d- K
; Z/ v* B! b$ e( [5 l: F: ?
& i" |6 H2 ^2 R* t5 q
/ q2 |" D- B4 Y
! c( E U, J! {& m# v1 v$ a, k, p$ @4 m# H
/ r3 h# ]' d, w: o3 z
比如我们新建顶层文件,名字为key_led。
7 A- Q, D! F& I" H9 C$ B% _
$ {. p' G; _, Z! Y6 |
7 t1 X- Q) I! |4 z' h( s* _4 S% M* e& r4 v& |3 j
! {4 A8 q8 Z) Y5 u6 O4 ?( x7 g( f, Z7 o7 `* O
& w9 A5 R H, G3 h
( c7 h& a5 R2 f% M4 u$ q4 o4 s7 i
% m: }* B5 J. i' W" N# {0 Z
# W+ n& x" i! K6 }8 e点击OK之后开始写代码,代码内容如下:
6 O4 L8 K; b3 e- k X# t+ V {5 |' k3 h1 `0 I' f
5 Q- C8 ?7 K* a: c0 J
: Y' i o+ a! S6 M1 }$ P# V5 o( W' X
8 G9 T! n3 L0 Y% z) K# d+ p接下来是按键控制LED的逻辑,当按键为低电平时,LED灯点亮。代码如下:
! {8 H1 D. D, g7 O @! n
6 F1 R6 ~1 b! J" \+ E8 v+ _
8 e/ _$ `7 S1 k5 }' Z# S* x/ q4 W1 G1 b! C0 c
) @0 w# l% y2 ]* {) V7 n
7 S4 V6 h- |, M, U2 A
两个模块做好之后,我们在顶层文件中例化子模块:
+ C- z9 Z8 c" G! j- [8 p- q6 u6 b" J$ H/ j7 g
/ c, R K* V6 Q% Z: K; N I6 x) [
# {, h# v& j7 c- G* T; o- s$ L. W, |. U3 @4 Q3 W/ ?$ L8 P7 {8 N
) P6 a& m4 J- T& |; L* n逻辑控制写好之后,我们做一下仿真,在仿真中,我们为了快速看到现象,我们将参数修改的小一些。代码如下:
9 Q, e; Q- [; C: Z
, }8 w4 a9 Y( @2 [1 O( ^8 m
8 W* u4 t p2 T& }0 l. X- j% }$ P' V7 Y7 W: q
0 N2 b( X% B. d7 C
: ]. R% z) T0 i3 u- J
仿真波形:
, z' Z% Z$ d8 R& |$ S) v
7 H) ]$ M$ P, Z# l
/ z/ C: N; R' h0 @) b6 ] g5 u9 }4 R/ R' ?" R! o) z( J
9 J$ n$ N$ _% z8 t4 N- l! h) b
; {& ~, U! ?- @) M; uFlag信号等效按键,flag拉低时,LED灯为高电平,此时灯亮。
5 k6 H7 c% s3 d# W
6 b8 U* R" \4 z/ S0 L