Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
LIBRARY ieee; , d" B! Q5 v, h1 c% \4 v
USE ieee.std_logic_1164.all;+ u. i" N2 I& t
USE ieee.std_logic_unsigned.all;
% L0 A4 X: q* ?! s* `: D' jENTITY counter_backwards60_seg2 IS
2 V  E6 U0 \0 x" g3 w        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
( r2 U/ r: [" [, @                 Ring          : OUT STD_LOGIC;                         
# H% x- ?# B  ]& h. `1 Y! \                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        ' m- g0 e1 a5 N0 K
END counter_backwards60_seg2;
) F, r4 _( Y/ H1 cARCHITECTURE arc OF counter_backwards60_seg2 IS
2 E* q6 l$ C1 k7 k( ] BEGIN
) k5 y! S" s* B: W4 j  PROCESS (Clk)3 B& d9 b" H' _( k5 Z+ o# l* g
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);3 R+ W) k; S5 t% P
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
* u4 `5 i% C8 m  r  BEGIN0 j' ~7 t% G* q: L
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";# S8 e: r3 P. r7 J, o; @
        ELSE IF (Clk'event AND Clk='1') THEN 7 f+ j1 C' |* T5 `  f
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
2 _. a' g( a, O5 b+ V1 ~* r% R            ELSIF Ena='1' THEN5 r) s' ~9 w$ T# W
               IF (imper0="1001" AND imper1="0101")THEN9 J  \# V- R# z7 ~
                  imper0 :="1000"; . M  `( ^" j) }$ l0 `2 u
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
1 U, R: Y( Q" P5 q# _               ELSE imper0:="1001";
) D& q+ R& Z* R( ~, E$ ^: f                    IF  imper1 >"0000" THEN imper1 := imper1-1;
- |" `1 t+ t- i$ F! ]                    ELSE imper1:="0101";                     
1 o% g8 s3 t3 w4 D1 F7 r$ u                    END IF;
* I1 t" }6 B! R, s! n               END IF;
+ K' F) h/ O# B+ j, d  ^6 K0 e" w            END IF;
7 v' l& L$ ]3 n- x4 W        END IF;' e) d$ ~' l1 T: d: z
     END IF;               5 C$ g' T. h! l+ [  T
Q0 <= imper0; Q1 <= imper1; , @7 c+ P" F6 Z5 U
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));         - p+ G( C% [) Z3 ~$ w
   END PROCESS ;
7 Y. ]: N9 t) `2 dEND arc;

/ L) K! D$ A4 @* b% M. @' K) L7 J
( }$ w+ W4 S0 e  l6 M2 H上面是我的倒數60秒程式9 H( j) ]! w# W- t0 o& y5 h
小弟不才
% _( U% h: S6 |9 M$ J不知道怎寫停止
' `( u' u6 g, T8 H' o% W/ Z9 K只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
22#
發表於 2008-12-26 09:38:06 | 只看該作者
--============================================================& |" d4 A" \% q+ L% V' \! V! \
-- key debounce timer
, Z0 Q# {7 Q. B9 Y--============================================================6 j* O+ E$ S5 l1 q
  PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)
