Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
# c& S3 [$ _6 P  X+ ]8 SUSE ieee.std_logic_1164.all;
9 M% V# e5 h% ^# m7 FUSE ieee.std_logic_unsigned.all;* K3 \0 @, g. U
ENTITY counter_backwards60_seg2 IS7 y) j4 H/ n! b/ R1 `
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
- I9 H7 q, v9 u7 C                 Ring          : OUT STD_LOGIC;                         
3 ~$ U: G$ ], f. o  @! `                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        - s, ^! W; `0 B9 M3 N  q. n  K
END counter_backwards60_seg2;
. u: O- V& q1 ?ARCHITECTURE arc OF counter_backwards60_seg2 IS
8 L# \& z( k( G: c0 ]/ t BEGIN4 Q& Q& |2 ~1 W% a& ]
  PROCESS (Clk)9 z$ n5 J0 y: G* m0 O  j, ]# E1 @
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);& s; [' i) n  L0 ^
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
0 @) r% p0 ^1 D5 b$ F! W  BEGIN4 F% t$ t! I0 ?, I, S
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
. I2 w+ a' N  O# H        ELSE IF (Clk'event AND Clk='1') THEN # ^' |5 L! C( [* z6 p2 W+ f
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                . L' R) j8 R) i6 s9 y2 l1 Z
            ELSIF Ena='1' THEN' f) ]2 T- d8 J0 {* g  z
               IF (imper0="1001" AND imper1="0101")THEN. p1 @( a3 j* y
                  imper0 :="1000";
1 L$ n! B* {/ m7 V               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
6 ]9 P( ]6 d# z$ H               ELSE imper0:="1001";( o2 P! ^' I# P5 @9 Y: a
                    IF  imper1 >"0000" THEN imper1 := imper1-1;! F, j, c" \- \" X% F
                    ELSE imper1:="0101";                     
+ \& {( O: w% ]' S+ J                    END IF;& R5 [  g! [# T1 O! t: U4 V7 h
               END IF;
& d9 j  C# ]$ T/ j, c7 @* q9 d            END IF;
! h1 c; r8 t1 }. K        END IF;
1 [6 l* K! [  q     END IF;               
/ L0 {9 u: p" B! Q, @% [5 _Q0 <= imper0; Q1 <= imper1;
# ~2 v/ }4 k: d8 ]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));         
8 l; S6 G, M; Q1 @7 ?; p9 J, z   END PROCESS ;1 A8 n, Z) \1 a4 H9 v+ J" G
END arc;

/ m9 E2 N0 o: J; R7 t! k3 T0 H9 }1 }$ u1 }4 r$ V9 w- N. H
上面是我的倒數60秒程式
6 f% Z  z& ]( ^* y, `- d3 C: O$ w小弟不才; g7 G8 @% h: P+ y) e, G
不知道怎寫停止
. s- v; c, Y* r5 Z5 o  x& p- S! B' r只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;% z9 \% g# P1 Y: ]2 v" b0 @; v/ |3 k
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,9 V% L) [. N( E- ?. H( H/ ]$ k
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII! D5 N' [; k2 N+ y2 v
跑一次的宣告是要放哪一行...?
+ ^/ o6 g, V. [' x  Q. a還有一個問題想請教9 ]$ q; ~2 F- }# j4 [
就是counter_backwards60_seg2是我的分鐘
) `6 y* Y5 k" e/ M! `2 Mcounter_backwards60_seg是我的秒. |2 W8 p: `4 W/ n" m3 `( ~
現在就是秒那邊 10→9秒的時候Co也會進位' U; P+ D! b9 }- u# l
秒的個位數有延遲 所以導致10→9秒的Co會進位
7 I& q# [- E. d1 W3 Y8 ^' g& S程式分跟秒是依樣的 (Ring就是Co)8 z+ x4 C& l: @; A1 J
另外 分鐘怎從60開始
9 ?- r! ^; t) h+ g因為現在我是00:00開始倒數& t) t- R8 N# A; i# G6 L
我需要在counter_backwards60_seg2改哪邊?% r9 X6 y& \# z6 N: Z- `

! Q' o' }: T: U7 `) ^  Z. U
) f% B0 \! x& y7 c# I- f  }/ U我奇摩即時通:xt_9000
% K  x, y! t* B% V4 \希望有好心人幫幫忙% A* B) g/ U2 p( @
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,9 |& D! t+ c+ l0 b
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答9 ^! S/ ]; x$ q7 ^
我想問說
- i! W) X3 o( \4 r! r8 u怎從"60"開始倒數?0 Q/ z( f$ J/ u2 y
60→59→58→57....→00% W' m& s5 F3 Z$ u& f. [0 S) A
因為我弄出來都是+ B5 F7 a6 L* O& V  l
00→59→58→57....→00) l- h  _( q: y/ Z9 Z6 J

. g6 i5 C  d, P; R) `- e6 Y! s6 m+ `0 o8 B6 T5 e1 D! z
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。! |+ a% M* p0 [' ^: {
! [: C+ z/ B, b
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦, Y" B$ B1 _4 k: ~! H, \4 n* N
因為我要做60分鐘倒數0 m- T1 J7 [7 f' [& _# T
所以要60:00 →59:59→59:58/ O6 Z4 A7 u& j# P
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
1 Y" K+ i' r% q     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@". H& l6 D1 F1 ^9 {
我是用Quartus II 電路圖接法- ?8 {7 n3 e2 j( h6 G1 C3 ]5 P
60:00(現在是00:00) →59:59→59:58
( x5 {  Y; P$ a( r
) z4 C8 ~) `, @# l  C8 QIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@2 t! r: O6 u. O% ^( [
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 9 n) o' M9 `6 g, m8 b- |: r
USE ieee.std_logic_1164.all;, i' {* R* x0 n1 H# S# q
USE ieee.std_logic_unsigned.all;4 F& J% r  Z3 L9 A: O4 K. j
ENTITY counter_backwards60_seg2 IS
! B3 y! Z, ^6 v6 ], U2 O        PORT(Clk        : IN  STD_LOGIC;         
8 z( G: f8 i+ ]9 ~0 G4 ^3 U! U                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                * P" ?& s1 ^; H: I( t3 T0 o
END counter_backwards60_seg2;8 h4 ~, e6 w% Z" \
ARCHITECTURE arc OF counter_backwards60_seg2 IS
9 F7 D/ s5 R) V0 u% J BEGIN
! J/ r6 z! K, [. M  PROCESS (Clk)9 [7 k/ L& C( `) x4 `! ~* R' ]: ^
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
* L+ H  `4 a0 k4 {; z3 `, j! v     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   * z7 H/ d: l7 U* |3 w
  BEGIN         
) i7 p7 M2 O) G2 [" j: O       4 f8 x" P3 f# x- C% [
       IF (Clk'event AND Clk='1') THEN           ! {% h0 s& |1 h8 c9 b% n
             ' Z; n3 j3 |, Z( y6 A9 s
               IF imper0 >"0000" THEN imper0 := imper0-1;! f; f- u# S9 I. V
               ELSE imper0:="1001";
# u9 n$ N4 n, X, H, ?               IF  imper1 >"0000" THEN imper1 := imper1-1;5 W6 j+ d4 H9 M
               ELSE imper1:="0101";
                                  & u' r" L# x* X* C8 X/ p
                    END IF;6 Z5 i; v) L& v* V6 Q7 k+ @
               END IF; ! J1 M# ^3 Q# @3 t' w8 q: R' [
             END IF;  
2 d6 [7 p* c2 h! q2 ~0 |2 O         Q0 <= imper0; Q1 <= imper1;  
9 e: Q  P- K( v8 H1 I. n, `; b   END PROCESS ;
6 y9 k& W2 e; S* A0 [$ A- `END arc;- I4 F: f; t& H( t9 k
以上我精簡了一些 也能跑模擬圖
8 M4 ?: t# j* n4 p( W% A7 @8 m8 s但現在重點是我該怎寫60→59→58...3 e" m# Y' O! B; r* l
初始值60要怎寫...9 |# N. u# [8 \( a
是要多2個input 然後給他一開始的值?, t+ l4 s6 k4 s. Z) O5 ]8 f
但要怎寫啊@@...- f" @* O7 u" H, r% F1 T+ k* D1 e8 L
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
8 g' b  N' ^  \5 a但請問 我需要一個另外程式/ W! B8 l6 B" R  ^7 C5 J
去控制暫停開始和暫停* x- c9 o  p8 ]' K& C# n# I
LIBRARY ieee; 6 a, f0 r: e. {8 U
USE ieee.std_logic_1164.all;
0 d( y( B) T# P2 PUSE ieee.std_logic_unsigned.all;' d+ [8 N5 M4 p  z# j
ENTITY debounce_v IS
  k5 m. D; @" B. L# j        PORT(CLK,PB        : IN  STD_LOGIC;
3 U! G, v" W8 x. l# P% B3 |9 M                 PULSE        : OUT  STD_LOGIC - L9 W' v: P! M: O0 I
                );7 ]  c) z! \( O: L0 o
END debounce_v;8 Z' x+ D3 P% i/ r) Q8 D, o, i
ARCHITECTURE arc OF debounce_v IS
1 Y/ Q- q* [/ A# Q  o4 L SIGNAL imper : STD_LOGIC;
6 {6 b' A$ S. g# Y BEGIN
3 \/ a1 W% S) ^; @; A  N  PROCESS (CLK)4 i1 |5 ?6 J  e. B6 y
     VARIABLE counter : integer range 0 to 49;
" g9 j: s6 y5 p& v' j$ j- j  BEGIN
/ }# y5 o* V8 ?) n0 C# R: g   IF (CLK'event AND CLK='1') THEN; u0 U& m7 c. _9 |  ]8 R; k6 Y
          IF counter = "1" and (PB = '1') THEN imper <= '1';
- @+ [9 g% }' Y. D0 e$ `# G      ELSE counter := counter-1; imper <= '0';* H; J5 n3 {. E& V6 q2 ^7 l. V# O
      END IF;
# Z9 ]6 f3 ~$ a3 q  g; z" P* M- {  S   END IF;6 e/ s* v! d* _: H
         PULSE <= imper;     P1 w4 X$ a* W3 [( D
   END PROCESS ;( B2 _  d: |! b1 H$ [
END arc;1 a/ E+ q& w  @" J# ?$ k- {: K! O

( ]' _/ ~! Q# T  t1 ~3 h4 X/ M5 H這是按一次減一次# _7 e6 y  R6 M) @
想要按一下開始 按一下暫停- a) {8 G9 b: v: I, N
. G% I0 L# V( F- Q$ s- o' _7 k
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。4 `; \0 b6 r, g# ^( W
! o0 g; D% i+ f  p  z; b
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"( S$ V$ }& s1 m8 a' r# v
有需要暫存器??
. h" p  u* O' g  x! W- m8 @那是震盪器→先接到開關→接到暫存器→計數器
, F) T" w# S  ~: ~4 [6 a5 D2 B這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
. g  p/ h* H' i2 _8 K7 P     VARIABLE counter : integer range 0 to 49;6 [+ F. Y. S+ j
  BEGIN! Y/ s( M2 k  \4 o% O/ h3 Y
   IF (CLK'event AND CLK='1') THEN5 p0 T  j7 O$ N$ Y
          IF counter = "1" and (PB = '1') THEN imper <= '1';
4 a6 j- c+ V# [      ELSE counter := counter-1; imper <= '0';9 ~$ C! P9 }5 ~
      END IF; ( P% J' f$ D, g. R+ B: q. b, z
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
3 n5 z! f  [( t4 P/ v$ |" F     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
4 x: x2 {) i! C7 c' j2 s7 R  BEGIN                   " _1 L6 U. T) d" y& f5 r9 J
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發" e& D/ p  `/ o' L& I$ z
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
( \# g, R! y$ d                -- 如果counter = "1" 和 (PB = '1')就把  imper設為15 g% \6 W- n5 p2 c: P* A

  I7 f/ W/ B+ I* t      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
& E7 t: Y, G! O0 e$ [% ]( d4 w  S      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
3 P8 N6 g, H2 r) c. D4 M
  V- S# H/ Z. V3 \按鍵開關 第一次 on時,開始計時。: ?, ]8 S2 C: y/ b1 }0 I. R
                 第二次 on時,停止計時。
5 ]3 |9 D7 F; c- Y. D' n                 第三次 on時,開始計時。. Z% F% ~" x) z0 k$ ]2 K% |9 T  O

- F1 E- i# t  `9 j3 B; b這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
6 p0 R9 t5 g# c% h平行輸入 / 平行輸出4 `% P, L; ^) J+ {! d" n* b
平行輸入 / 串列輸出
1 ^% S3 o) y2 [3 d串列輸入 / 平行輸出, @* S5 s, w! z  m& ]
串列輸入 / 串列輸出
# Q) d% j* W: J, E$ [9 G6 E哪一個啊@@...
6 g) l! l: ^7 a9 n7 R0 ~我都是看書自己學
1 }3 W% \" q- K6 |! O( v3 e& e- D所以都不會咩
  G, n# [+ y/ C) T  H8 ?拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!0 [1 b4 x: t' W  T/ A* `3 J
今天問老師  ; q% U9 g( |7 Q
可是老師沒說到暫存器的東西' |0 L2 y0 M- `1 Z
反而是說
  O$ t! N# \* ~! a* y2 eIF CLK'event AND CLK='1
+ z8 `- m, L" {8 B0 ]& j- W* acounter := counter + 1 ; 4 \: {% c) x% j" u& j
* q* a" g: @3 N' P
抓counter (0)   ----第一個腳位?!
4 M% l1 m8 c4 q) ]給counter位元多一點之類的
; p" Q' Y) M! V, j; j
% O% L1 `! t2 _  N( z* P, r0 `00  01   10   11
, k1 ^1 r5 I+ a最後腳位為0   ----Run8 L: f: `: o# }
最後腳位為1   ----Stop0 [& X  c+ M& m7 ]

9 B! S- q2 Z# w  P* d$ }4 j可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
) w2 z/ y1 C1 s9 h3 R3 B, c7 x至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,1 m8 L- R7 J3 M2 h: d1 C
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
: I( n( w$ Z. @" ^" Z/ _& X難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-4 11:29 AM , Processed in 0.139008 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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