Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; * B* M9 d* L4 u0 F/ @
USE ieee.std_logic_1164.all;
- A+ h1 l1 l2 G. r0 Q0 A; e' [- p! EUSE ieee.std_logic_unsigned.all;! B& h. R6 ?# y! Q( l9 Y1 @2 d
ENTITY counter_backwards60_seg2 IS, \: Y3 K6 ^% L# e
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
- r8 N1 K+ ^# x  k* j. N( I                 Ring          : OUT STD_LOGIC;                         , g7 I/ D  q$ e9 v9 F6 \, z
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        . Y0 G8 v% U4 g; R7 U+ |
END counter_backwards60_seg2;
0 W, a0 W. F& V2 CARCHITECTURE arc OF counter_backwards60_seg2 IS2 s7 u/ e& f! M  Q0 `
BEGIN
) Q/ I$ N/ |4 E+ w* A! Z% t( J8 u  PROCESS (Clk)5 g" y; B6 T( L
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
! s- n+ x( K5 M5 O6 t     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
( i1 e' p  K! {( r$ n+ p3 C" H- h+ o. L  BEGIN
* Q, G  ^2 z3 Q' n4 o        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";! ?/ D+ f( t, D( }7 J( Q- e3 g
        ELSE IF (Clk'event AND Clk='1') THEN + r. y$ ?# y+ L
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
" Z8 b$ B8 u$ `& q+ l            ELSIF Ena='1' THEN* A& R3 H3 x# n/ @$ V+ B' b
               IF (imper0="1001" AND imper1="0101")THEN+ t! X! s; _5 A" o- n7 }& y
                  imper0 :="1000";
9 X" j/ i( c' H               ELSIF imper0 >"0000" THEN imper0 := imper0-1;! F- C; N! L: h( m) C4 u: e* q- o: K
               ELSE imper0:="1001";4 @5 h; a4 d- C
                    IF  imper1 >"0000" THEN imper1 := imper1-1;7 F( d/ w0 \8 J/ r/ E
                    ELSE imper1:="0101";                     
' z( A. K6 z; n  G8 @# Y" N                    END IF;/ r! i/ x6 ^7 s: u
               END IF; % y. t$ ]' `2 k" W; I
            END IF;- b+ k( c* q" Q2 m% ~3 e8 U7 ~
        END IF;
7 }. |1 B$ X5 N% X& g4 u8 B     END IF;               0 W" m6 K5 C% S+ M- e# m  [! M4 e
Q0 <= imper0; Q1 <= imper1; 2 O) N2 T. P' u) G" w6 G( t
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));         / @3 R) |8 Q: s* |6 a8 x. `3 B
   END PROCESS ;
! l7 d* d7 w, L* G; q, bEND arc;
; f/ W& F. y. X# A1 w( ~" V0 O

1 s% H/ I9 c" D/ J4 K: ~: ~, f上面是我的倒數60秒程式/ A# n, M: {+ f6 i$ M5 Q
小弟不才
3 W/ C# c8 O( x' w不知道怎寫停止
6 X/ Z7 x" J( C+ k只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
7 P' N" q/ E5 I! h1 o; I& |, c7 T要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,9 P5 R2 o5 G8 W; o' F; A; P
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
) ^) G& A, \; w) j- o跑一次的宣告是要放哪一行...?  ~: Y+ ]: K, Z0 v/ c
還有一個問題想請教
% t/ `" E9 {: q9 Z$ w就是counter_backwards60_seg2是我的分鐘
6 B) Y5 ~+ w  H" Q/ D" Lcounter_backwards60_seg是我的秒  K  F0 R/ p6 z
現在就是秒那邊 10→9秒的時候Co也會進位
, _$ @( B; V8 w& P/ K  o秒的個位數有延遲 所以導致10→9秒的Co會進位
- F2 c  p3 B5 \! c$ p, `8 t( p% X程式分跟秒是依樣的 (Ring就是Co)
  t0 Q4 ]6 P' d: F另外 分鐘怎從60開始
" U2 N2 l$ i! D; \- a0 o: `8 T" x因為現在我是00:00開始倒數
! A: g  g) `8 Z$ t4 d我需要在counter_backwards60_seg2改哪邊?
# n! f( w& d$ x( E. h! H" }3 P3 h, j% ^4 i

! W6 c1 Q  v8 G6 w我奇摩即時通:xt_90005 ^& N' k1 [: O" A
希望有好心人幫幫忙* a. e, @7 n- C* l2 @! L9 t
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,4 s2 K: K( \# ~- Y. U) i9 |
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
1 o9 Z8 e( k# T4 ^$ G我想問說& B: |; X; u5 e" @  b% c) D' `
怎從"60"開始倒數?
/ d* l) @2 c. f# `% g4 e60→59→58→57....→00
- b5 r& G1 C0 i/ A& q- \因為我弄出來都是( g8 X  P" d% j2 Y+ R
00→59→58→57....→00
; R# l* ^: T$ O- ^$ \5 c4 N1 H; _7 t
0 Z. B5 ?  I/ j5 T1 G
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。/ A" N2 F$ a+ r3 {( c0 s
5 Q: ?- i4 j* X8 X
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
2 \' O& U4 h" d# S- F因為我要做60分鐘倒數! h0 ?, o: B5 k8 F) l
所以要60:00 →59:59→59:584 [8 C4 y2 E, T1 r  L- w; _
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then: u  q6 H* B; I% r$ V. I. \
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
2 j( V% O9 Y; r& o: n我是用Quartus II 電路圖接法
) `& G, z) C2 }  u60:00(現在是00:00) →59:59→59:58
) ?7 m$ L9 i( t; D) {" c1 j9 {& N. R! I
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
5 \$ }, U( i) x' e) e$ N0 I, O小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;   q# @4 V% i5 L" N
USE ieee.std_logic_1164.all;
( s9 V# y' ?0 j0 ^0 VUSE ieee.std_logic_unsigned.all;
: b" o' N: o) A  @3 o& f8 N8 mENTITY counter_backwards60_seg2 IS
1 a) ]8 g1 ?! y; S9 K. Z        PORT(Clk        : IN  STD_LOGIC;         
3 ?# _( y" C( \                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                0 I8 M/ C# N. ?2 I( H1 j0 i, c
END counter_backwards60_seg2;2 k; t2 W( \8 k* x
ARCHITECTURE arc OF counter_backwards60_seg2 IS4 r; p7 l5 K6 a: r
BEGIN9 ~0 y! [  I) ?' i4 P. F
  PROCESS (Clk); b! b( ^7 Z8 {/ y
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
  J! e5 K  K& I; y# v3 i     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   : u' d6 W. G4 h* m  n- b$ Z* y1 }
  BEGIN          2 f% l  ?: P3 W& ^6 e
       
3 m8 G* ?, e+ U$ M' n0 o       IF (Clk'event AND Clk='1') THEN           
+ {! {1 C" T. ?+ n- v            
+ J1 x4 G6 I2 @# E5 Y  U. t               IF imper0 >"0000" THEN imper0 := imper0-1;
) P: Q  m7 A! f) b               ELSE imper0:="1001";' l$ R% z4 F( D3 Q1 q2 w+ I
               IF  imper1 >"0000" THEN imper1 := imper1-1;
4 W/ m7 n( }; J; j+ q               ELSE imper1:="0101";
                                 
6 n* w8 }7 r0 O6 V1 O# ?+ p+ j                    END IF;7 a& ?& w7 s* u7 \
               END IF; 5 M. v1 p, T8 e. P  Y4 O
             END IF;  3 ]9 g! `, F& y) @# J$ n
         Q0 <= imper0; Q1 <= imper1;  + S& }3 e* H6 f0 b; a: P0 g9 ^! I
   END PROCESS ;
