Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; ) ^3 ^9 H6 a( y% B8 T0 m& a, b
USE ieee.std_logic_1164.all;
3 T8 R3 s# Y) J* kUSE ieee.std_logic_unsigned.all;4 K+ f" K+ m4 a- v
ENTITY counter_backwards60_seg2 IS
' y! E, H6 J, N. D        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;$ S' g( r4 A( q! H
                 Ring          : OUT STD_LOGIC;                         % E! Z1 G$ }0 O# W+ b' Z  B/ s
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
' Z. W, ~5 m& M" V/ O2 xEND counter_backwards60_seg2;9 N- m2 Q! [6 _. p
ARCHITECTURE arc OF counter_backwards60_seg2 IS& _2 F- [( P7 Q  A- N
BEGIN/ L- T) S% D; }( ?& `. w4 w
  PROCESS (Clk)3 G1 }6 k4 k* N+ J9 o3 ]0 Q% j
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
1 }; a$ `4 l8 i, Q- a     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);; J/ f2 A3 ^* [8 G/ `
  BEGIN6 J; e# C2 Q9 c9 p5 F
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
+ H5 c" K* i9 {4 i        ELSE IF (Clk'event AND Clk='1') THEN
! I3 y! b) u" R5 o( k7 @            IF Load='0' THEN imper1:="0110"; imper0:="0000";                3 N% H/ ^* v) {- V+ c) R
            ELSIF Ena='1' THEN
( z" r& u3 ~5 U  o               IF (imper0="1001" AND imper1="0101")THEN
! Y- q3 r7 N; }  C                  imper0 :="1000"; + }2 }/ s( Z$ _$ q5 S) g
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;$ O8 E% f- f, O9 q
               ELSE imper0:="1001";1 K( J: D7 n. e' N7 x
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
' i' i6 k0 i2 R6 {, H: D                    ELSE imper1:="0101";                      1 X, P( T. ^- }0 m: S. v; |
                    END IF;
8 j) ]* I2 N5 l5 |% N& R+ U- a               END IF;
  g0 H" F- ?" |: q2 f- p& e            END IF;* l- I7 H1 Z+ y" k0 b0 F8 l0 S
        END IF;6 O0 T0 _6 _' ~5 J2 n0 V% A
     END IF;               + |8 C& v: B+ g* N% Z
Q0 <= imper0; Q1 <= imper1;
* U; N5 y2 }# b" j& I  F+ f; FRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
7 w# s- Q. D5 N2 g! p; o' N, O* ~7 g   END PROCESS ;1 a7 J! q* a3 |
END arc;

' Q6 w: o8 w6 [4 l; [$ G7 z/ i% q4 r0 M8 x0 |* N
上面是我的倒數60秒程式4 ~3 ^6 ^- G9 I( y: b  e4 J; w
小弟不才+ K, }5 o/ I! J( a' d# q
不知道怎寫停止
# J) H8 m3 a) q5 E7 N只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
% A+ G( c1 `" T/ M要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
1 U* u" @/ L/ ]6 O除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII: c* M* s2 l% ]
跑一次的宣告是要放哪一行...?
: r$ n* e8 t3 u: P* ?" b還有一個問題想請教7 I7 s! Q9 d/ A) m
就是counter_backwards60_seg2是我的分鐘
: D% ]; [) u9 W1 hcounter_backwards60_seg是我的秒7 }) ~" m, {/ t- v6 _
現在就是秒那邊 10→9秒的時候Co也會進位
3 G' K& x+ m) {. C秒的個位數有延遲 所以導致10→9秒的Co會進位! K8 ]2 B7 c% F) [! P
程式分跟秒是依樣的 (Ring就是Co)
% u; w7 `! Y  Y0 j另外 分鐘怎從60開始* h! a; J; l: q; j9 w+ R3 f( T3 Q" y
因為現在我是00:00開始倒數
( V# l9 Y/ J! c% q" U1 ?. c我需要在counter_backwards60_seg2改哪邊?
+ s7 }( T8 c# E& ^; {( F* s$ Z( H: a  t

9 y8 E0 |7 u# p) G我奇摩即時通:xt_9000
, N4 C" _3 L4 j, F. p& v' R) }希望有好心人幫幫忙" o, a9 @7 Y' k3 ]
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,) U8 `- D% V. w$ E& T4 N
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答3 O/ z1 ]% C" \+ M- O) N
我想問說
2 G+ V1 Z7 Q& T+ ?  a; r; X+ k. q怎從"60"開始倒數?
# e$ C3 {. S0 d3 _) l  _  z60→59→58→57....→00" R; p9 l  z  L3 s# q  `, B" @$ z7 A
因為我弄出來都是6 s5 o, p5 K- U- C; d$ C8 Y
00→59→58→57....→00
# \% m; j& o6 [# V$ X
3 s" h4 l# H% [, \) f
% ~; F( Z$ l" Y希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。4 B. F& T5 f: m( U
0 Z: X. `/ {' U/ T
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦0 x% r- d/ L8 V& p) y
因為我要做60分鐘倒數2 }4 F: k% T* C' O, E8 c+ T; M, Y
所以要60:00 →59:59→59:581 B% O$ u' _% b3 I6 a. @
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then  {* ?; i4 M% S( ^# C
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
4 X+ f0 e9 o, V- K+ ?8 z我是用Quartus II 電路圖接法
5 o) i: k$ O2 \; J/ ?' T* M60:00(現在是00:00) →59:59→59:588 h! }* @3 d8 H1 {

# d6 M7 Y( y7 ^3 ]$ S/ b" [" pIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
- o0 ]: I1 h" l1 B  q1 W; w小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 8 A6 _4 A8 C1 d7 x8 o5 ?
USE ieee.std_logic_1164.all;
% x8 J) A- L$ U& Y# ]+ bUSE ieee.std_logic_unsigned.all;# b, Y) w0 a( J- h9 {2 a; K
ENTITY counter_backwards60_seg2 IS
7 L* h3 k" L/ C  f- I        PORT(Clk        : IN  STD_LOGIC;         8 n( A; ^! ?( L4 F9 K1 K7 Q
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
/ t- c1 a1 [  w  rEND counter_backwards60_seg2;; I2 S* a" k  l0 v5 O0 `# L
ARCHITECTURE arc OF counter_backwards60_seg2 IS3 p, u% @& w$ y& Y7 n
BEGIN/ x8 `, l. r7 d6 x9 F1 \
  PROCESS (Clk)) c, G0 S; v4 B+ B: e
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
( A8 u* Y4 H% B" W! i0 q& O     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);     j" ~; s$ b& D( [9 `$ |
  BEGIN         
( o5 w- `; ^* v/ ]       , Y/ B( |; ?% q: I3 s, h* X
       IF (Clk'event AND Clk='1') THEN           $ v" L/ r* w1 l  f5 Y+ G" r( W
             3 L, `2 P/ _1 F: N- L. |; }4 [
               IF imper0 >"0000" THEN imper0 := imper0-1;" b1 g) s: J8 K# A1 u. v7 o. D
               ELSE imper0:="1001";( i# T2 b) _" G  }6 q4 x
               IF  imper1 >"0000" THEN imper1 := imper1-1;
- x, ?* W. _3 Q: A  L( H. C: D               ELSE imper1:="0101";
                                  6 Z! s0 ]$ u7 x& Q: A& x
                    END IF;
6 E6 z% F& M, c7 F               END IF; 4 Y1 l; A. b7 F/ D0 m" @
             END IF;  
! X: m* n3 A6 D3 }. a) [( Z         Q0 <= imper0; Q1 <= imper1;  
6 g. N; H! t" Q# A9 g, V4 Z3 e   END PROCESS ;
4 m9 b3 E" v7 w" a4 y, A3 ^END arc;  m! r: m+ v2 w' T: t5 W9 Q- o
以上我精簡了一些 也能跑模擬圖( d' N! ~$ e" m# Y7 x4 q+ t
但現在重點是我該怎寫60→59→58...
! Z& l, @% r  G  W% `: J7 V初始值60要怎寫...
5 d2 ^( H8 l: x% v! o是要多2個input 然後給他一開始的值?" `! Q, `% o, F& L  W
但要怎寫啊@@...
: F6 d8 |" g# z, q5 l' {* b
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
, _0 E: l# f4 t' E6 l1 p但請問 我需要一個另外程式
; {) [5 u, ~/ y去控制暫停開始和暫停
2 T: m$ M! u1 E' d+ a/ c# ^6 m: xLIBRARY ieee; 7 I3 P3 `! X3 V8 R0 m2 |. H; v
USE ieee.std_logic_1164.all;
, r$ X( q( J, t/ xUSE ieee.std_logic_unsigned.all;
5 {5 O9 T  Z, @( z/ ]ENTITY debounce_v IS; C, R  o- B4 i$ o" N
        PORT(CLK,PB        : IN  STD_LOGIC;, k) L5 T# u, Y$ B) Y! i& P6 r
                 PULSE        : OUT  STD_LOGIC
1 P# Q) M+ z1 y5 Q5 S+ u4 G                );+ L0 I( \* ^8 [7 A- z* G
END debounce_v;
: C: B: m. J. ]5 Y2 i3 x0 @" s  \3 Y5 NARCHITECTURE arc OF debounce_v IS
; b# X6 r! F) k2 a SIGNAL imper : STD_LOGIC;
+ k6 g! x) W9 ?: q) e+ }& I BEGIN0 H$ A1 n5 A& g1 ?
  PROCESS (CLK)
1 @; v$ v6 s/ H) q     VARIABLE counter : integer range 0 to 49;+ S- X6 h4 v: o1 x* \1 B% H! E" a2 R/ c
  BEGIN8 K7 n* c" E( P. s- y2 \2 d. l
   IF (CLK'event AND CLK='1') THEN
. c, S3 i. ^4 I1 S" L$ x, l/ h          IF counter = "1" and (PB = '1') THEN imper <= '1';, `0 ^! M, j. M- o' X) m5 s
      ELSE counter := counter-1; imper <= '0';
. E2 Q  |6 f" k, I* b* U$ i      END IF;
) X3 I: s- m4 Y9 F: q; {; i; b) x$ l   END IF;5 p% x, o' x% G/ q
         PULSE <= imper;   
$ b, h1 T+ C% ?* o: @1 u/ X* `4 I   END PROCESS ;( e1 f# e4 r- e  r
END arc;4 K7 F& v1 V7 [1 _4 g7 F# B

: a5 B! n5 R) E/ U& R這是按一次減一次8 s6 T. J5 z8 u8 i  |/ t  t
想要按一下開始 按一下暫停& Z( a) y# ^5 x& A6 z

% o4 V  b  b9 ^9 m' V9 q/ ]ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
5 e& G9 U% B: Q! ~! o
- v; O% m  P/ q2 e5 m7 z9 Q4 {你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
+ m) A+ P1 e( P( t* I3 s3 \6 _有需要暫存器??8 `$ S0 N  z& t& K
那是震盪器→先接到開關→接到暫存器→計數器& F9 y; E; P6 s, P* }
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)4 Z1 [0 y5 z! U: N6 X7 M& T+ U, n0 Y( V
     VARIABLE counter : integer range 0 to 49;
3 T: ^/ U) k( G& a# ^8 p, G+ I  BEGIN
/ |* Z# Z4 S/ @8 O6 P   IF (CLK'event AND CLK='1') THEN' _! }+ B' R/ P: h( E
          IF counter = "1" and (PB = '1') THEN imper <= '1';/ w6 F: Q9 {4 E" }9 N
      ELSE counter := counter-1; imper <= '0';2 e) ?( e2 ]7 }
      END IF; 1 ~# Z8 G' ]1 Z+ f
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
( W6 M" u6 E' V+ N- B2 b  F5 j     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數3 y6 _! i9 A( c1 ^3 `' R. k6 q
  BEGIN                  
8 N& w: |8 [/ p) Y& P9 v/ K+ A+ r   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發( y9 [9 f' K6 Y. Q$ p4 \
          IF counter = "1" and (PB = '1') THEN imper <= '1';  8 [" U, [4 X7 z0 V0 C4 O
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為10 z+ F3 n. }/ o8 F( ^
3 r& y7 W, X. a
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為01 O* H+ E' W$ J" K4 v, S
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
0 n5 u- `1 ]( Q  ~
" I( h1 ^( B/ a; l" d按鍵開關 第一次 on時,開始計時。9 ?; O5 e) c3 ~/ I# n) t  w
                 第二次 on時,停止計時。$ S# h! r* H; `( M4 H& k* t( i
                 第三次 on時,開始計時。
' S! K; O' P: t' b( x) U( G+ k1 h3 o
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
% l% \* W$ i. S2 [& Z. `# J平行輸入 / 平行輸出; M) f9 d% b. b3 T8 `- j1 G" Z
平行輸入 / 串列輸出" l. h1 j, F9 {9 U$ B' H8 H/ g
串列輸入 / 平行輸出
0 s1 y0 t" |0 b+ k8 l串列輸入 / 串列輸出& {4 c: h  m5 E, @+ e4 d
哪一個啊@@...* E* S0 a: p. g
我都是看書自己學
* M7 F5 c) `! A. ^, z( I6 ?8 v' E所以都不會咩
; D9 k% W# B+ b6 \( k拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!7 m, ?( Z2 d# t" n/ l- g% S
今天問老師  * ^; p- D) ?6 K1 [; @. Y# H
可是老師沒說到暫存器的東西2 q0 m* ]/ p6 R) N- A7 ~& c
反而是說
, {% T7 v" G6 M- l6 b" t4 U* ?& ]IF CLK'event AND CLK='1
0 ^( i+ c6 j8 q/ r$ E0 Q( ?* Mcounter := counter + 1 ;
- W5 Q4 t) O; z* Q
. |$ n. C3 y1 ?抓counter (0)   ----第一個腳位?!" L& B# B# L4 s( P, Y
給counter位元多一點之類的
7 k8 l' _. ?) Y( P4 L. I6 [& R) a  z; b2 B* Y0 X' X" d+ r8 g1 y
00  01   10   11) X& c1 x( c$ u; R+ I/ a
最後腳位為0   ----Run) J4 O3 ?3 |/ ~8 M' d' q) x
最後腳位為1   ----Stop
5 Y  G% P+ n2 `8 m' ]5 K% Z- I2 q- q  g) Y! O" O0 B
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
6 ?/ J( x5 ~9 ~7 r0 t至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
. t1 C- a* X" b跟你說原理你又不去想,要用你懂的畫圖的我又不會,
' Z6 V, Z* t. }8 a; Y難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 08:37 AM , Processed in 0.126016 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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