Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
: h/ L! I7 {1 }, }. g0 i+ ]USE ieee.std_logic_1164.all;
6 k6 M0 V0 `) }/ mUSE ieee.std_logic_unsigned.all;
% ]1 I$ ?& k8 T. ]' _; WENTITY counter_backwards60_seg2 IS
/ i8 W0 I6 X+ }# J7 g        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;5 z4 i. F, x4 L! }2 K
                 Ring          : OUT STD_LOGIC;                         
$ ~: W% Y% ?, K( v4 h                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
' @0 ?  c* N* \END counter_backwards60_seg2;3 A! J# L, t8 @( [) Y* h
ARCHITECTURE arc OF counter_backwards60_seg2 IS+ h3 t7 ^. }, Z% Y4 ?
BEGIN
: }9 t6 x  n5 `* H# ~  PROCESS (Clk)
5 T# S; j! j; [$ \! @1 Q) ^0 f; D     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
1 B/ l1 u/ u2 h5 D     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);5 ^: r$ A+ }) P( c
  BEGIN
: e& e3 l% |# Q  j; C0 Q        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
+ |1 j* \, O* ~) f        ELSE IF (Clk'event AND Clk='1') THEN
+ e4 C% |4 a  [( l            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
) t" L: F& I( {: e  d            ELSIF Ena='1' THEN6 T& a/ M$ F0 O$ B8 M
               IF (imper0="1001" AND imper1="0101")THEN
3 j1 Y  M! i& ?. ?# G, J                  imper0 :="1000"; 5 Y/ l+ ?/ j, S
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
  {! ~. L) }  W) W' U* P               ELSE imper0:="1001";! e4 N7 G/ v0 T3 o" l& e3 {
                    IF  imper1 >"0000" THEN imper1 := imper1-1;! b3 d" `3 S0 s! [4 q
                    ELSE imper1:="0101";                      0 L' Z% F0 H0 ?3 @( J9 ]
                    END IF;
