Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 9 M2 d- w5 n" f* ~
USE ieee.std_logic_1164.all;& i8 Y' u) [* z9 d
USE ieee.std_logic_unsigned.all;2 C5 g0 h2 K% K' q
ENTITY counter_backwards60_seg2 IS; [1 a; u/ X6 V" w; p$ j2 g6 s
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
3 K" G2 c+ ]. F8 n3 K0 W                 Ring          : OUT STD_LOGIC;                         # x) F- n0 ?+ J
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        1 S4 N9 B: J& C1 J
END counter_backwards60_seg2;
/ K; }1 o. {. x, n% m$ {ARCHITECTURE arc OF counter_backwards60_seg2 IS* u9 @( n+ Q" o) h
BEGIN
' e# d& c4 W) M) B. Y  PROCESS (Clk)! I" m7 }4 Z% |) v" Z8 G& G
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);9 ]+ \6 V4 A7 ?7 d9 N) U" _7 d8 J
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
. n+ X1 a* S$ w: d  BEGIN7 b* p6 I3 o! J$ V  n
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
! Z' _* r2 ]+ f4 G        ELSE IF (Clk'event AND Clk='1') THEN " n) Q8 C9 j9 R' P# Q5 }
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                ; l3 t. O7 c4 `
            ELSIF Ena='1' THEN
0 X* Z2 V& }7 g1 h, O3 J2 P+ H4 f% ?2 y               IF (imper0="1001" AND imper1="0101")THEN+ T. [- M) B" t! ~' k3 g4 F& D
                  imper0 :="1000"; . y9 U" V0 W* n8 g
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;$ z! Z( K+ P$ H) ~2 z! a
               ELSE imper0:="1001";
  P* n9 z" v2 w, i2 f/ P. w# B4 Q                    IF  imper1 >"0000" THEN imper1 := imper1-1;
8 s) p! B8 U5 v- K1 ~  i4 U* i                    ELSE imper1:="0101";                      6 a! s8 N) T2 F* g% V* C
                    END IF;
2 Z+ S$ V, o) `9 B/ |0 u               END IF; # ^; ~( N; ?9 U, G
            END IF;4 n4 O. s: F" j, o4 ]% s- _& r
        END IF;
