Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 13454|回復: 21
打印 上一主題 下一主題

[問題求助] 請問倒數00就停怎寫?

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; . E. J1 w0 e. D, G' I0 v& |
USE ieee.std_logic_1164.all;6 B( k% z  h* f% D
USE ieee.std_logic_unsigned.all;
4 R. a* L  n- i) S, P7 f$ tENTITY counter_backwards60_seg2 IS
; U+ v2 }, ]! Q        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;# {) o2 _( L2 c! k/ }
                 Ring          : OUT STD_LOGIC;                         
$ Z: L( G" g4 `9 s# f: s. M                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
/ C3 v4 V+ B+ D/ g6 A: zEND counter_backwards60_seg2;6 F! O# |* q+ X
ARCHITECTURE arc OF counter_backwards60_seg2 IS
( A4 E# t. k: V7 U9 z- [9 r BEGIN
: }3 N; c7 g- a& K' a" \' C; v$ Y9 i  PROCESS (Clk)8 G/ h# b. v6 p. g  Q& i
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);0 q9 F  Y, K5 z% j, B
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
8 ~+ `- D4 `( K) `1 C% \5 `3 u  BEGIN/ k, t1 |" o" D, I
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";7 t% I4 `; s- M
        ELSE IF (Clk'event AND Clk='1') THEN
* O2 z0 D$ k5 r            IF Load='0' THEN imper1:="0110"; imper0:="0000";                / ?6 `- l& K( A* D7 I5 P
            ELSIF Ena='1' THEN
" `0 N0 U( X% }. f+ S               IF (imper0="1001" AND imper1="0101")THEN
+ b. p* Q; _' I                  imper0 :="1000";
/ X5 N2 Y, X8 D) |; o; [               ELSIF imper0 >"0000" THEN imper0 := imper0-1;! ?! L8 w+ K; q" \
               ELSE imper0:="1001";
9 a/ E3 C8 O3 y/ s# c* w/ E                    IF  imper1 >"0000" THEN imper1 := imper1-1;% C2 d$ R4 n. y3 R6 i8 C3 Z* V  N
                    ELSE imper1:="0101";                     
8 N' U) @8 O9 r* \                    END IF;
+ {# F& f4 c" x8 c               END IF;
8 n% Z( j. e  i' i% R+ @+ t* t            END IF;
8 N- Z, r- h- W3 X9 w( D6 S        END IF;5 [( X4 q/ M' x( o$ i2 }3 s+ C
     END IF;               
( W1 @( X' _" C3 OQ0 <= imper0; Q1 <= imper1;
* c3 _( |) T! WRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
% _0 `# K9 i: ^: X   END PROCESS ;
* F* @& N+ T5 S- ~END arc;

2 K' X" q2 |; P8 R6 u( t8 e7 q- _0 `" }; W
上面是我的倒數60秒程式
- ^1 U. u; l6 Z小弟不才. _- |3 N- z2 z9 Q! j
不知道怎寫停止
# H4 l8 s- v' k! K只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
/ j" D8 m1 S, P+ T7 K6 @要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,* W0 }  b: n5 R
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII" p4 d. ^( ^1 j& f: f* G& ~( k) W
跑一次的宣告是要放哪一行...?
1 n9 U- r, D. y還有一個問題想請教& q" L* k) I8 G  v) h
就是counter_backwards60_seg2是我的分鐘
1 f1 s' o' i. ?, ~' e: xcounter_backwards60_seg是我的秒
7 j2 W) U8 D' j1 ]* f& {. R現在就是秒那邊 10→9秒的時候Co也會進位8 l8 _- l/ Q, w* i
秒的個位數有延遲 所以導致10→9秒的Co會進位
, k! V$ p. e. ~% W/ D) `1 _' f* b程式分跟秒是依樣的 (Ring就是Co)
( q1 X' }5 @2 R. L另外 分鐘怎從60開始4 {& Q. f+ ]- `; Z4 U( Q
因為現在我是00:00開始倒數4 f8 ?9 v. p. O3 g7 U
我需要在counter_backwards60_seg2改哪邊?- m) D% \1 |1 _9 f2 Y! h

. M& P% |5 Q- L; f4 Z. z: A6 k* T3 T5 k3 I0 L
我奇摩即時通:xt_90009 u' R6 Y6 z' a* P: X" \4 F9 [
希望有好心人幫幫忙7 B7 G4 U; r2 b4 B5 S
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
+ Q$ Z0 ]8 I2 D4 S# `8 D看有沒有用可以參考一下。

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
: J* t  m2 J/ P( I- E/ r% x$ l: A我想問說  [. H* o5 D9 U- W
怎從"60"開始倒數?+ }" j6 H# d* ]
60→59→58→57....→00
( Z# G6 K! u1 t" S" }$ ?! e因為我弄出來都是4 ]5 u: M7 p' v" C3 l$ J1 s
00→59→58→57....→00, m% }/ a) ]; n# w# h% J; @/ n

+ P5 T6 @% p2 q1 _# X% s2 ~7 T* _5 U. c4 u# _8 C- ]; S; H) w' N
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。. y7 u' x; h2 E9 {9 R

+ y/ r, k0 u) s& T不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦) a- A: O  K. R' k
因為我要做60分鐘倒數
9 t9 F. u/ }% R8 U所以要60:00 →59:59→59:58
2 X* |# L* J1 S% X4 [  h我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
* k- @9 l5 |% b5 o, p  v     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"6 X! G* z% b; x- u
我是用Quartus II 電路圖接法
0 t* E& N7 T% C0 f: r60:00(現在是00:00) →59:59→59:58
) `4 }2 s% H% |" }& [: l% j4 `6 o$ l2 S: h/ P- ^# q
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
, B+ ?; b$ a: U1 y小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
) w/ M. r% F, H9 lUSE ieee.std_logic_1164.all;
: L! C* {0 f! U- c! D1 l! M; xUSE ieee.std_logic_unsigned.all;
( f1 c* c! d: ?3 L- j/ KENTITY counter_backwards60_seg2 IS/ s# N' {9 H1 a% s9 F
        PORT(Clk        : IN  STD_LOGIC;         
1 |" m$ Y( B# D- o7 G$ T, S                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
8 a( q# i. A6 J) u/ ^. dEND counter_backwards60_seg2;
: c7 j1 k# A$ X: W/ A4 MARCHITECTURE arc OF counter_backwards60_seg2 IS
! e. w6 o) M* j BEGIN
/ q4 b: }& c% o  PROCESS (Clk)
3 i( G' E! F' G     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
* a' t, y- |* _; H     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
) {  L. z! R/ N. p* {( S  BEGIN          3 ?& h4 V3 i# n2 X4 a! `8 O. H
       
, U% @3 @( r7 r( s, D       IF (Clk'event AND Clk='1') THEN           
8 g6 o- O1 [9 i- s% S: I8 z3 o; X( E            
( ?- s6 S6 C9 D1 C  J8 P/ [               IF imper0 >"0000" THEN imper0 := imper0-1;
/ _/ o6 ]' \# d6 h; p               ELSE imper0:="1001";2 H8 t, }6 P2 T0 J+ T& p9 C7 }2 @  J
               IF  imper1 >"0000" THEN imper1 := imper1-1;" k$ m; D! F7 B; Z1 `! u6 ^. `
               ELSE imper1:="0101";
                                 
) l* M, M% w" Y; u( M( n) E                    END IF;
3 Z! d7 b6 U3 U% U( V1 p5 s               END IF; 7 }9 M* P9 C5 q  I
             END IF;  
0 Q2 z, a2 h3 }, E( K3 l; H( W         Q0 <= imper0; Q1 <= imper1;  2 [, s$ f* S( [5 \' i  N0 r
   END PROCESS ;" \7 Z2 w. K0 u6 l; h8 X
END arc;
' @6 F) c1 l+ L( E- y以上我精簡了一些 也能跑模擬圖$ \; c7 E( }+ M8 Q  ?" h5 R1 x
但現在重點是我該怎寫60→59→58...
5 N+ `0 Y% j- J* X初始值60要怎寫...1 ?# W& _% ~, M3 M. b6 c2 d, F, @, |
是要多2個input 然後給他一開始的值?# ?/ f+ l# \/ D" j4 r/ K
但要怎寫啊@@...4 ?! K- S7 O  K, E$ Q, J9 g
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
) J- m( D; @* v但請問 我需要一個另外程式: H% p7 M' V0 |7 k
去控制暫停開始和暫停
) L. @, X( R; @" B0 nLIBRARY ieee; ; |5 s4 O5 L! c1 W) F% f+ o
USE ieee.std_logic_1164.all;
/ N0 B$ a1 {1 c4 NUSE ieee.std_logic_unsigned.all;
. y: U5 `9 Y' b6 P* yENTITY debounce_v IS0 p7 |: e$ d5 f" ^- Y
        PORT(CLK,PB        : IN  STD_LOGIC;8 o: J" b' I6 p, F8 K. ]4 G
                 PULSE        : OUT  STD_LOGIC 7 ]4 T9 Q+ X* f! Y7 ^
                );" b% b& L% X* H1 w5 l/ D! L) O
END debounce_v;
* n" Q) i7 N6 m8 v+ f9 W5 VARCHITECTURE arc OF debounce_v IS6 R  l$ u8 ]8 G7 P& V* C) _
SIGNAL imper : STD_LOGIC;
# ?( z( L* L+ t, J9 L: `- F) r+ T BEGIN
: P, M& H- ]& P4 }$ H. q( q/ N  PROCESS (CLK)
# k8 s  D+ R' I6 ^! {% K     VARIABLE counter : integer range 0 to 49;) ]4 R; a/ ^0 X* Z
  BEGIN# d) D; ^4 `. m
   IF (CLK'event AND CLK='1') THEN5 |( ]$ _) i1 K+ s. |2 y
          IF counter = "1" and (PB = '1') THEN imper <= '1';& a8 X. f# N. g% n8 [6 i0 \
      ELSE counter := counter-1; imper <= '0';# T* y2 }; b$ f7 a# ]( l3 U
      END IF;
: ^8 F- U$ U, i" @; c3 T/ {   END IF;
8 v, q4 I% ?1 R5 j. q         PULSE <= imper;   
) k! K9 K8 V! W   END PROCESS ;6 P/ P9 S( M4 }- e1 {. b  }
END arc;
* Z) f% u' h6 g+ S6 U9 e
! m1 d5 u2 w2 h) Y5 b5 [這是按一次減一次
. X8 _3 m$ ^# C( B6 w想要按一下開始 按一下暫停
) x$ C2 U1 ^8 D0 Q$ k  c. F5 p. Q3 s
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。, J" N3 P6 L1 r, H& m: J0 l! P

! X3 \9 G3 j( e+ d你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
7 T/ h$ Q9 ]" \+ X5 ~8 {有需要暫存器??
1 K; B' j  m- I- y那是震盪器→先接到開關→接到暫存器→計數器6 d5 i: w- _5 _$ ]9 L
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
' D1 c/ q, R6 l1 |$ u     VARIABLE counter : integer range 0 to 49;
" y! _) {% }$ F  BEGIN8 \. ?2 V( y, c7 m' P
   IF (CLK'event AND CLK='1') THEN
( b' `- a# V# P; H+ z          IF counter = "1" and (PB = '1') THEN imper <= '1';
4 f$ Q! |) R  T' T  X      ELSE counter := counter-1; imper <= '0';
% {) l! ^" K) V0 q6 E9 }      END IF; , g; \8 v* V, ]- E1 {8 A' {. L
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作, H& @- z3 d7 f, W4 D- \
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
3 [$ J) l* E- r. _  BEGIN                  
6 n3 l: z* G$ A   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
6 r; o" H) _0 o# p0 u          IF counter = "1" and (PB = '1') THEN imper <= '1';  0 W* z8 t2 q0 h6 M
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為15 |3 [, k" o2 J: B# M5 q
2 i0 o1 E4 l( ~' Q( F
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0( b- L7 ]; Y. A9 r
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
# q9 |9 y" \8 ?9 [) Q
/ {: ]3 }9 M, ~$ _+ f( C! i" L& o- y按鍵開關 第一次 on時,開始計時。9 h$ _. j: C" y4 z
                 第二次 on時,停止計時。; @0 P2 [( @. Z% u
                 第三次 on時,開始計時。
3 m. w9 r7 l. A! z- F8 y3 `7 K% \4 z& m  n# s
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
! T5 m( C" P. z" \, G9 W平行輸入 / 平行輸出2 l0 W/ w) v# r$ r5 a4 _+ M4 `! ?
平行輸入 / 串列輸出
+ K8 @/ \0 v- n串列輸入 / 平行輸出1 K! t9 W$ i- r* ?' T. d+ C
串列輸入 / 串列輸出* r1 [7 x+ f) d6 P
哪一個啊@@...& ?9 g4 M# T$ x  ?6 T
我都是看書自己學. Y* X7 E7 H0 U. c5 I9 D
所以都不會咩" _. j+ T6 |1 X# D* k
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!. D) k+ q7 A. W
今天問老師  
/ W! H- E! F" c4 Q8 o! i可是老師沒說到暫存器的東西
+ H4 b, W4 U1 ?6 D1 s9 c反而是說 6 P) V7 M( J5 y% Q  w
IF CLK'event AND CLK='1
3 {- P( ~* n; F' H# _% F" gcounter := counter + 1 ; 8 i+ D/ x  Y! K+ x, o
9 w5 ~" d! ], }6 b, h
抓counter (0)   ----第一個腳位?!! q  o! R' |6 m7 C
給counter位元多一點之類的# C$ `! w, `5 H; D

' w# o6 h' {: l8 P7 M' B4 \00  01   10   11
) I' r* x) M' Z3 R3 K最後腳位為0   ----Run" J, g5 f1 n5 F' @6 Y: J$ L
最後腳位為1   ----Stop
/ H. x. ?; ]' Q. g8 |- t3 ~3 a& u6 v9 a+ A# N5 e7 s
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。" e  P! T; j* u1 s) p
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
) t& _$ S) _! I跟你說原理你又不去想,要用你懂的畫圖的我又不會,
) u9 B0 _0 I% @' [0 H. i2 ~5 i6 e( B難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2024-6-8 04:45 AM , Processed in 0.164521 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表