Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 7 W. z6 t) H  I! x, R3 z
USE ieee.std_logic_1164.all;* ]# d5 c; k: U( h- Y
USE ieee.std_logic_unsigned.all;
+ t, g$ P6 O% U& ~0 T3 B/ Y  b' ]ENTITY counter_backwards60_seg2 IS
1 r* j' H1 A  R& B8 u. b, r        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;; _& z& z4 d2 y6 a0 p% U
                 Ring          : OUT STD_LOGIC;                         : ?5 ^; Q( Q7 s( q% _
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
. E& t& G( X4 }! S! |, G2 EEND counter_backwards60_seg2;
) ?4 J  A, H6 a/ c* a- KARCHITECTURE arc OF counter_backwards60_seg2 IS* |6 q0 I. _8 q) h
BEGIN
, W7 v% a5 a- P" U0 A, p$ u  PROCESS (Clk)
* s3 w. l4 n, k     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
: j) S* x4 R6 J4 R3 Y' `3 [2 A     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);( L! `* A, H9 X4 j4 |
  BEGIN9 x7 v4 C, l1 h# e( c. X- U* [7 q
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
! E, a$ u& Q1 u7 w3 `        ELSE IF (Clk'event AND Clk='1') THEN , h: F& P5 z# t1 G. ~9 i4 Z
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                7 W5 m6 ^. B8 C" @) y2 K3 @$ c
            ELSIF Ena='1' THEN
! I7 H0 G  D  {( y               IF (imper0="1001" AND imper1="0101")THEN# i3 M, U/ [/ A' m
                  imper0 :="1000";
/ C* U- l, u  o0 P. }4 j5 C! N1 H( C( q               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
+ c  r& o) J) v3 ?               ELSE imper0:="1001";' B; q+ P# R2 t8 i' G' c, t
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
7 I% V8 P* N+ V, M* A6 @                    ELSE imper1:="0101";                     
: ~/ h- B; o: p3 ^" k4 o8 `+ x" G                    END IF;
/ |3 Q# f" V  r! }+ Z7 S8 F, |% w               END IF;
2 u! d! [. z+ }: c! o            END IF;. G* y6 p7 i6 H2 B4 Z$ S
        END IF;
