Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; % z6 |. d- [4 `" X/ e% K2 j# C* \4 x
USE ieee.std_logic_1164.all;5 U- E2 }% V3 ^1 C
USE ieee.std_logic_unsigned.all;
. |! |  F5 B2 ?& ^# sENTITY counter_backwards60_seg2 IS4 W3 e. Q5 _/ a8 N% U
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
) V9 D- R+ v" Z$ u( z% A/ l4 z                 Ring          : OUT STD_LOGIC;                         1 [/ Q! a$ O2 K1 n$ p6 N
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        % b9 }  d. Q+ s9 r
END counter_backwards60_seg2;
2 p1 Y, r7 ?4 c  }ARCHITECTURE arc OF counter_backwards60_seg2 IS
1 Y( G% v: N4 N5 e+ G7 _ BEGIN4 H" Q! f4 v' q/ C
  PROCESS (Clk)
4 P' e- I4 K/ M) g) q6 W     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
" L  t; }" o% T' z6 d2 b2 Y     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
  w( o" r3 c8 i2 D( p# ~  BEGIN
3 a2 K' f+ p0 `6 a, x; r        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";. v% n; K2 ?5 g& x) j+ o
        ELSE IF (Clk'event AND Clk='1') THEN * g+ C6 a9 K+ K9 u
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                - }: D3 s+ Y4 {' A
            ELSIF Ena='1' THEN
1 w5 C* Z: C4 _7 t3 G6 k               IF (imper0="1001" AND imper1="0101")THEN
1 Z) c/ z- z& D3 m                  imper0 :="1000"; * _" U  T4 x* _% V
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
4 ]1 w, `# A- f7 p4 }               ELSE imper0:="1001";+ H; m; J( X- Y, W0 ^; |5 l
                    IF  imper1 >"0000" THEN imper1 := imper1-1;3 o& F8 c' h0 Z) x  ]  Q5 H
                    ELSE imper1:="0101";                     
) ~( W1 `% ~! ^& @                    END IF;7 x2 s/ \4 x; G# v3 B
               END IF;