, a1 X; O5 u, A+ V( E" h- G  P     END IF;               
  w4 U' ^2 @9 |0 l0 }+ F0 G# d# ZQ0 <= imper0; Q1 <= imper1;
/ h( @5 ^0 J7 \8 O6 W7 g) s' _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));         
7 e# w9 ?6 i+ Y1 e/ h   END PROCESS ;8 b& d8 E& y0 j; u$ C0 L
END arc;

. T' @) B# g" f. z) W; c
. H/ c( l3 K, i# ^4 ?/ Q1 Q6 c上面是我的倒數60秒程式- o- L1 V  i- s4 U+ q  r
小弟不才( x! w9 v6 {- U  _+ J
不知道怎寫停止. W" N. e- ~& R& t5 ~! V' ^
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;) ~1 R" ?1 S* e3 [& W
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,' F' j) N# ^, J) s; X/ v0 }
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
* f0 ~; _+ E# A: W跑一次的宣告是要放哪一行...?
  C4 T; Y! x4 g' Q) U還有一個問題想請教
& |$ t8 T/ J$ `4 h2 E3 Z就是counter_backwards60_seg2是我的分鐘# u' a. o! Q/ K% g
counter_backwards60_seg是我的秒
1 M% \; a+ c6 S$ X1 \. E現在就是秒那邊 10→9秒的時候Co也會進位4 T1 C. Z" y/ L1 f/ E
秒的個位數有延遲 所以導致10→9秒的Co會進位  Y6 {8 g5 S! m) Z4 T) R$ |
程式分跟秒是依樣的 (Ring就是Co)
& i- a; _& O. B4 J: K* p& A5 B另外 分鐘怎從60開始
: N8 s  B; |5 }9 a  i& v/ k( {" d4 ]因為現在我是00:00開始倒數5 E! G/ K( Z; f' B
我需要在counter_backwards60_seg2改哪邊?
8 z' P, ~) K( X" `9 q9 K. d& a5 x% U* N' u& x6 c/ z( Z
6 c8 r# y' b6 P1 F
我奇摩即時通:xt_9000
& B: N' }0 A- ]: C/ Y' i3 ^希望有好心人幫幫忙  w% N8 v2 C( y1 z: E
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,9 d# I& S: R+ W# w. u
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答* ?) @- J, A/ g1 S, W6 {- L
我想問說
9 l6 W1 P3 d5 y8 ~: _2 {5 c/ Q2 Y怎從"60"開始倒數?
7 N  ~3 _& C+ K" h$ d60→59→58→57....→001 C% x6 r4 y* Y! V) o6 c8 n) c
因為我弄出來都是
; Z, }3 I9 J3 J% |; v0 e' I$ J00→59→58→57....→008 `  a/ e7 S% ~5 [8 d8 y& w& Z8 A
/ c4 q0 b: i" J! s3 R& X' s& Z2 f
: ^7 w- [: M8 v* F6 C3 m
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
3 @. w/ a9 e* o5 C8 d$ w! G" N7 [& `7 c" h8 ?, X9 k+ z
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦: @- F' f+ D- {/ ?% H
因為我要做60分鐘倒數5 R& X' m& I) x$ d& F+ C
所以要60:00 →59:59→59:58& s7 e' Q& ~: w/ U2 T0 \8 e/ G# C
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
( C) O8 [' O9 ~5 U7 c     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
& p8 D7 `" {, w# H- m+ d2 [我是用Quartus II 電路圖接法. T9 v! \: m9 c& v4 y; O; Z
60:00(現在是00:00) →59:59→59:58+ }2 I: T% X: k! ?% W6 K% g
8 F! V7 {. d7 C" |3 {
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@# e, w  y+ @; e- N' W0 m7 I6 G) W7 s
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 8 J, s5 D" g# n" f. h
USE ieee.std_logic_1164.all;
1 d- H3 r, w4 x- F2 e- h$ r' Y6 \USE ieee.std_logic_unsigned.all;6 P6 m8 \- d1 |' t
ENTITY counter_backwards60_seg2 IS3 B1 M7 h6 l* r) i* ?$ }
        PORT(Clk        : IN  STD_LOGIC;           {7 D  u( C/ H  E. n" V% r
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                1 R. P: m, w8 A& h
END counter_backwards60_seg2;
# _+ ?( f& [3 D0 c6 JARCHITECTURE arc OF counter_backwards60_seg2 IS
% O1 H2 x: v& I( R& ^3 h BEGIN% D4 H5 y% {$ d* j, S) {
  PROCESS (Clk)
9 ?! o0 d1 K- g2 ]1 ~     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
" C; F# }1 Y6 H$ B8 o% d! X' \     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
% ]" {3 u8 K7 f, |8 F  BEGIN          5 D. V# O3 C) N% P# y7 @
       0 @" T' `& |  X! e" ?* y
       IF (Clk'event AND Clk='1') THEN           0 T% I  ?6 n8 Q
            
* m8 i$ h& j3 d: T2 m/ ?8 d               IF imper0 >"0000" THEN imper0 := imper0-1;
( X& c4 ]0 x! P) ?8 A: F) u               ELSE imper0:="1001";
; T& F% t# Q1 W4 r3 H7 u" g               IF  imper1 >"0000" THEN imper1 := imper1-1;
( }; ~! K/ W+ F8 O" ?               ELSE imper1:="0101";
                                  3 h( d: w7 [6 a2 U' w
                    END IF;
! i. G" F% P3 _1 @: K               END IF;
; N% s! E/ ?( C2 r: D/ [9 W, U, X3 \             END IF;  
9 K5 ]1 Z( ?& H# h! }" p         Q0 <= imper0; Q1 <= imper1;  $ @, d/ q6 Z6 T. ]: |% i! z* k
   END PROCESS ;+ C& v/ G6 B+ m! u
END arc;% y  \: X/ f" m' E
以上我精簡了一些 也能跑模擬圖
% D' Q3 D9 e) j但現在重點是我該怎寫60→59→58...7 _) `# \; `: f6 Y* c/ K0 x/ P
初始值60要怎寫.... F) ]: N5 G9 X# J- p
是要多2個input 然後給他一開始的值?
5 e# H7 C  t' E' j, _但要怎寫啊@@...% [: Y3 m; h9 Y
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"' E$ `/ b6 _4 O1 B  Y* @
但請問 我需要一個另外程式
1 ]/ E$ ]9 `+ x4 P+ h* [7 E* V# R0 f7 f去控制暫停開始和暫停# |% L. K- P+ L/ h/ _( ~, w* D
LIBRARY ieee;
; w" d# j4 E3 [1 OUSE ieee.std_logic_1164.all;4 D* [4 u' {  @2 g2 i! {/ R: s
USE ieee.std_logic_unsigned.all;, l' W5 U& q8 p; g" v  b1 D$ ~
ENTITY debounce_v IS6 s  ]5 x& L# j3 k- L0 L
        PORT(CLK,PB        : IN  STD_LOGIC;8 i3 {1 M- ^$ l) l& c
                 PULSE        : OUT  STD_LOGIC
# n& k7 g9 ~2 ?; b7 {' q) v# N                );
8 @9 p* K3 T, `END debounce_v;- C3 F$ o1 ~, Y2 s9 u
ARCHITECTURE arc OF debounce_v IS
! r: F. ?: k+ p* b, N" J( T! [" O SIGNAL imper : STD_LOGIC;+ K& h# P' ^+ M: ^
BEGIN) N; @6 \) I$ Q8 C
  PROCESS (CLK)$ W+ s! c0 E4 w; ]8 b, V
     VARIABLE counter : integer range 0 to 49;
0 o# W. I8 Q% p4 N/ s" o* y  BEGIN1 f% N9 {/ e8 t
   IF (CLK'event AND CLK='1') THEN
& ?6 j2 A/ ^% K          IF counter = "1" and (PB = '1') THEN imper <= '1';
. a' y2 l" x" m# w; {      ELSE counter := counter-1; imper <= '0';; _3 W! [3 z: I+ C! q
      END IF; 9 M' K) |7 {) B5 V  y
   END IF;' x7 C! @+ f6 E7 c: V8 |3 i3 X/ \: f. _
         PULSE <= imper;   
, l4 i# h& J& i* ]) m, P3 w   END PROCESS ;! @7 O) M. \6 i3 C4 Y7 R
END arc;
2 b* [+ a3 c; v( x  {6 `8 b  a: X) B* u  a- [
這是按一次減一次, w8 R) U# I/ o8 _  f
想要按一下開始 按一下暫停
, D$ x' W+ h9 D0 e# e
' C% Y. P" J& r! ~ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。( O% h0 q2 ^- k3 K; g$ t
/ ?9 }+ V3 {( a* i. }
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
5 f* ^: F# N& t% a  V1 V有需要暫存器??
, Q% ?8 T: M* F2 p% E  i3 W6 Z5 q2 f那是震盪器→先接到開關→接到暫存器→計數器2 k' w' J; N* O  W2 C; A8 X* B2 `
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
, s. A- @) o9 A, Z) {5 }     VARIABLE counter : integer range 0 to 49;
% s* M& m9 R4 I) \8 |3 h  BEGIN
# j- W. J) V9 V  c  ]+ p" k" x   IF (CLK'event AND CLK='1') THEN
' f( `# ^( t- G* T* i          IF counter = "1" and (PB = '1') THEN imper <= '1';
2 X6 i. ^! H, W2 C* r% j5 W% T% o      ELSE counter := counter-1; imper <= '0';
* A. R  l3 x, l% q9 y% S      END IF;
2 F4 S  [4 b5 B/ ~0 ^( I能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作8 x( h' {3 F/ w$ k" M+ S
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
$ F/ P9 O! o) w. i) b" F2 t  BEGIN                  
8 Y& V% I/ `4 s2 R0 f+ u3 Z) L   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
" \/ |* D. O9 L' s' U; q          IF counter = "1" and (PB = '1') THEN imper <= '1';  
# E: ~( _  D5 ?+ A                -- 如果counter = "1" 和 (PB = '1')就把  imper設為14 t: }( D6 O  d" c# l
& z) }/ x7 L$ @) Y6 {' \
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0" r& {8 l( t+ N* O: T, j6 z) e4 u
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
% X" z/ _6 x- r
9 h" Y2 Z" S$ S/ _" ]8 T6 @( Z按鍵開關 第一次 on時,開始計時。
' M. r) }, x6 b7 N# q                 第二次 on時,停止計時。
1 J+ a, ^, l: R7 h; Z                 第三次 on時,開始計時。$ X# t+ j8 B+ t1 |% e$ _& b$ @

/ i4 h, n6 A3 V; Y% q這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?% |4 a3 L. v! N4 M% z- U& _3 ^
平行輸入 / 平行輸出) M- p  Y4 V. n& g
平行輸入 / 串列輸出
2 X3 C1 }7 t) ^0 |+ T/ o6 R串列輸入 / 平行輸出
( q4 C" B: n3 h1 d3 t! ^% S串列輸入 / 串列輸出3 I0 e+ _3 q" d/ L4 D
哪一個啊@@...0 }! m  J- v9 s9 H
我都是看書自己學
! @8 O- n3 O! @( l2 B* ?: b$ e所以都不會咩
5 Q' K# I, `& k# F5 f# u" a5 i拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
* e: ]3 o; F6 K; y' @今天問老師  
" n  ^4 l; V" g可是老師沒說到暫存器的東西
: y6 ^+ H0 ^( m( y! M反而是說 % u$ n5 n% m6 g+ ?. S
IF CLK'event AND CLK='1. _) a) X/ d2 V  [4 f6 ~; G
counter := counter + 1 ; / S9 N; v% B1 p' }3 b5 R" ?2 T
( X3 ]! F# W1 u
抓counter (0)   ----第一個腳位?!
+ V; a" H$ c6 r給counter位元多一點之類的
% k( t7 h8 x9 I" L" P( N  r6 `$ K" l& K
00  01   10   11
! @+ Y) I1 n0 f9 E2 Z* J最後腳位為0   ----Run
' b7 [& [* Z& X- v: w- l最後腳位為1   ----Stop
* h( i3 X7 V( N1 F( l5 P' ?* C: l9 ?' @( {5 V$ ^* ]& N
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。* ~: Y+ C. q( Q6 W; U% J
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
8 N+ j9 ^; S: g/ g) v! p: n跟你說原理你又不去想,要用你懂的畫圖的我又不會,
$ |' n" \9 c& H$ V難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 06:51 AM , Processed in 0.127016 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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