: N; i9 a/ Z( N7 d( n     END IF;               
% y% A( N, d) |. V5 M% EQ0 <= imper0; Q1 <= imper1;
7 W/ k  |* q, u8 V$ vRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
, G- y! G& M. ^6 o( e7 y   END PROCESS ;
: w) K5 a: n+ F+ U  u) N; V, V! YEND arc;

. i* }; b. w8 s6 g
* _$ {+ U: d! o+ R% g上面是我的倒數60秒程式+ [9 f! q- G3 @: Y+ P) {
小弟不才  b/ J" G% }4 K8 ~
不知道怎寫停止
, u6 T  O2 b. X. L5 z只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
2 Y+ f; d# Y. |# x$ D要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,$ a! ?, g# `2 \' [
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII4 M8 N: y& A( }2 \& T5 A+ K
跑一次的宣告是要放哪一行...?- V# i3 ?8 {2 y$ `8 Z
還有一個問題想請教
; q; m# B0 i' N* L" h就是counter_backwards60_seg2是我的分鐘* }4 Y' |# r% v, P$ x) [
counter_backwards60_seg是我的秒
' N9 L- W8 z+ U/ U+ r& g8 H. ?現在就是秒那邊 10→9秒的時候Co也會進位
7 N; v8 d4 a  W秒的個位數有延遲 所以導致10→9秒的Co會進位) G, n3 c- F& h  ^- K0 u
程式分跟秒是依樣的 (Ring就是Co)' S4 c; F9 }! w/ e6 X& W
另外 分鐘怎從60開始
. Q9 F6 s: c3 ]7 M( L因為現在我是00:00開始倒數
* U) Y- o0 d+ z( K+ l% X我需要在counter_backwards60_seg2改哪邊?
5 |; I0 d- c$ T, v, A: {# l  m( D: u

; {  U$ ^" A$ k我奇摩即時通:xt_9000/ L: q2 Q1 y, ~9 t% E# Q
希望有好心人幫幫忙
. {. Y- l3 t' j懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
+ H0 R9 {1 w2 o看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答8 I, C. B, M3 T/ [$ T
我想問說
' F+ c' N* P! [8 H/ l# ]1 w  N; U1 l怎從"60"開始倒數?- L6 o, ~* ?1 [* E8 q. F
60→59→58→57....→00
) f1 ^' x5 Y8 w# M因為我弄出來都是
1 e8 ^6 E) Z- H" r. q( G00→59→58→57....→00# e* H" x3 r. {0 \

( Q" n8 A/ d6 t1 M* c0 O6 P) U! t* [( O+ G, ~% k6 Q, D, L
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
$ i$ s' P! `9 ~% g7 @# i- M6 w4 C: E7 e
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦+ n  ~: k9 v2 m8 F1 Z' e! W
因為我要做60分鐘倒數
" @; z/ {6 {1 Z0 v8 v6 e8 S$ q所以要60:00 →59:59→59:58% o% T9 I' W2 R" G0 K! Y
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then" K8 m% F* C# Z7 D
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"- I7 L2 {/ m* x, `3 Q& v' y; h% R
我是用Quartus II 電路圖接法2 P; M! Z& N- I
60:00(現在是00:00) →59:59→59:58
9 o  ?) F. o4 r3 E6 m5 ]- C) g/ b5 j# f8 J( Z
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
0 L3 ]2 }8 a. c( l3 v, O: M小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
4 Q9 o+ y* n! t$ B9 CUSE ieee.std_logic_1164.all;
9 C& A1 z; r9 zUSE ieee.std_logic_unsigned.all;
2 v: x. q8 d0 |; n$ QENTITY counter_backwards60_seg2 IS
% K+ c. q% {' m3 _# j; ]; |4 F        PORT(Clk        : IN  STD_LOGIC;         
! |, q$ m& j  G0 \- A6 k  h9 o, E                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
9 r# g7 g& ^2 q9 w8 U9 zEND counter_backwards60_seg2;
5 x3 \* A) S5 [9 BARCHITECTURE arc OF counter_backwards60_seg2 IS
4 O' }5 u/ s" G* l8 V; V3 }: S1 E BEGIN
7 b1 G! ^' @9 w4 F5 D  PROCESS (Clk)
% f5 c. \1 Z5 _# e4 p     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);, i  E" n6 p: }/ g- ~% p6 H
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
0 e1 {* W1 Y1 W$ D: D  BEGIN          # B+ e9 @) }# U) b
       
6 G! F! h+ G, Z% x; U       IF (Clk'event AND Clk='1') THEN           
4 h- d* v2 g5 V0 |            
3 D8 h" O% j  c  t+ n$ ~( I) l2 h               IF imper0 >"0000" THEN imper0 := imper0-1;( Q% x. K; I% Z# e6 L  c" j
               ELSE imper0:="1001";6 D5 u! y9 q1 ^* X
               IF  imper1 >"0000" THEN imper1 := imper1-1;
* |2 V: M: o2 F  }               ELSE imper1:="0101";
                                  : `4 r0 s2 p* @) p$ j
                    END IF;9 T' {9 d! W8 j9 `4 O7 r5 M; X" u
               END IF;
4 s$ ]0 P+ M: o. U- a             END IF;  
: D& j8 c& {( H! x         Q0 <= imper0; Q1 <= imper1;  / S* k8 J- j& I+ u* p6 X! u
   END PROCESS ;
% P9 @( y, E- WEND arc;5 |0 D2 G! f' l7 Q" ?. A
以上我精簡了一些 也能跑模擬圖
/ ?' V0 {4 q. f$ m但現在重點是我該怎寫60→59→58...
) A5 {# J) S) @1 }/ x初始值60要怎寫...
2 |- o1 F- o# H& n! |是要多2個input 然後給他一開始的值?4 K  G6 G( g3 P& L3 l# T2 d, l
但要怎寫啊@@...2 f2 O, l7 C# E; F! i1 a% ?$ F
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"! ~! C8 D. B3 S
但請問 我需要一個另外程式" n& u) @  `. [; p( K
去控制暫停開始和暫停- G, N  S2 N5 w
LIBRARY ieee;
" D7 j1 P" M: ~7 zUSE ieee.std_logic_1164.all;
9 z2 u4 A6 Y4 Z- K7 Z7 WUSE ieee.std_logic_unsigned.all;
3 V! P7 M5 @! DENTITY debounce_v IS  x1 h0 f2 T. e: w1 E8 @
        PORT(CLK,PB        : IN  STD_LOGIC;& I: d, n7 z1 h! [; o" V
                 PULSE        : OUT  STD_LOGIC
& `" W! v. B" b# R+ A                );/ L1 }$ N" {9 [' {3 b& {1 h
END debounce_v;1 c) f' `3 X& h+ s# L: G
ARCHITECTURE arc OF debounce_v IS9 {7 U# b& w2 t3 F+ A
SIGNAL imper : STD_LOGIC;% \: O! H7 U& u: {0 q, q& O
BEGIN
& C9 v: n  y" }% m; Z) J  PROCESS (CLK)& ^# ]+ m* B: D8 n4 A0 |
     VARIABLE counter : integer range 0 to 49;1 R. L; u$ d$ [9 \  ~' O3 M
  BEGIN
; N. \* w9 c/ V9 N  L   IF (CLK'event AND CLK='1') THEN. f0 F5 E8 m% }: n+ b
          IF counter = "1" and (PB = '1') THEN imper <= '1';: N& N* k/ x+ |3 R/ @+ ?5 b% W
      ELSE counter := counter-1; imper <= '0';& W) l6 v( Y: M( A& I
      END IF; ) f2 k# l" v* i8 P2 q7 j) X
   END IF;, \, @) O: h) W0 U- T
         PULSE <= imper;   
! \; d3 \4 Y& S" M6 H0 e* D   END PROCESS ;
& W% N4 v- l- L" AEND arc;, i; r+ w: B: t0 r8 ?

9 E1 }6 E4 R! n: c. t這是按一次減一次  c! x9 X! x' n. A/ M2 v. Q- c
想要按一下開始 按一下暫停
' U/ Q& f+ O( V7 |+ Y7 E6 [! o" ~& k. @! O
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。+ e9 o7 y3 F. f

' \& f, `9 F" d1 Y7 Q你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
- Y8 R- ?) u5 m4 @! s; h7 l有需要暫存器??
9 j- K( o1 y$ ^( W! C那是震盪器→先接到開關→接到暫存器→計數器' n4 c, A% D/ V( g! z2 F
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK); \1 Y1 O3 v, b+ {# ]
     VARIABLE counter : integer range 0 to 49;6 x. c) k& j1 k
  BEGIN6 H( u9 c/ u/ E
   IF (CLK'event AND CLK='1') THEN# \. `; y% _$ S6 @
          IF counter = "1" and (PB = '1') THEN imper <= '1';. M+ ~& k& K( t- C0 n  v* T
      ELSE counter := counter-1; imper <= '0';
0 B) s; J  r/ [7 v# \% n      END IF; 5 D8 E% G: J. b9 l
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
2 y$ U4 r3 e2 @/ t     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
* o1 |" }( a1 ?  BEGIN                  
& r+ y; V% V$ b' w   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
" B% w: a$ Z; k  L0 ^          IF counter = "1" and (PB = '1') THEN imper <= '1';  
# ^  Z9 p& y0 P! v% V& |3 i* h  E                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
6 s# q* ^  l2 O ' p+ L8 Z: i+ s' \' t9 P# w
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0. d7 ]8 Z: S9 H* m7 b% b
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您. t- u" v4 l4 v- @
% b8 g, ^/ }# D3 X0 r7 r
按鍵開關 第一次 on時,開始計時。( Z9 B7 Z, `1 \' T8 z
                 第二次 on時,停止計時。
! u5 z. H/ C- P# g                 第三次 on時,開始計時。
9 r) }+ n; |, Q4 {/ y  u2 }5 Z' _3 s" o8 a+ B
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?  l+ d" T; \2 z3 ]4 G, D- L
平行輸入 / 平行輸出2 U9 v6 u' F; ~2 h
平行輸入 / 串列輸出
" `' U! _) n3 X串列輸入 / 平行輸出
& `& u0 G  B  D串列輸入 / 串列輸出
- m4 {5 G6 L' f' V哪一個啊@@...0 T% R1 t' f2 t% v9 ~: \) a
我都是看書自己學
: f5 u! {* i9 a( i所以都不會咩
( I- `" L7 x$ F$ `8 X' w拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
. I1 S' P5 |4 ]/ p今天問老師  ; A" x  j' h! K2 |' N% t) i
可是老師沒說到暫存器的東西
) j$ \3 V! m3 R$ r9 P9 y8 r反而是說
8 W; d2 K5 r/ bIF CLK'event AND CLK='11 r7 U9 S) o/ A% `) k1 N
counter := counter + 1 ;
# V! q" N: L7 s. z4 S* F: q- \/ W7 M% ?. a0 }% O4 x
抓counter (0)   ----第一個腳位?!0 |( ^) K- x2 F6 @2 |
給counter位元多一點之類的" v0 r0 d* z3 M
( w: ^" W- m# G/ B, v
00  01   10   11% V* U8 h" q3 j+ j
最後腳位為0   ----Run
; T: B0 L2 O" |# K6 ^. `, h/ V9 j. j最後腳位為1   ----Stop0 b( B0 W# y, i4 G1 b" I
+ T% G2 X7 J" Z, i* R" W
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。; \* r/ n3 H  g$ a
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,1 u6 V3 I+ [7 ~* }4 {( e9 o
跟你說原理你又不去想,要用你懂的畫圖的我又不會,1 b- w( u  {) X9 d" M! n' h4 {
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 03:26 AM , Processed in 0.199526 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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