9 `" X4 V: d8 c7 x8 [/ k" N   BEGIN) s: h& p, L& w: J! ]
   if( RSTn = '0') then
% @  K, W; }% o6 |% m7 w* C/ {              debounce_end <= '0';
, e* @: n$ n4 r7 m           debounce_counter <= debounce_time;; S' _( ], m0 }" J9 @. l& t
   elsif( CLK 'event and CLK ='1')then! b0 K; Q: n4 U5 B- q
            if( debounce_counting  ='1')then6 {4 ?; W2 W7 T. ~2 g3 u* |& S
                    if( debounce_count = "1111111111111111")then- l4 ~3 w! S, a. |
                            debounce_end <= '1';
# L, ?7 V, K' ^1 r                            debounce_counter <= debounce_time;
* }3 u' @. I4 N5 y                    else        0 a6 J- y( \& X: g9 @  B" w
                            debounce_end <= '0';0 F) Z, V; z5 y" _" R5 G
                               debounce_count = debounce_count+1 ;5 P  b$ a5 ]/ I  c/ b$ J
                       end if;        ' d- R* a" W: z7 i. Y  g
            end if;  
3 U, i1 N. I5 y$ f" d$ Y% m   end if;
. w1 b  ], G; X' L$ x8 X8 d           
2 g( F( r. a" ~  g--============================================================3 d( c7 p7 I: X6 F5 D$ n# \
-- key function control& _  g, Q" \; M1 h$ U
-- PAUSE -(key push)-> START_COUNT -(key push)-> PAUSE -(key push)-> START_COUNT+ o$ k( j+ W; n+ g' I6 U" ^( {, R5 ~
--============================================================
" \$ I3 e& o; |8 ?) E& t' z  PROCESS (CLK,RSTn,pb_reg,debounce_end)
* r1 O8 F' T: Z# V. U2 a   BEGIN
5 \% Z; Q0 U) K) `, d" ~$ f   if( RSTn = '0') then8 L( U! e# v" R- l$ ~; X2 B
              currently_state <= "10";        -- pause6 @' T! Z1 I( F
   elsif( CLK 'event and CLK ='1')then
! \$ ]7 }- l% {3 I" Y1 x' H            if( debounce_end  ='1' and pb_reg ='1')then2 M' M$ t2 v3 m( H) K; l
                    currently_state <= currently_state(0)& currently_state(1);3 P+ o* t& v( J; }% [2 h
            end if;  / c( j6 `- ^, v/ H, T
   end if;        0 r) ^4 \% K: f) h5 ?
                 START_COUNT        <= currently_state(0);, @+ v5 G/ Y5 i* b' n! U4 F
                 PAUSE                <= currently_state(1);8 `3 N  J, F/ U% a% K% L

2 z; U1 Q' i. w. t" }) D1 w# G   END PROCESS ;( p0 Y7 z* p; C$ ^) C) ~+ r
END arc;
21#
發表於 2008-12-26 09:37:54 | 只看該作者
Key function" {( z' P; w) g+ n2 \
按鍵開關 第一次 on時,開始計時。
/ F* u( {8 G- j4 N                 第二次 on時,停止計時。
1 T6 j* v# X) w: O$ H6 v                 第三次 on時,開始計時。0 T# @; {5 h. ]2 H( g( X+ W2 m6 Z5 _
未 synthesis,請自行 debug........ % |* Q' g, h% e. B/ G
3 ?/ j1 j% Y5 N& I% w- C( e
LIBRARY ieee;
# Z4 c2 O3 G4 s# e) P( v0 I5 tUSE ieee.std_logic_1164.all;
; D2 M% `1 L' R) c( ZUSE ieee.std_logic_unsigned.all;
1 [& n! J" h8 {% ]: {ENTITY KeyFunction IS/ K' d& C5 v2 {, c& c4 }
        PORT(CLK,
& O2 w+ ~$ u$ A( Z' A1 h2 w$ r/ \' J                 PB,9 ]9 c5 O3 {& J' X
                 RSTn        : IN  STD_LOGIC;
1 T$ f, e/ e2 \, \: S                 START_COUNT,8 R  d9 @/ _% f( o: I0 q+ W9 X
                 PAUSE
- `) ^5 U0 ~$ O5 _1 c/ Q                              : OUT  STD_LOGIC
& s$ A" n; Y1 V                );
5 Z$ D0 X" a/ i+ S7 t+ TEND KeyFunction;7 k/ f4 ?  N- K# v7 J2 u8 J! f* i
ARCHITECTURE arc OF debounce_v IS$ W1 J; A2 C' l  i
SIGNAL  currently_state : STD_LOGIC_VECTOR(2 downto 0);. H. s' N. `3 |+ W2 B+ o, C
signal     pb_reg,debounce_counting,debounce_end    : std_logic;
1 u/ k  w( C) `3 a. ^+ C( i: }signal debounce_counter : STD_LOGIC_VECTOR(15 downto 0);
) y3 B9 B9 l8 K/ W6 K( E% K4 {0 d5 D$ X3 Y0 }% d2 N
constant  debounce_time        : STD_LOGIC_VECTOR(15 downto 0):= "0000000000000000";
: Z2 c  _6 H+ Q% u9 h: Z  zBEGIN* ~6 g& C) H3 K) h" [9 D5 `1 |
# ]6 Z7 A0 @- x' c& h
--============================================================+ D' _0 G/ X1 {, N" d
-- get key push state. ( active high)" B$ X8 X  |, r& c4 O( S
--============================================================
6 |& r  J, S- a( z+ X) v  PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)
% Q$ H3 O' |/ Y5 \4 G) }& H   BEGIN1 k6 p) T1 ^2 W* s" C3 @4 ^* S
   if( RSTn = '0') then
- E. Q. b2 @8 i- f5 @. z3 U' h           pb_reg <= 1;# z1 s$ `5 D4 ?) U- \  r+ f
   elsif( CLK 'event and CLK ='1')then7 F/ l+ A9 P* m/ {; ~% W9 B
            if( PB='1' and pb_reg ='0')then
0 u6 a  Z- b& @- E                       debounce_counting <= '1';
1 D/ m+ c3 c8 N0 W            elsif( debounce_end = '1')then
* \6 E' V: H8 Q' `+ B/ l: n                    debounce_counting <= '0';       
9 P; r8 c  C; G3 \            else
: z( Z  Q9 u5 V- j                    debounce_counting <= debounce_counting;  d! k7 u4 v% v9 h
            end if;5 f7 N- X$ U7 r
            pb_reg <= PB;  / }& x- s  C4 Y3 G# h+ k
   end if;
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
- V1 b. K9 c# r# M& r4 u/ W至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,% ?0 w3 {! g- V
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
5 k$ F. e1 r8 _* Z難解了!
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
+ V* Y' [. m" `" L) N. ^$ \6 }今天問老師  / n: o# h; n7 B3 ^
可是老師沒說到暫存器的東西5 O, N* l( e6 a3 N( O
反而是說
8 V1 y: s) @2 f9 s6 a/ g) ^IF CLK'event AND CLK='1: |# _* `+ x) r- E: x
counter := counter + 1 ;
4 ]2 h0 y2 r. v% S* U( D3 F* R  x- V  ?, X! F8 r) P
抓counter (0)   ----第一個腳位?!
7 o2 }& A3 X7 Z6 g給counter位元多一點之類的2 h5 b+ E+ ^& U# P9 k- Y5 A

; l: h; a5 a0 r, g00  01   10   11
6 ~. e! V) }9 J& A4 s, F最後腳位為0   ----Run
3 _0 Z: Z. }7 f$ i# ]. |7 s( c3 N; ?最後腳位為1   ----Stop$ ]6 h/ K: @2 W3 B2 [5 a
. g6 @1 b. e2 Z0 L
可是要怎弄勒@@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
9 F1 b, f4 b. X0 G) W7 H2 t平行輸入 / 平行輸出2 U  d3 l, p& y. Q4 v
平行輸入 / 串列輸出
( ~! Y( ^" k( y1 X4 b+ ]串列輸入 / 平行輸出; l& A- V! n  F# u/ c  K
串列輸入 / 串列輸出+ _' q( v% K, k
哪一個啊@@.... u1 _5 J0 B4 U$ N9 N  U' |
我都是看書自己學( U0 h: p% _; z; ?# @9 w+ y
所以都不會咩# k0 I) v) e$ r' n
拜託 幫幫忙
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
. C! ?0 O: K2 {
4 |4 a: ^6 [7 O* X' g按鍵開關 第一次 on時,開始計時。, {8 j. l- c, p6 q- _) S
                 第二次 on時,停止計時。
0 u0 e* V) b5 r/ F4 O3 ^                 第三次 on時,開始計時。& X$ |8 j- `' p- y. k9 o! E
5 }, j/ g; q4 x0 f7 r* y) O
這有哪位大大能幫忙@@
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作& p5 `7 ~. K; `& a. U" Y
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
& {- q* i6 |/ E. \  BEGIN                  
+ f6 R9 W+ \: ]0 P7 z: ]; M8 ~   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
2 x3 G, u# e) u; s+ |9 }) I          IF counter = "1" and (PB = '1') THEN imper <= '1';  
; [, r3 E- G( K' e3 j                -- 如果counter = "1" 和 (PB = '1')就把  imper設為10 H. l0 D0 j1 a
" y, O/ R+ d5 y. t# B
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
3 D5 i* K" S4 M8 Z/ y# a0 Y      END IF;
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK). ^# {) R5 M6 x/ g: L+ w2 ^. Z5 Y; K
     VARIABLE counter : integer range 0 to 49;
, I. I6 |3 N' s  BEGIN' b8 O4 {$ T7 @1 H9 m2 m
   IF (CLK'event AND CLK='1') THEN  ^* e' c) w  {& r. a3 g3 G* q; v
          IF counter = "1" and (PB = '1') THEN imper <= '1';
* x, |" V, n( \) T) a# S# M      ELSE counter := counter-1; imper <= '0';: }1 [( r8 g$ \9 w$ D  N( q
      END IF;
# K0 T, r/ c' J* h2 Z4 M+ \能幫我解釋一下這幾行是什麼意思嗎?
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"% K! `% T* d8 w2 r: d
有需要暫存器??
2 L. X9 o4 N) n$ }2 F9 x; j那是震盪器→先接到開關→接到暫存器→計數器
3 w2 P/ G0 E: e這是樣嗎?
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
! r* {8 i2 a& |! O9 H: w( K+ N& `7 n/ r" q; Y6 N
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
2 k0 i& H4 x4 x- ^9 n  q. _但請問 我需要一個另外程式
3 ~) b+ k& o+ Z' `, L去控制暫停開始和暫停8 o7 _) J5 Q% p: H0 k: I
LIBRARY ieee;
7 @+ q2 B6 f3 w# B$ iUSE ieee.std_logic_1164.all;
. V  Z5 z( u3 Z: Q1 e8 S% `  }USE ieee.std_logic_unsigned.all;
+ ^7 N3 h; }* H, F! c0 H/ \; {5 H/ \ENTITY debounce_v IS$ Y1 L2 g+ B" ~2 t" S
        PORT(CLK,PB        : IN  STD_LOGIC;
) S3 E2 c, t& x0 v' a9 x4 D                 PULSE        : OUT  STD_LOGIC
8 X5 F0 n. r1 J, y6 G3 n7 y) N                );
1 p- B, n4 S& Q$ e! I- _9 z! tEND debounce_v;
& A! w2 e8 L: I8 A  m& |ARCHITECTURE arc OF debounce_v IS1 K- \, }. V" T* i( `. X$ i
SIGNAL imper : STD_LOGIC;
$ [; T  o% @1 y3 m BEGIN
" b2 t) A5 l0 s, X0 l  PROCESS (CLK)2 |" L% c. h, W; n' `* E
     VARIABLE counter : integer range 0 to 49;4 E# B4 h0 p  K2 z
  BEGIN# T' ?) Q. J; ^7 q9 k
   IF (CLK'event AND CLK='1') THEN) x" Q0 Q6 Z; E! U8 Y4 J8 \+ w+ c
          IF counter = "1" and (PB = '1') THEN imper <= '1';
4 n! {7 Q: _) \: B! g. S5 O      ELSE counter := counter-1; imper <= '0';* E! Y, Q) x, E* p; z9 [
      END IF;
" Q0 l  B- H+ P! X1 u3 B" C   END IF;
3 M( X9 P$ I5 G' Q# C) _/ V         PULSE <= imper;   
& ~/ g9 T8 v3 `% w; a0 E4 o   END PROCESS ;
: B6 o! ^0 V3 cEND arc;$ w3 D! n: E! `; K; j/ S. N2 }

8 k0 b! ]3 M$ |! ^# M% Q0 D這是按一次減一次
  G7 X7 e; c9 y  V# V1 G& \想要按一下開始 按一下暫停
6 y3 _0 @0 F6 D6 F" `2 [# i; h* o. J* s
ps.轉自全華圖書
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 9 j0 e1 q% E  w. E2 z- y4 w
USE ieee.std_logic_1164.all;0 S- m: [; W! e. L0 Q
USE ieee.std_logic_unsigned.all;7 |/ {6 P: [/ f3 h
ENTITY counter_backwards60_seg2 IS: K9 s& ]0 H0 f3 v* ^
        PORT(Clk        : IN  STD_LOGIC;         
9 o, h$ {7 }7 N, j4 {                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
7 ~+ t: c7 m9 K. K" g. [: D( N1 GEND counter_backwards60_seg2;
' d7 A6 ^: d( k' z* r8 u3 O/ V2 YARCHITECTURE arc OF counter_backwards60_seg2 IS
$ Y1 M) N; R- Z! Y3 ~1 b, J BEGIN, w$ [% C. w5 ]% N' E! R  g
  PROCESS (Clk)
. B* c% m$ Y: i9 \     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);* R% g3 H% n9 @" ~# k
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   . ?( S! H5 E* V6 U/ Z6 o
  BEGIN          / l5 Z* Z* c" {' H. O: O
       
! @/ E! h9 D# p2 ~. J2 B0 q       IF (Clk'event AND Clk='1') THEN           
( ~4 w& g! j! i             ) o0 V1 d! E3 m3 F' I9 ^4 R
               IF imper0 >"0000" THEN imper0 := imper0-1;( a  p+ P$ _5 v; Y% W$ }. X
               ELSE imper0:="1001";/ j& A5 i" }# n- g2 l8 [$ D
               IF  imper1 >"0000" THEN imper1 := imper1-1;
, E: q% f# H- S% F               ELSE imper1:="0101";
                                  4 P3 r5 [8 c, g6 n
                    END IF;
( Y6 R. H" x- y  R! [) n, j. i               END IF; % m1 {- y) y8 g9 m1 r0 t: y
             END IF;  . U* o6 j% K. r, S+ K- {
         Q0 <= imper0; Q1 <= imper1;  ) Z. \, {; u; C0 |
   END PROCESS ;
2 o( C; i; G( h6 _# F: EEND arc;
& L# k$ |3 Z* E$ j以上我精簡了一些 也能跑模擬圖2 c. W* t4 o, V' o$ R6 y3 ?6 r
但現在重點是我該怎寫60→59→58...# `2 `3 n6 H. N3 n8 d3 z$ _( @, K
初始值60要怎寫...
( w' ^+ [5 E5 T  d' I1 Z$ h# d' H( h4 b是要多2個input 然後給他一開始的值?% t6 A$ Z' C( {( K) ~6 B
但要怎寫啊@@...
/ \9 s3 b$ D+ B5 B$ h0 |
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
, s- a$ a: {+ R: D" ?" W我是用Quartus II 電路圖接法* D: d( T) x1 W! V4 J+ e! g. B
60:00(現在是00:00) →59:59→59:589 u8 b% {  o3 v. ^, Y& ]1 d: D

! A0 J( A3 Q" q& kIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
0 {3 ]4 H2 w8 c$ P: w5 ]小弟比較笨拙~"~
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then& d( `3 d1 ]$ A; h" c* B- \
     timer<=(others=>'0');  <<<  改這 60 00
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
; W3 z9 {6 M, i因為我要做60分鐘倒數
# V7 `6 X; _% X+ H/ |2 t所以要60:00 →59:59→59:58
0 J4 a7 l$ v+ |% b( A% z: ~我現在是00:00→59:59 @@"
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。! h6 Q' r' F" A) ?0 {0 {% c4 R
4 d: c1 C4 L4 o5 l8 H/ x
不過時鐘的話應該是給59才對,沒有從60在數回來的。
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答4 |! ^) d2 c. y! F- J
我想問說
+ b2 e. D( D! ]& ~: {5 M怎從"60"開始倒數?6 \4 [7 m( ~$ K. O
60→59→58→57....→00! Q# _( Q, a# x, X) y* z( w
因為我弄出來都是
$ l8 U6 _  f, T1 Q' d3 }00→59→58→57....→00
, P; j6 N% V) K2 g. \* B! e& F3 k! t0 c/ e" @
" k  s( D3 q6 c8 ?1 \: ]* G9 F
希望有高手解一下疑惑
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
0 o8 P; }  V7 n. o' J) @* i/ S看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-14 09:05 PM , Processed in 0.141018 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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