Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; # a% m4 M6 U/ m9 W5 G* v
USE ieee.std_logic_1164.all;0 e) ^- s' \' M  x" b; V* W# y* t
USE ieee.std_logic_unsigned.all;
) D+ h* i7 d7 K3 EENTITY counter_backwards60_seg2 IS
6 @; p; M5 S2 x0 H. @5 u        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
: E- Y6 ], ~$ b2 v- R                 Ring          : OUT STD_LOGIC;                         
8 j# L, ]6 d! V" Q                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        4 R4 k* {/ w1 y2 t/ F
END counter_backwards60_seg2;+ J$ _, a0 w; M. U# v2 Y, k
ARCHITECTURE arc OF counter_backwards60_seg2 IS
; P& X" }3 k# o# o, L BEGIN# V9 L; C9 C# [( m. \# g; y3 o
  PROCESS (Clk)
0 w8 ]8 ~8 g+ T) S% T8 [     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
: E* b/ c7 ^% @( k) p: m% d4 y' N     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);! ~0 v# v. G8 u) n0 V; G, H8 C
  BEGIN! e% T6 z: ~8 d: @  [, Y
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";; }" n. G! J" E$ L4 r# m# v
        ELSE IF (Clk'event AND Clk='1') THEN ' Z! o. w4 C2 I
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
7 c7 `6 q3 \& u& b2 W9 _- P2 S1 J# l            ELSIF Ena='1' THEN. q1 F/ ?8 G; \2 U* u
               IF (imper0="1001" AND imper1="0101")THEN+ M1 [* k0 K) m- ~2 t
                  imper0 :="1000"; ' E, e4 |  N8 k! D+ E  l9 F" I
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
2 a$ ~% {( G/ j- y               ELSE imper0:="1001";
% G: O# ]$ G" ]8 J% V9 ~                    IF  imper1 >"0000" THEN imper1 := imper1-1;
/ o5 \& \7 U3 N: n& k                    ELSE imper1:="0101";                      0 E1 v: ^% g9 G) `0 B
                    END IF;
( c9 K# i  _; g               END IF; 5 H. c2 h; o! n$ Z' j) d% Z
            END IF;
9 b9 y- ]7 Q# i! N$ ^  q        END IF;6 j. C: D; ?; ]  R* x
     END IF;               
/ I. e% U. I1 Y( D: u9 _! dQ0 <= imper0; Q1 <= imper1;
0 P! O4 y. r/ W) k# j. m7 SRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
5 K( H! j7 K- V: V1 M   END PROCESS ;) G# v6 c* @6 z7 x/ y6 f
END arc;

0 g/ D& D4 }8 V. D% a& @% |" L  `6 f. k7 T. K6 E" T
上面是我的倒數60秒程式
3 [' ^9 T, ?( U- p8 P; c小弟不才
( f: M: K, `" c$ g9 B# Q不知道怎寫停止
3 T; N- A; e6 W4 a' }; m0 E* D( _3 e: J只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
! t$ T! \$ Z5 b1 F1 o- Y9 \$ J要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,7 |6 p# V# b3 D2 s/ ~; y" S
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
6 {# t* |. [6 |2 I) c跑一次的宣告是要放哪一行...?
3 ?6 o/ O) H; {8 p% a還有一個問題想請教
7 H3 z9 V; f' g7 L, r6 t就是counter_backwards60_seg2是我的分鐘
& p' w8 ]. k+ c2 `counter_backwards60_seg是我的秒/ }/ X; q; h5 H
現在就是秒那邊 10→9秒的時候Co也會進位
" O6 X; m( g4 \& ]' C0 y秒的個位數有延遲 所以導致10→9秒的Co會進位
! B! `& @6 |: F程式分跟秒是依樣的 (Ring就是Co), }' N$ n6 _' W; L# P
另外 分鐘怎從60開始$ A2 {6 n& Q4 v' ]. f0 k5 l' f
因為現在我是00:00開始倒數
. v5 J& b( P* \. S: Z4 e& m我需要在counter_backwards60_seg2改哪邊?
8 K- v+ @* I* ~% C+ i- V! {; K+ K3 i! y

; C, D: v6 x! \  E; u我奇摩即時通:xt_90009 q1 [0 m' E4 I5 U& }7 z+ \
希望有好心人幫幫忙
: s+ T/ n2 X/ Y6 J; K懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
5 e" Z: Q0 l8 F$ r" y: l看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答- [, Z- C3 r/ g2 x. R
我想問說$ @* D( o& c" \
怎從"60"開始倒數?
% x: k+ p2 _: c8 o( K  p! V60→59→58→57....→00
) ~$ Q/ l8 ?1 M# u9 r因為我弄出來都是% ^5 |& G- _2 e6 m, k
00→59→58→57....→000 _% |5 y2 A2 q+ ^8 w" u
9 ^- M8 h; P8 h  B4 ?
) G& J8 ^* L& k1 o+ K
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。, b: [, Z+ `* q9 f! D
0 D6 h, _6 v3 R0 K
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦. _3 z# Y# B! E' y) t! N, a% e3 z0 w
因為我要做60分鐘倒數
$ |" t$ _$ K1 O4 O2 y' Z4 x所以要60:00 →59:59→59:58
" Z5 D8 e0 V9 Q; o, g- n% L我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
" j% i% |3 Q, ^) }4 z     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"" c4 x9 T& C' N# r7 f3 m
我是用Quartus II 電路圖接法1 y+ c0 I! Y6 H6 z' d% a5 q
60:00(現在是00:00) →59:59→59:58" O+ P  F$ D8 S( W
0 [' l& X/ _: X* J/ s$ d# S! M/ |' @
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
5 F' R" k3 c" \2 J% E小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
9 N& h/ a& N+ N+ kUSE ieee.std_logic_1164.all;) s8 M+ i, p9 D* Z
USE ieee.std_logic_unsigned.all;
2 f( V& u: ]4 n0 U+ i* b4 Y% ~- OENTITY counter_backwards60_seg2 IS
; f+ [$ z3 Q6 h9 o7 |3 t* p" {        PORT(Clk        : IN  STD_LOGIC;         , _+ y; K" K  N
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                1 I  X2 o" c- u2 ]# f8 @2 W
END counter_backwards60_seg2;
" n% _  y) K& U9 V/ \5 PARCHITECTURE arc OF counter_backwards60_seg2 IS* Y8 j( \3 ^- t$ h9 i( R
BEGIN
' \+ C* F2 d9 M  PROCESS (Clk)" |4 q/ D% B: F/ e% S, Z! E
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);6 u4 s8 z  s, Q) Q- B$ W
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
( q0 x$ j7 F* N! V* u  BEGIN          : v/ f  e2 ~- u0 I% o5 u$ L5 l/ ^
       + y  j( I4 q( ?; D: o
       IF (Clk'event AND Clk='1') THEN           . o, ?7 G6 x: f3 I* l& p# C9 m
            
, |& y  @% j* J# V4 x5 ^/ A               IF imper0 >"0000" THEN imper0 := imper0-1;
) \/ d( c/ N1 ?: Y9 ~9 s7 _: A0 t               ELSE imper0:="1001";
( q5 @' a! `( W! u; E8 I               IF  imper1 >"0000" THEN imper1 := imper1-1;
, p4 u- |  G: o- d7 B               ELSE imper1:="0101";
                                 
2 B* M) f( H2 E3 X                    END IF;8 U2 g" d# R6 t: l' u
               END IF; ) h7 D. O4 Z8 }4 C+ N
             END IF;  / z& J: r' ^. O2 r
         Q0 <= imper0; Q1 <= imper1;  
. j+ B" p$ v: A) s$ G8 F; K" Y; e   END PROCESS ;
2 h. }9 l* ^. m5 t3 @3 z! t$ XEND arc;2 I$ X/ H6 g& c
以上我精簡了一些 也能跑模擬圖' ^, Z* e/ F) X: X
但現在重點是我該怎寫60→59→58...
: g+ a2 B$ P1 c! [% R7 z+ y初始值60要怎寫...$ n+ b: S* t- f/ F) v
是要多2個input 然後給他一開始的值?
; I6 w1 \- _- U8 Q. Z但要怎寫啊@@...% O' s8 g: Y) v7 y7 S' ?
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"  w1 m' f0 C) B/ L; P, o, }) T
但請問 我需要一個另外程式7 W% w6 g6 O8 r( W6 U
去控制暫停開始和暫停' \: j1 f5 ~3 o
LIBRARY ieee; - @4 T/ ~1 U- S2 G: O& k5 Q9 j& O
USE ieee.std_logic_1164.all;: V- ^3 `5 a5 h9 |3 m9 ]
USE ieee.std_logic_unsigned.all;
1 Y8 i6 l/ w1 C* a+ y" Z0 ^: ZENTITY debounce_v IS
4 {4 a  J7 `$ Y* M! R3 O; |        PORT(CLK,PB        : IN  STD_LOGIC;' I4 w1 j9 R' [' p
                 PULSE        : OUT  STD_LOGIC
1 ~, M$ K$ u* q& ?& z- Q; k# q" w( w                );
8 v8 {# ?7 {* N$ Q2 ]END debounce_v;
- i4 e$ A$ c! Q8 S& X5 U1 C) DARCHITECTURE arc OF debounce_v IS$ J% a; P, @; h4 H- o6 C
SIGNAL imper : STD_LOGIC;% P8 I7 q  Q9 W2 I0 J
BEGIN
) C6 k* C* q3 z$ G5 f  PROCESS (CLK)
5 s) C5 H! q- K  \4 ]     VARIABLE counter : integer range 0 to 49;" w* F% v8 x/ [8 U0 ~  g+ e1 c
  BEGIN
# Y/ S- K, o- A+ T- j   IF (CLK'event AND CLK='1') THEN
& O% T) E8 O! O5 Q2 G1 t7 t          IF counter = "1" and (PB = '1') THEN imper <= '1';
% ]0 [# u8 T/ I/ r* q0 I$ N( E4 ?9 [      ELSE counter := counter-1; imper <= '0';
" }! q8 G& e/ Z# _. D% Z% V      END IF; . ]$ U# q" F& ~! s0 `) c1 ?$ a
   END IF;
6 @; f0 B! w( l         PULSE <= imper;   " k* I9 q; V; }
   END PROCESS ;
* w3 @7 H( N, N0 u; H  A  }END arc;5 n2 }  }5 s- L

, r* ~, K+ f( B& W! i4 E. U4 O這是按一次減一次/ R$ P- ?) I: {+ e- U0 Y
想要按一下開始 按一下暫停
, P1 b* x- j& K1 D3 _, O3 M) d5 X* r+ |3 z2 q
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
9 X$ e( ~  b1 w; n' y/ r# U
- s$ o9 n5 x5 }  B  q你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"5 Y) ]$ D3 W/ @4 X) g9 V
有需要暫存器??3 [7 B% N; k$ y( ~
那是震盪器→先接到開關→接到暫存器→計數器: ?" t2 A" D8 a  ?4 a1 O/ m/ z; }
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)1 J- N* A7 A6 M3 E
     VARIABLE counter : integer range 0 to 49;
* a  ?% E; }% x  BEGIN9 v- ]; V8 z% B9 p2 j
   IF (CLK'event AND CLK='1') THEN
  u& @( n" b( s3 O          IF counter = "1" and (PB = '1') THEN imper <= '1';3 t$ V7 |) q9 L, X1 t3 w6 }
      ELSE counter := counter-1; imper <= '0';
9 Q( C- j: i: X- ?" U. n3 g      END IF;
: |% E8 I! T/ [, U: j8 T能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
" P; D4 _: {/ Y% ^& K# C/ M     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數# {2 k( V: W0 k; x1 E% O2 Y) a
  BEGIN                  
- W& ?4 R/ B/ p% Q# K  {   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發) S" u" }. Y5 H' T  j1 w; x
          IF counter = "1" and (PB = '1') THEN imper <= '1';  & G8 Z! T6 K1 X
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
/ U+ d% q: |, R; Z& D( f : T% b( P: N- e
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0' q9 K. N9 C6 E# T# A9 ~
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
. o) s  q$ F. L* R
( w+ d) p& w8 |按鍵開關 第一次 on時,開始計時。
( P* m6 ]0 z' P                 第二次 on時,停止計時。
# L! E, e# c, u7 R- p+ V1 Y6 Q2 Y                 第三次 on時,開始計時。- ^! E* S1 o7 l$ Q& ~+ T+ d6 w
6 z! V  S9 b9 D( x/ Y' T7 y* M
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?, [* _' _0 W$ M/ K7 S
平行輸入 / 平行輸出
. S! z( n, y6 Y& v* d: ^$ e平行輸入 / 串列輸出5 ]7 q7 Y$ J% L9 @- B% K; X$ X
串列輸入 / 平行輸出7 A7 W+ F  m1 T  o, t* `
串列輸入 / 串列輸出) m) t; ^+ h- S" V" _% u
哪一個啊@@...' G9 j0 @2 e3 d
我都是看書自己學4 k$ F7 v+ X( f* V9 c- ~/ S0 i
所以都不會咩" g/ X' W( ^- H
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!/ J0 U2 N$ @' m- t) n: ~
今天問老師  
0 H/ [* \0 \- ]" W! m- `/ M可是老師沒說到暫存器的東西
& V& [/ p+ V: f5 h- O反而是說 $ E) @; ^8 Y0 P/ h! m
IF CLK'event AND CLK='14 I' R" ~5 D$ |1 F$ L! z6 Y
counter := counter + 1 ; * M' h! t. a, N- Y6 c0 _' P

. w. G4 x" A  C抓counter (0)   ----第一個腳位?!# T/ w' z' z- I$ l' d
給counter位元多一點之類的: p- R  W; S  }+ Q) C+ r! @1 N

2 L: |' j- B% v+ I( ~00  01   10   11
. T6 ~! c% W& A: Y4 _# a$ I2 A# k最後腳位為0   ----Run$ C/ a  E+ H$ e" t1 D) I: ]6 {" `3 U
最後腳位為1   ----Stop
8 M" Z- L" l; Q! ~0 L' B4 C$ l* [& g
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
) j0 R# x  y. ?至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,5 p) q) Z0 P) I
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
) t/ d' [4 Q6 D: \+ c難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 06:00 PM , Processed in 0.307039 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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