Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; ! R' D! V: U/ [
USE ieee.std_logic_1164.all;
/ a" o) _. ^3 F1 O5 y& {USE ieee.std_logic_unsigned.all;
* W0 H: {  x: A+ HENTITY counter_backwards60_seg2 IS
) x2 r1 n; M  N1 F( ^$ N        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
' ^  u) m: L8 x& e; ?5 }$ D3 c                 Ring          : OUT STD_LOGIC;                         
6 o- ~* Z+ d8 G2 |                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
/ D# I1 H/ {* S" w9 C4 Y. B* SEND counter_backwards60_seg2;. r4 Y' T9 L' P
ARCHITECTURE arc OF counter_backwards60_seg2 IS% R0 A* z3 W5 i6 o
BEGIN
& o8 S' S8 {# m. e8 }  PROCESS (Clk); }7 F5 l/ R# u' Z2 R4 J7 j
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);9 O9 v3 f+ Y) p1 C* h4 s' U
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
0 Q# A3 z, R  ]6 u) }  BEGIN
0 _! |- ~5 n: e- {        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";; M  P  ^2 t2 m+ E: J: e
        ELSE IF (Clk'event AND Clk='1') THEN
" U. m. [. a9 ?            IF Load='0' THEN imper1:="0110"; imper0:="0000";                $ ^/ T) F0 p8 p  J# C& J6 Y
            ELSIF Ena='1' THEN
; _9 s9 l: l1 w/ b               IF (imper0="1001" AND imper1="0101")THEN5 a+ J* L" n( Z6 t7 A8 Z) B
                  imper0 :="1000";
; b) M# D( M/ A% T% M9 c               ELSIF imper0 >"0000" THEN imper0 := imper0-1;6 Q% i: G3 r2 g$ K' x
               ELSE imper0:="1001";
4 k) t1 d+ j5 \1 }2 p) W& h                    IF  imper1 >"0000" THEN imper1 := imper1-1;
! @" T) x# m2 l                    ELSE imper1:="0101";                      " u- t! d$ A8 c; W
                    END IF;5 i- ~5 l9 A4 c
               END IF;
! Q; B6 X& \5 ?! x/ n. z1 `            END IF;5 T6 f5 [. @- w! H* k4 E+ p" H
        END IF;+ u1 E' A; s+ Y7 [
     END IF;               ) |* I6 Y" Z# V, R% `