' d# W; ^* K8 \" x. Q: nEND arc;) ]# w9 O* j) ~0 n' A0 A' B
以上我精簡了一些 也能跑模擬圖+ h1 r4 O# p- S
但現在重點是我該怎寫60→59→58...
; s5 K  s% d% P( \4 W( l- B初始值60要怎寫...
- D4 r( n3 v  V: v) P6 [" X$ C是要多2個input 然後給他一開始的值?
5 P( D/ I- V% r7 X5 a9 Q但要怎寫啊@@...4 p9 r: H) [) |; {! t8 O
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
9 t! ^: e. k7 O0 B: F但請問 我需要一個另外程式3 v& ]. O1 C. w4 \/ S8 I6 d
去控制暫停開始和暫停
( c4 f* K% l, S& U5 FLIBRARY ieee; 9 Z; J% Q0 I) Y& g
USE ieee.std_logic_1164.all;- A" c6 R7 \( k, w
USE ieee.std_logic_unsigned.all;1 Z( a7 z. _8 L% K* {" g
ENTITY debounce_v IS! T- Z; I2 @. i2 i8 \3 l; F) q
        PORT(CLK,PB        : IN  STD_LOGIC;+ P- g2 X9 Z0 ]9 @* Z; ?' \- V
                 PULSE        : OUT  STD_LOGIC 2 ^( Y' c0 D+ f# V
                );
' i) Z; T8 h) F1 mEND debounce_v;: J: ~9 S1 c* v% f9 n! v
ARCHITECTURE arc OF debounce_v IS
' L4 t9 P' y' }& s+ \; b SIGNAL imper : STD_LOGIC;
  d9 M$ O% V# @6 Y: P. |8 l BEGIN/ j+ |7 s# e' X1 M% A8 r
  PROCESS (CLK)3 K! q6 E' f( @, P! F
     VARIABLE counter : integer range 0 to 49;2 ^/ Z  u1 T+ N7 Q) l, L
  BEGIN
6 u2 G. h2 C* F1 `4 Q/ J0 ]! B   IF (CLK'event AND CLK='1') THEN$ O) }# M# ~0 ^4 |" ]
          IF counter = "1" and (PB = '1') THEN imper <= '1';
% E: {/ m& G5 h/ X1 w, V$ \      ELSE counter := counter-1; imper <= '0';
  E) a& V1 g2 O* A! g6 k- [+ f      END IF;
( `* |% K5 f9 O. m2 x   END IF;
+ ?8 r2 k1 z) h5 Y& W4 S         PULSE <= imper;   
: M0 F8 L$ K4 P6 F' o   END PROCESS ;
( Y( `! w9 @2 Y7 fEND arc;
9 J/ S8 X7 S8 v; |/ V5 q. Q! {: d6 w3 o5 E# r5 _& G: y6 L
這是按一次減一次6 e' z" `* [$ Z- y
想要按一下開始 按一下暫停
3 H0 z0 L5 d9 h  ~2 k
+ k) g/ n: i) W: lps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
$ q% C9 z7 R1 p  Z9 a2 o: D; f* }6 w" B" C7 L
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"+ ?7 I* z# _1 O
有需要暫存器??
  N' ^8 p% j0 H7 H5 p% [那是震盪器→先接到開關→接到暫存器→計數器# g' t, d- N* ?
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)$ f4 h. x8 b( W: H3 n, H3 w( ^
     VARIABLE counter : integer range 0 to 49;
. Y. w+ a  [6 Q7 ]+ R) h0 q# g  BEGIN. l$ ^. E8 r6 p% A; U, D4 ^+ P/ u6 Q
   IF (CLK'event AND CLK='1') THEN+ `8 v. F% o6 h- f( z9 Q! G
          IF counter = "1" and (PB = '1') THEN imper <= '1';3 M5 o: C7 o8 ^( T
      ELSE counter := counter-1; imper <= '0';+ t' H1 s4 |6 B: k
      END IF; 6 J3 H) B: I' T' H3 i
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
! Z4 Y' M& p0 o. y5 A7 L# U     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數3 o* J$ z. ?2 f3 f5 Q* c. e& w; ]
  BEGIN                   2 v. ^' @1 {: p$ r
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
0 Z6 K5 @3 [. a' v& [+ H          IF counter = "1" and (PB = '1') THEN imper <= '1';  ( O) m! v5 B; P2 X+ N! q
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1* B1 y: ~+ D9 o1 W& g5 c$ A
2 s6 X4 A- M2 V2 s8 r3 j
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
- w# r$ ?4 N4 U( W3 |" j      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
0 P  h6 m& |  t% R: s' Z: v. u, p! _$ z3 v) v1 R
按鍵開關 第一次 on時,開始計時。
& Q( f8 v0 S8 u: s- I9 @* e- Z% B                 第二次 on時,停止計時。) s/ T  X- C8 K' ~
                 第三次 on時,開始計時。! U1 A& H/ b. M# l! B

$ r/ W- c: `0 O( _* O這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?4 G3 I: ^0 K8 W4 q$ v
平行輸入 / 平行輸出; K, v1 o2 S7 J, F
平行輸入 / 串列輸出
$ N- ]* s  n! B$ H' R串列輸入 / 平行輸出' D! }# g( _, M
串列輸入 / 串列輸出
/ v; s8 u; O( v* O! T: [' q. F0 f哪一個啊@@...  ]& Q# f/ R2 T, d
我都是看書自己學
" r& Z- @- q* A" @所以都不會咩% I& q3 n: A' |- u- i( W
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!! e) J; p! K) h6 W
今天問老師  
' C& m) o) L) I( w& ?; g) W3 F可是老師沒說到暫存器的東西
, T  u! \- d% W" p反而是說 # N& X0 u7 O& j+ z- D( V* c" F) b6 q
IF CLK'event AND CLK='10 G. T$ T. H6 N5 c) U6 O. K
counter := counter + 1 ;
7 V/ P# @2 b, K. _3 m* ]4 \% _9 Q; V- P7 [
抓counter (0)   ----第一個腳位?!
7 ]4 t- t0 r5 p' n給counter位元多一點之類的
1 Q. e) _# y( `$ S3 O
* F7 h5 e8 \3 {& t# g00  01   10   11
6 `4 \& n$ @5 }9 j最後腳位為0   ----Run$ M8 B  Z1 K. z" i0 g
最後腳位為1   ----Stop
' j& a- A/ u0 `( M8 y9 U
% g- b" Y( Y' X9 Y. I可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。- O4 o! j) P8 c
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
8 Y: W/ q/ X" _& |7 }5 D1 k跟你說原理你又不去想,要用你懂的畫圖的我又不會,; c, ^! d/ c7 C3 Y  I7 j
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 08:21 AM , Processed in 0.155020 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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