|
看了你的Code...需要改進的地方很多3 a! H$ c+ |3 E4 I& G5 g
(1)coding style0 q/ O& Z5 N0 U6 p
如其他大大所說...難閱讀8 Y! x1 l$ H* U5 `9 g
另外...那麼多 if-then-else) h/ @8 S7 `1 D
難怪邏輯大
& p0 C3 o& {% w7 }# S, K) y8 Y }, W+ T, l4 d$ }1 j$ R
(2)問題思考方式% N' e, m# |$ r! F
請試著用硬體思考, u* {/ i( Q% c2 k
請試著把問題切分成數個部份,再思考組合.往往邏輯反而小; D, ]# T( P- M
嘗試把所有問題都畫成一個大FSM,不見的好
7 M( |2 X0 I7 a* ^) y Ex:分成
* _) l* A+ D5 |(A)Switch debounce (不確定你需不需要)
, x4 k4 G5 ^ j1 {) h(B)Switch 轉成內部意義: mode, inc, dec,...
0 {- V2 G7 G/ b; G* Y& z5 a 還要考慮SW4的3~5秒...) @: p! s; I9 P4 O& s
(C)內部counter依照 inc/dece 改變counter 值
v0 Y$ P' Q J/ A(D)counter值轉成 7-segment display" `: M0 M) c/ u0 ?) X
(E)free run timer: 為了 SW4的3~5秒,還有display閃爍
- {- `8 B! \: R5 J 例如: M級ripple counter, 第N級拉出約一秒,第N+2級拉出約4秒
% r1 @$ ?. _# _, m, z' K7 J5 K- e0 W
* k" n5 Z! C+ }& f8 D也就是這個問題,分成五個部份的電路,
5 x# m3 S/ ^- g$ _, k5 x或者思考的時候是五個部份
! M2 s" u* q$ p3 G0 L然後再去coding再一個entity之內 |
|