Q0 <= imper0; Q1 <= imper1; - d! p2 d. a3 T+ _" J" {
Ring <= 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 A# {$ i) U! N* K, l6 B8 A   END PROCESS ;
. |3 v% c  H7 J# OEND arc;
; k; ~* q$ A9 V/ e3 R
- D+ T- [; X& A
上面是我的倒數60秒程式
( U  W: D5 {* R# ~8 H( K小弟不才
7 z/ w! d  a4 `0 i- W& |不知道怎寫停止
6 [+ F3 o; h6 f; C" E只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
& B8 H  ~& [8 }2 m8 w要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
. t. I/ e1 [" [8 Q* E, e( Y1 O7 Z除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
* s/ o7 y8 R; y# F2 L" t跑一次的宣告是要放哪一行...?1 q% h3 H9 d, E1 `1 p! \
還有一個問題想請教
6 D5 l/ g1 z3 b9 ]% i8 E/ J就是counter_backwards60_seg2是我的分鐘5 P) y* e( B* W4 y
counter_backwards60_seg是我的秒
, H( M1 ^4 `: r6 A' Z9 J; {現在就是秒那邊 10→9秒的時候Co也會進位
4 }3 w2 g$ s2 h6 [2 O1 z秒的個位數有延遲 所以導致10→9秒的Co會進位
0 j: C' j7 ]( Z' X$ G, v程式分跟秒是依樣的 (Ring就是Co)
$ K% e" M9 k; i. U3 ~& V4 y4 @另外 分鐘怎從60開始3 o# V9 `$ P/ x7 a
因為現在我是00:00開始倒數
; f# P/ F0 ^7 {8 W! n! {, K我需要在counter_backwards60_seg2改哪邊?
9 y% F  v4 Z" e: |# ~) D; [" n! l+ x/ v' L3 [( m1 E
/ ]3 ~; {# ^1 F) @/ I
我奇摩即時通:xt_9000- m! f! a5 Q  f( n5 t  c1 f
希望有好心人幫幫忙
9 M! M( x5 T+ V& v* _懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,  o) r' \5 u  n" r
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答2 m- f! X3 f# r0 x
我想問說0 C4 x4 @! d! }6 ^6 [
怎從"60"開始倒數?4 X5 S: f& O! i
60→59→58→57....→006 |5 I0 x( m' x2 @/ Q; `
因為我弄出來都是
2 v$ ^8 N% E* N( }  D% ^$ _: L* `00→59→58→57....→00
2 u- v/ [1 n" [( a; }2 o/ z+ l! S$ v1 n3 C6 y! _

% L% t) d9 X( h0 ?: t希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。0 `- C1 B: D& ?, K5 c# @; x9 U

) Y$ U8 \# B3 |2 n2 Q  I不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
; P: L2 d  y. \& U# x因為我要做60分鐘倒數
, a, T# g2 [3 x6 O4 z' W; g9 Q0 T所以要60:00 →59:59→59:58
* ]2 B2 X& p+ t我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then1 Q1 @+ X6 m9 e3 S6 _$ N4 Z* E" A: U/ K
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"1 z8 M( R( o5 a0 t# X3 M4 W
我是用Quartus II 電路圖接法: F# e* t6 s) M9 ]+ j3 y* l
60:00(現在是00:00) →59:59→59:584 y9 I8 f/ c$ B2 X$ N) N
9 B4 Q8 a! x: j/ A& K( q' _
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@: }% K9 l3 C& D0 V! j
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
8 I  p6 t! W" s2 n5 f( lUSE ieee.std_logic_1164.all;, Y$ u2 k& {4 \# ^
USE ieee.std_logic_unsigned.all;
0 S" o* c- f( n9 f. [$ i6 bENTITY counter_backwards60_seg2 IS" s' W- F. z( J5 c
        PORT(Clk        : IN  STD_LOGIC;         
6 M4 p3 {9 I1 a% a                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                ! `; @" i+ R* ~: G, q* N- s
END counter_backwards60_seg2;
+ E7 v( f: f) I5 @5 T) \ARCHITECTURE arc OF counter_backwards60_seg2 IS
5 M9 w: g' O7 m) J, W( }7 i$ r; r BEGIN
" g3 k  P3 c& E8 w  V9 K  PROCESS (Clk)
8 v4 `. t' E7 N; f     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
3 w2 i# f: L/ d% |* B% m" S     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
/ p( [" Q2 M; n4 @3 R/ l  BEGIN         
1 [7 R( t3 x. P7 p6 [7 \       ; U; ]1 W8 w* H) S
       IF (Clk'event AND Clk='1') THEN           
# k+ v1 |! q2 b             % i. @. F. \# P) S. h4 k) ~
               IF imper0 >"0000" THEN imper0 := imper0-1;( t& V3 B9 ]$ W/ y, Q; {4 E
               ELSE imper0:="1001";) p4 X8 |8 L2 K
               IF  imper1 >"0000" THEN imper1 := imper1-1;, F$ v: Y- h6 ^9 l0 ~
               ELSE imper1:="0101";
                                 
# ?+ J8 i# M, ~5 O( h% x+ C; s                    END IF;7 a# g3 V8 R: M! z, C
               END IF; 7 a8 d, `4 f2 ~  y
             END IF;  : ~+ M; O& O1 \+ f
         Q0 <= imper0; Q1 <= imper1;  
7 T* K! L1 a  ]& j# u% p# F   END PROCESS ;8 n7 Y" O+ J& R9 F
END arc;( N9 W1 t4 k: C7 U& {  S
以上我精簡了一些 也能跑模擬圖
- ?  M, Z* t/ _! ?. S) `- z  X1 Y但現在重點是我該怎寫60→59→58...
: M+ Z- F, R- P4 h初始值60要怎寫...
. u( o( {- c1 a. T7 q$ C% ]. y是要多2個input 然後給他一開始的值?! D: p: o# k# a: ]/ B. T
但要怎寫啊@@...
1 g+ A2 w7 |; H  q% ?
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"' k9 e( a- k5 ~) g; s/ G" P
但請問 我需要一個另外程式
0 B8 ^( i" m0 t  e; t! B去控制暫停開始和暫停
* `+ t8 P; B7 i, }& ?LIBRARY ieee;
' y) O% c( c# c4 h" T3 P# ^5 ]USE ieee.std_logic_1164.all;. h/ j  w% _+ ~, x/ y9 Z, o" F
USE ieee.std_logic_unsigned.all;* s1 N/ f7 q7 l4 J( w
ENTITY debounce_v IS
9 Q% g3 z) ], X: K3 `        PORT(CLK,PB        : IN  STD_LOGIC;1 C; I2 j8 M- z3 u+ g- {7 y
                 PULSE        : OUT  STD_LOGIC
! z- z5 o+ e, S7 s9 I4 D: X, M                );
$ }( t7 D' A% Q, W2 f) G# E( OEND debounce_v;
1 l0 [3 n2 ^. ]' RARCHITECTURE arc OF debounce_v IS5 s! C5 M! X& ~9 i/ e) B2 g2 E
SIGNAL imper : STD_LOGIC;' X; `, o( E8 J: @
BEGIN
! B1 G+ R9 M1 W! F5 L- E; Y  PROCESS (CLK)
. N% f' a7 T6 [8 L     VARIABLE counter : integer range 0 to 49;
0 o% q. z* Z; o( x- R7 p% a4 X  BEGIN, j& H1 a6 H# f1 j" V
   IF (CLK'event AND CLK='1') THEN" W) a$ Z  I% _0 g# {& M# c8 T
          IF counter = "1" and (PB = '1') THEN imper <= '1';0 N/ m6 j' S9 t% e7 \! G7 r1 P2 m
      ELSE counter := counter-1; imper <= '0';$ J' W. g. A# T
      END IF; + f1 T1 G% M- W5 {- X. x8 w% `
   END IF;
; q. R/ C+ |0 z3 K6 H: Y         PULSE <= imper;   
) E6 i1 `. h* @+ u/ x8 _   END PROCESS ;: z% `1 f9 F( c4 j
END arc;$ {* M" T2 I* F. I. o* |  M

$ d  n/ u+ ^# u/ g1 U: a' g& L& [這是按一次減一次
) y( s) `* @" R8 q# J: ]  Z  Q, L想要按一下開始 按一下暫停# B$ H3 a4 p; e" v# Z
7 Q; }2 @" X! ?# I5 K& \4 R
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。# J' m% ]+ D9 g+ f
7 g) W1 ?' K0 r; f
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
+ o2 d. |5 z" B5 C" C8 @9 r. u+ M5 A有需要暫存器??
- Q2 d1 y2 }2 [* A! F* ^) f1 c1 P那是震盪器→先接到開關→接到暫存器→計數器: e6 c5 @, Q+ a' |; p4 O/ w2 k4 c- X
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)9 u0 P! @6 H' z) i! `& c
     VARIABLE counter : integer range 0 to 49;; a) k6 P7 {  \
  BEGIN8 X9 s/ e1 O, [$ j0 k
   IF (CLK'event AND CLK='1') THEN
9 C4 [# g; i) Q) U. v% i0 d          IF counter = "1" and (PB = '1') THEN imper <= '1';
" W5 i9 W- a" ~4 a" w- \      ELSE counter := counter-1; imper <= '0';
! y( l# N4 {) Q% S      END IF; + w3 m4 W+ e4 \! d" r
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
5 Y# ^+ G- @  U0 N; |6 g4 e/ a     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數; f( T) \! F: N$ Q8 _& U
  BEGIN                  
4 c) _0 K6 P0 F7 _& g9 }   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
) a, m  x6 w: @7 |& g4 M+ J2 n          IF counter = "1" and (PB = '1') THEN imper <= '1';  . E& ~; G& s5 [( F, g
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為12 i0 H- ^0 @  f
& i! ~% V' |; k6 ?; y, B& o
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
: a) `- I2 |+ y% c7 i  w: K# ~' {7 o      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
+ K# f. c/ v! i  V- L: E. s6 ]9 e6 X" K& g3 t0 B
按鍵開關 第一次 on時,開始計時。4 C' O% X! E1 J) L& m
                 第二次 on時,停止計時。: A5 h- T# k6 u2 S5 i  g
                 第三次 on時,開始計時。# M( N6 Z, N& `0 W
* K# K: W0 j# g6 [& I; g4 l
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?* R" O9 j1 t# ^) o# Z9 T1 l, [
平行輸入 / 平行輸出
! ]: @- r3 V7 C! ?7 {( Q4 d平行輸入 / 串列輸出
& R' Z' }# K0 s! `串列輸入 / 平行輸出+ S$ Y: _  h- j' h4 ?$ P8 L' H
串列輸入 / 串列輸出
- X2 Q1 Y$ f4 r" _哪一個啊@@...- \! F  @, l$ U, {8 Q
我都是看書自己學
3 @/ V+ O5 i; R% d  g2 D3 c所以都不會咩
. {+ I, w" b! d拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!  l9 I6 p* ?+ ?& @
今天問老師  2 X1 W: D" b, V' C
可是老師沒說到暫存器的東西& [& o: _! U, `
反而是說
" K7 g3 {! k8 VIF CLK'event AND CLK='1+ Z+ Y& Y& J% L- b7 e' ~+ b0 `/ W" u
counter := counter + 1 ; + T2 c- {# q8 V# d1 x4 Q

0 w1 w! q4 m8 l5 G抓counter (0)   ----第一個腳位?!
& `$ c% e) G1 t5 i+ h給counter位元多一點之類的2 t+ _& t& G7 [/ A8 H- w

, ?2 X; n  ^, H0 [+ Z00  01   10   11
( S! B3 {6 q7 ~最後腳位為0   ----Run
8 ]2 X1 G# h! {6 ?6 z: I" I' z最後腳位為1   ----Stop  W  w! x$ E3 c1 _+ A" `
* W* X8 `1 X" h" D- l- A* u  @
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。7 l& B" u0 \( `* x2 n, D1 t( u
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
1 Q+ z7 R% E6 {# r3 u" T跟你說原理你又不去想,要用你懂的畫圖的我又不會,
2 z; m! {& t& M8 |1 x% T" G2 I! ~難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-3 02:43 AM , Processed in 0.150519 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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