9 Y8 M( ?( X# @  L            END IF;( w* E; K  C  f, P8 l) M& r6 y
        END IF;. C: q# U: ?/ u0 M
     END IF;               
2 I# H, f- \  r* g% H3 ?$ XQ0 <= imper0; Q1 <= imper1;
* D3 ]6 L6 |! T7 i) u% w- rRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
2 q5 k* y2 L$ H; ]. e   END PROCESS ;
1 c$ w8 Z- E8 ]- T+ cEND arc;
. |/ d1 D% w& w. j' x( G
6 Z4 l8 \7 l$ a7 {7 u& N
上面是我的倒數60秒程式
+ ?  j# r7 i" o小弟不才* S2 I" K8 b/ d" ^  ]; D
不知道怎寫停止
' k* [* g! R8 R8 K% T+ V3 T只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;2 O  _- O9 t& v( E$ D- J+ p- ?3 S
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,  v. Y0 z6 e& C$ Z* m9 M# b$ `
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII$ x  w9 ^0 ~1 `5 \2 [
跑一次的宣告是要放哪一行...?
/ f7 o5 x4 B9 ~) Q還有一個問題想請教9 h+ j/ ]1 `: w/ I# t7 z4 \
就是counter_backwards60_seg2是我的分鐘7 |' N1 S7 D  a# u0 @
counter_backwards60_seg是我的秒
3 i- h0 g& i' i6 V, a現在就是秒那邊 10→9秒的時候Co也會進位& s/ f2 W# u. Q6 I7 n( S& ?6 F; z1 j
秒的個位數有延遲 所以導致10→9秒的Co會進位
" t% N' C4 C0 a* m3 |程式分跟秒是依樣的 (Ring就是Co)
# h7 {) }5 d9 h8 Z: Z7 @另外 分鐘怎從60開始
' [: V9 s$ k( o1 Q. W1 v. w因為現在我是00:00開始倒數, r" A) x* d) b9 k( R  H' P9 k" p
我需要在counter_backwards60_seg2改哪邊?1 A! N6 x3 @. y* l* H4 R/ {, M2 F

, q0 E; E7 A* b! T. e# ^( `5 Y
5 [8 t  @  G2 h% D6 _& z: }; p我奇摩即時通:xt_90001 F3 \1 L" ~6 j  a& Q, n
希望有好心人幫幫忙% n2 ]1 i! N# x  @
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,, u3 `4 r) |) J
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
$ S7 s" }- O/ a) u2 G4 h) Q) [我想問說3 U0 X: p& A1 k3 ?' R. s
怎從"60"開始倒數?2 \5 g# _: i+ t! N
60→59→58→57....→00
2 p4 [/ W, g" r7 i因為我弄出來都是
  S$ g/ w1 N3 b! A- i# \. g  w00→59→58→57....→00
$ t% [' c" e; s1 U, }/ S" y$ Q% _: j  i& F! y7 ~1 {+ x, t
$ u% I- `' t' ?' e; P; J
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。) V# g) H! l* K! K/ m) m
. i5 {, Y9 [( T) a: m& p* D& t
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦% b4 g& k' i$ g' d2 W% ^
因為我要做60分鐘倒數
- j; }: R6 N$ `7 d+ T3 ?9 N5 b所以要60:00 →59:59→59:58
) e7 G  F' ^" a& t* q% h我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
) A3 t' Z" d' y, l8 V6 S3 J4 b     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
& H4 v+ q/ E+ k2 ^# x  Z- b! t我是用Quartus II 電路圖接法1 L% |  P8 Y  a3 y1 _2 P/ P0 w. `- f* ]
60:00(現在是00:00) →59:59→59:58
! U* j" S5 Y6 J7 r& }9 G, @. x
  T8 l) Q4 J) z9 F3 e+ LIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@& D% }1 w, L7 ~
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
9 ]# k' P8 ]. B' T1 ~* aUSE ieee.std_logic_1164.all;( s6 \2 ]6 r$ A, V4 r3 z
USE ieee.std_logic_unsigned.all;
8 i  Q8 I2 {  M+ z, c; I& {ENTITY counter_backwards60_seg2 IS& n1 x* v4 t; z3 Q+ R3 m/ d
        PORT(Clk        : IN  STD_LOGIC;         
  E# a0 e/ o0 U                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
& C3 |: u/ ^7 ?7 ]5 |( rEND counter_backwards60_seg2;4 b% ?/ K5 S) ?' I- E
ARCHITECTURE arc OF counter_backwards60_seg2 IS' E7 K1 M& @) p3 y7 x2 u1 @( Z
BEGIN5 n: Y' k$ Y8 P: m6 G
  PROCESS (Clk)
9 S( j4 ^/ W; b. P: Z2 @* A     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);: ]" A: Q: z9 v7 w+ o  J- q) ^
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   . Q* }% O- a0 y  m! C; w1 |6 G7 t
  BEGIN         
) \8 S) p9 o, h7 E/ p       % Z! O5 v; O; n2 @
       IF (Clk'event AND Clk='1') THEN           
- X/ i; j6 c; W. M/ |            
1 S3 O. t+ ^. U% X6 d               IF imper0 >"0000" THEN imper0 := imper0-1;
- j- t$ J/ A. X1 t+ ?, s9 d2 W( l( g               ELSE imper0:="1001";
+ Z+ G$ B% |8 A  ~( P9 N  f% K               IF  imper1 >"0000" THEN imper1 := imper1-1;
! X9 a5 l& ^& A* A               ELSE imper1:="0101";
                                 
! X  F! ~5 y0 W( u                    END IF;
, x9 @2 I  w- w" ?) C               END IF;
0 M7 [' e' i% Q9 w, P             END IF;  4 O/ n6 F) @) |" q
         Q0 <= imper0; Q1 <= imper1;  
, b( H0 j$ O. s' g/ J   END PROCESS ;
4 O9 v- Y3 X8 l, A0 |END arc;
; ^7 c& f; S8 C7 [以上我精簡了一些 也能跑模擬圖
/ ~# u( a1 g0 Y5 @* q. X8 B. {但現在重點是我該怎寫60→59→58...
. D  s. e" G$ m! g# @- Y初始值60要怎寫...
) m' H! E& P# T1 w, i是要多2個input 然後給他一開始的值?; `; N" A, N- M1 ?( L
但要怎寫啊@@...
) y% a1 E' k1 n+ O% Y1 }$ z
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
" A0 W. u9 L7 T: Z  T8 _& e+ w5 B但請問 我需要一個另外程式
5 l# N2 `$ A& s: B8 ^去控制暫停開始和暫停) h7 |' H, ]. k3 w
LIBRARY ieee; 5 p" j" ]( X9 }' s( K1 B; |0 T
USE ieee.std_logic_1164.all;
; x4 z5 J* ?7 PUSE ieee.std_logic_unsigned.all;
% F9 z  `4 w5 b: c3 a& d  o& g! zENTITY debounce_v IS
% ^( h6 N- p; C: B% s. j        PORT(CLK,PB        : IN  STD_LOGIC;
1 w# \) ^/ p, }( d% i' q! R! R5 |2 q                 PULSE        : OUT  STD_LOGIC ( O6 T5 R5 s( h/ S2 t% r9 [
                );
" ^3 W* |& Y7 I+ k& s( W( IEND debounce_v;+ O" m$ I* n! q8 U2 t
ARCHITECTURE arc OF debounce_v IS3 [: v, Y' h7 ]+ S: a
SIGNAL imper : STD_LOGIC;+ a; {1 |- U, C/ i
BEGIN
4 [5 S! ]' F8 \# w! S4 t' R9 u  PROCESS (CLK)4 ], C' o$ }: @' \; t9 f5 h
     VARIABLE counter : integer range 0 to 49;
% X7 _/ }0 S1 A  i& l  BEGIN
1 ?. M. S7 a- Q" |9 C. ^8 C   IF (CLK'event AND CLK='1') THEN5 A5 [7 Q0 y" o! N
          IF counter = "1" and (PB = '1') THEN imper <= '1';+ m$ \% @& S  U5 g7 A9 ^
      ELSE counter := counter-1; imper <= '0';. e3 ~7 z! |  J2 R8 w
      END IF; * U& ~# I1 _, K' n
   END IF;. Q) A6 W- n. M% l5 y4 d
         PULSE <= imper;   / N' o% s! f6 h  m8 f/ H' L! M
   END PROCESS ;
4 G4 }, Q( T* ?$ H/ z' m8 x+ YEND arc;
$ ^: d. p2 ~! {+ ]( b. V7 d1 d7 U% V) h, [' N+ V& j
這是按一次減一次
/ g- M  }: f) E- k" l- I想要按一下開始 按一下暫停
8 }- _& G9 ~) D1 m! l% N! E2 ^# J( x, c1 W1 ~! D& n, h
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。4 }4 P! _; k2 L9 A7 D" j" p
/ w. D* J( A9 g
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"- z/ p% ]( z7 U5 y% `
有需要暫存器??
+ N/ _$ f( m( g那是震盪器→先接到開關→接到暫存器→計數器# ^# Z6 _2 x. ]/ C6 P6 G
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
  J* _0 v- O- D3 ]: B& @6 `     VARIABLE counter : integer range 0 to 49;2 t( \$ A/ i0 l, @0 Z9 q
  BEGIN$ g# h. X" g$ o0 i0 H2 R/ m) B" x) D6 U
   IF (CLK'event AND CLK='1') THEN  ^3 h! \5 S5 q) |
          IF counter = "1" and (PB = '1') THEN imper <= '1';+ X5 T, @! U+ w
      ELSE counter := counter-1; imper <= '0';4 y8 ^5 h7 N% W7 l7 x# }1 X% l
      END IF;
. |. q% l7 R# w4 z1 n0 c6 l) w7 Q能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作. l* A3 R$ P! j8 j$ o4 i
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數# {; a( n) e% I( q8 X- p
  BEGIN                   ! o7 `( U# E$ M4 d6 r+ T
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
- u, N# ^" n: y: f; K/ q; c7 A4 v          IF counter = "1" and (PB = '1') THEN imper <= '1';  , B; }  e- H( z8 ^* m4 t2 g
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為19 C1 T& _5 e8 ?3 B

/ J, {2 F0 q3 ~) q; v* U      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0. A9 {; b4 u5 h& M7 Y5 t/ A; I
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
; ?* H: ^: N+ g& }  j6 k- w: d: x! |  [
按鍵開關 第一次 on時,開始計時。4 x1 h8 S2 [7 r1 w
                 第二次 on時,停止計時。2 y8 ?# M' R' _) p7 r4 j
                 第三次 on時,開始計時。& k: z0 t/ v0 S* `% M/ c
) F: z4 v/ }, u% x' B
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
2 n5 y/ T9 e/ |& o5 J$ f" ]平行輸入 / 平行輸出+ Y% [8 m& z" D/ P* \. Y- O
平行輸入 / 串列輸出
% C& Q% z$ m& H- V串列輸入 / 平行輸出
3 F/ b  i4 i: B5 Y& W( Y串列輸入 / 串列輸出; k! N5 Q* w, |, M. d" d# M
哪一個啊@@...
; ^( a- c9 r: D( Y% p我都是看書自己學6 r) v+ Z# v4 u# F6 F: \
所以都不會咩
  y( D# F+ K5 L# Y; ]2 b  q拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!! z+ J6 x/ e6 F7 n& `
今天問老師  3 b6 Z, N5 W4 t* ^1 h0 h; K
可是老師沒說到暫存器的東西( y* {% g/ r" Y& }# @7 h
反而是說
& V2 o+ G" ]7 }IF CLK'event AND CLK='1
/ v5 v, p- X* ^" t) O6 Qcounter := counter + 1 ;
( c* U6 O$ S4 @  ~+ i5 w3 F9 a6 b: p
抓counter (0)   ----第一個腳位?!0 O4 Z8 C0 P2 h% {1 e
給counter位元多一點之類的1 a: o0 M6 C$ ~
* l5 O7 k4 G0 t$ t' ?
00  01   10   11
  V  d( `; y$ o: X1 w; |最後腳位為0   ----Run1 x0 ^& ~6 K0 `) O( G; S0 l
最後腳位為1   ----Stop0 \4 }0 S+ Z9 y+ s

0 }$ q$ R. A) t, ^$ m& V可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
+ L) O7 K4 p$ G$ a: C至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
+ Q7 N, k1 C7 T' I- S9 d9 B% N* a跟你說原理你又不去想,要用你懂的畫圖的我又不會,
4 q# a: V" H- _難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 03:19 AM , Processed in 0.125007 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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