$ D8 }* B; h# F' ^+ [+ o               END IF; % S8 x1 s5 V. ~
            END IF;  d  S3 Y8 G3 }. m% |8 p$ j: r
        END IF;: i( ^" Y6 c7 x7 ~) H
     END IF;               . m% W3 R# U: e
Q0 <= imper0; Q1 <= imper1;
4 A( V( C! |5 E- U/ @2 bRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         , B+ D) d( M/ @8 e& e/ Q
   END PROCESS ;
4 u* p% N" c: q6 cEND arc;
" y0 g$ D9 K$ {( I4 d# Y
8 }2 l6 u/ N) j/ e, U( ], ?; A
上面是我的倒數60秒程式
; \' d7 K: [% ^% v9 V/ L  t! V小弟不才: j8 P  u  r3 L3 s
不知道怎寫停止
" x% m3 j2 Y! I: I只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
* |' y5 ^9 S$ _. ~, _要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
, K, ?& I6 w: W; E' r- x# g除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII4 K& o6 |2 L( B, q4 G- m8 Z1 X
跑一次的宣告是要放哪一行...?, x% m, B1 X. v/ c
還有一個問題想請教6 H4 A$ g% k: |$ [! I
就是counter_backwards60_seg2是我的分鐘( m/ Q3 s2 X9 a0 p3 ]+ M6 k
counter_backwards60_seg是我的秒% [, X4 A$ {& ^# o4 d6 k4 H
現在就是秒那邊 10→9秒的時候Co也會進位' S, Q6 F3 R4 K$ {3 Z9 {
秒的個位數有延遲 所以導致10→9秒的Co會進位
  e! \- O5 V: q3 K9 }程式分跟秒是依樣的 (Ring就是Co)
) J; f7 U; ^& n: R* N" ]* `$ }- b另外 分鐘怎從60開始
' W3 \% m. s1 ]+ r0 r. q因為現在我是00:00開始倒數
) U9 }6 w: @+ z& \: G我需要在counter_backwards60_seg2改哪邊?" F' O8 J% S2 I0 e
) c7 J6 X; `* H; F' K
5 c) G6 g* }: L6 o2 v
我奇摩即時通:xt_9000
8 R5 }1 F) v; U$ v0 L希望有好心人幫幫忙, y$ b4 Y# e. j$ s. M$ G
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
0 h8 V  v* E- b6 `3 r) @( K看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答# t9 }. o+ t6 g
我想問說9 F- D' a: |  s% f  n
怎從"60"開始倒數?. j3 U! {/ \% J; a  I3 Q' c, {/ Y* A
60→59→58→57....→00
( a- M; I$ O* j% S7 }6 U因為我弄出來都是6 W0 L3 a, f1 H. e) N1 N, D) [
00→59→58→57....→002 z& p. O4 y! l" w& Y* Q
5 G3 W0 J- ?$ A  E1 M  `
7 d# ]  z4 p) D: \0 o- `& k
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。8 a4 E' J$ W# k
' @7 ^- J0 N8 j, t$ x" U/ h; c
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
: T, L8 q5 A" Z1 Z8 |因為我要做60分鐘倒數- J* @- [4 @3 ~4 i1 [
所以要60:00 →59:59→59:58
! N1 U, Q; C/ L: h7 J" h我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
9 u: P7 `: D4 M$ E     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"1 C! x- m: u  `% O
我是用Quartus II 電路圖接法
, ~: @4 c8 P1 x: L8 g, e: O5 I/ u60:00(現在是00:00) →59:59→59:588 A7 m4 v+ [. Q" i
/ ]- z: F3 L+ i+ T- I0 l
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@( E2 a  i0 G: ]8 A" [( R
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
5 U( c  }+ B3 y* X3 {- X9 p" SUSE ieee.std_logic_1164.all;
* Q( ]% @! w% `; VUSE ieee.std_logic_unsigned.all;
& M4 @" i& D' j. F$ A6 [ENTITY counter_backwards60_seg2 IS
* T# l$ c5 t( K3 g0 J8 U        PORT(Clk        : IN  STD_LOGIC;         
6 d6 t' W( w+ x                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                # k( x- W0 |9 z; \) ~" S
END counter_backwards60_seg2;1 g+ r, W% V1 Q, W
ARCHITECTURE arc OF counter_backwards60_seg2 IS
$ u2 Z9 ^) n) g- {* l BEGIN! k- I+ ~$ _% E! U
  PROCESS (Clk): A, X' v$ ], N3 p( p  h% J
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
1 ^0 |4 Y4 T9 N6 \) _. U     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ! A- x* T: e0 v! }
  BEGIN          5 G& F' V- O% J2 e3 Z" {" @+ K
       
# N, c3 \  _$ f1 z6 `  S5 C       IF (Clk'event AND Clk='1') THEN           1 w% t9 m9 X9 P  j8 h2 i
            
( w$ Z+ ~, n. p: H8 o/ b$ y               IF imper0 >"0000" THEN imper0 := imper0-1;2 h; u1 R& U1 W0 D& h8 k5 }; K' e
               ELSE imper0:="1001";
1 q; O% a1 C, {9 K+ r5 k( f               IF  imper1 >"0000" THEN imper1 := imper1-1;
: u3 x0 _; a: o' g6 q' I$ L. N               ELSE imper1:="0101";
                                 
8 I( ]& z, M' L- j, [0 ]. S2 y) a                    END IF;. V6 ]% J5 h" f% Q
               END IF;
1 B0 F* }; O) b             END IF;  6 w! |% u; _! n# B) P
         Q0 <= imper0; Q1 <= imper1;  ! h- d" x& _  w4 P0 q
   END PROCESS ;+ @: p. X2 H  Y3 K
END arc;
# g& l7 v; f# X9 V' Q5 y  E: _以上我精簡了一些 也能跑模擬圖
, O0 x0 c6 z, B0 x, `) g但現在重點是我該怎寫60→59→58...
1 T( |- {' s1 ?6 Z, W1 G初始值60要怎寫...! \' r; l, a2 n! G! f
是要多2個input 然後給他一開始的值?: C. X6 c( A( \& g# [
但要怎寫啊@@...
8 L5 e6 ]5 Y  [" s' x
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
3 {2 v1 L) A9 L$ x2 Y8 j但請問 我需要一個另外程式
2 B4 i1 J7 [; ?+ F去控制暫停開始和暫停
" M, a" x' ]6 V: J! i6 q* zLIBRARY ieee; ; g# M, g+ k, v/ c) H
USE ieee.std_logic_1164.all;$ i& Q* [/ |8 Z% V; q
USE ieee.std_logic_unsigned.all;. H: U2 a" R) `* L$ n1 {( p
ENTITY debounce_v IS- v8 F9 m3 k9 m& e
        PORT(CLK,PB        : IN  STD_LOGIC;& C) c) p! Y7 m" W6 a
                 PULSE        : OUT  STD_LOGIC
" r4 T. k; V5 D& A4 c( t9 H3 Y4 D                );* L# x) H- L  y0 W0 w# S0 u
END debounce_v;* V9 C6 R& W" o. |* X& D% h
ARCHITECTURE arc OF debounce_v IS
1 C" x% s9 l6 C/ V5 g' q SIGNAL imper : STD_LOGIC;
1 Y. M6 h8 n5 r8 X1 Z3 `% o; h  e3 z BEGIN6 H# R7 s1 ^9 ?( p7 e- K& A" e" |* t
  PROCESS (CLK)4 i6 r4 p2 X6 L: r% w
     VARIABLE counter : integer range 0 to 49;
2 l+ k# K$ p5 m9 Q  BEGIN2 b! A3 I5 h- G3 |9 T6 b
   IF (CLK'event AND CLK='1') THEN8 J! u# T# M' k2 X/ n6 {
          IF counter = "1" and (PB = '1') THEN imper <= '1';# _0 I/ }- x, I  ?; {
      ELSE counter := counter-1; imper <= '0';
4 y  Y) r% P5 y      END IF;
3 ^3 x/ w- b4 E4 ?5 x' R) p   END IF;" }" H6 n3 ^9 |& m# o5 J% F
         PULSE <= imper;   
( m$ l4 A, d0 m; V! p0 B   END PROCESS ;. W3 d& H9 k5 v$ i$ ~" L
END arc;" [; O& x$ N6 f; |: M. |
. l) {! \0 |9 K' Z. e2 r
這是按一次減一次6 A* ]; q& u2 D% ^. I0 n
想要按一下開始 按一下暫停) ?: g. b0 i' u6 W2 q4 f7 X

; R' r% s7 J/ z6 w" {9 X" Eps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。5 }  j3 a3 E$ @* b3 O2 {/ Y1 p/ Q

7 B8 E& \. A2 ^, x- T" j你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"! f# X( x4 Y* e. l' ~
有需要暫存器??
% h1 Y8 p* P$ y  u+ Z1 |那是震盪器→先接到開關→接到暫存器→計數器3 j( y" H6 f) v. w  Z% S" y: ]+ W
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK), P, A, H* S2 ^* L* H. j+ H- I
     VARIABLE counter : integer range 0 to 49;
7 k, F% a; W$ Z! t8 w1 x7 z  BEGIN
5 y' Q7 s4 C* L. }& L, L   IF (CLK'event AND CLK='1') THEN2 U% F, k8 p& l- H  ?
          IF counter = "1" and (PB = '1') THEN imper <= '1';
; _7 a( Y0 Q( f      ELSE counter := counter-1; imper <= '0';
! t4 V1 m: X* U      END IF;   n6 X0 R& x# [5 v- t
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
7 j$ E- y" P# E: d! b     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
6 h# O0 L4 y5 K8 B( i& J# m  BEGIN                   1 ]# r. p+ e' K6 q$ a# W$ ]' I, K
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發# }. v7 {" Z  B4 B
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
3 c% |/ D4 d2 i& b( _                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1: ]: a# z7 Z1 N) j( Z% }

4 t$ ]' o$ E6 W# i" q; m      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為09 t( W% w$ d9 |8 c6 Y( p
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
7 u8 U- _* {( u) E% M
, c. v7 X5 d- ?; t3 V按鍵開關 第一次 on時,開始計時。7 @6 ~$ |* I5 o* f- p2 z# e
                 第二次 on時,停止計時。
* H: W) M- u* }/ O; g                 第三次 on時,開始計時。; U9 s% j- ?6 D0 c6 O& ?
4 r8 e# k+ R8 ?
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?7 d1 [& |/ s* C. M; I/ H( b- a8 Q
平行輸入 / 平行輸出
! M6 V+ `: c+ g3 O0 S& m* u/ c平行輸入 / 串列輸出
0 ?  A9 |0 F  M( o, c2 d  E$ t" y串列輸入 / 平行輸出( _# }* L4 c0 i
串列輸入 / 串列輸出8 G- q6 N5 p3 R3 l* Y& i
哪一個啊@@...
& }! I4 k$ h1 x! q1 j$ m6 s& ]我都是看書自己學
# }- o/ R/ a+ E所以都不會咩9 T* F5 _3 q+ M( P- m$ g
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!1 V* t, `% a) S) w- j0 K1 C
今天問老師  
) }  q% K, v/ n8 y' _7 C可是老師沒說到暫存器的東西
' {( {2 `! ?( T3 Z8 B, h* m反而是說
. d' L% w# U) W" P* K. m! JIF CLK'event AND CLK='1& `3 U) A! {3 |7 k. P" n* Y5 i( z3 D
counter := counter + 1 ; ! O2 W  G, S3 ^7 L

8 e( [% ~3 F7 V3 q, G& U抓counter (0)   ----第一個腳位?!* Y1 w( X' k! T: m# B9 S, S
給counter位元多一點之類的
4 k$ L" H0 M. y: ]# w. D; ^+ n
1 V- m& b1 F* M" g( o+ y1 m& H1 q) n- g00  01   10   118 j, a7 f# Z$ F  S1 Y1 A/ F: x6 }# D' V
最後腳位為0   ----Run
; }" q) k  j/ [/ i: h最後腳位為1   ----Stop$ a- d) r1 l1 L; a9 {& K. z
# P6 Z, |0 q, U: Q  g
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
5 m. r3 q$ i, s$ _! D# u+ e至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,: {7 V6 Q4 r) B9 F! J
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
- T+ ^  e, U1 q3 L' N$ _0 J2 X難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 08:10 AM , Processed in 0.136517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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