Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
LIBRARY ieee; 4 n3 J2 V% t% |% I) E8 u) Y8 F, s
USE ieee.std_logic_1164.all;
% `  a7 Y8 W4 _8 A: |* qUSE ieee.std_logic_unsigned.all;
3 l; }: V$ D6 o5 p) h3 S% IENTITY counter_backwards60_seg2 IS+ i0 |, Y% t2 u3 }8 R
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;/ n2 T5 I" o9 s* Y5 E6 F, y
                 Ring          : OUT STD_LOGIC;                         $ o  r* ~# M4 \6 [: N7 d
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
3 X! u( e! @1 hEND counter_backwards60_seg2;
/ `( b! F  g; r( w$ R- p2 ~ARCHITECTURE arc OF counter_backwards60_seg2 IS0 |/ ?% k; i+ [& O4 R
BEGIN* h7 [1 m* v: w6 e; r4 i6 j1 n
  PROCESS (Clk)! e! w& }$ F; u5 W
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);# a# ?% M3 V- T! U& ~) k
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);9 \6 U3 Y- q/ m! Y9 t
  BEGIN* q# C% c# |! E1 \' A" {  p
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";( G' G) c4 J' F0 C7 C( B
        ELSE IF (Clk'event AND Clk='1') THEN
- \# c0 z6 j& Q1 J1 b            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
) Y! {$ p6 M" j/ W' J            ELSIF Ena='1' THEN6 q3 o; l6 R4 X( ]7 H( Z" [
               IF (imper0="1001" AND imper1="0101")THEN
: S& l' c# X, d" ]" k) [; n/ z7 ~                  imper0 :="1000"; 3 a6 g* b6 `& z2 P$ I
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
- x8 c  {. x% V9 F               ELSE imper0:="1001";  A. {, D1 G3 s6 B3 M
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
" c% h# |0 o# G) Q. T                    ELSE imper1:="0101";                      - e5 V2 w8 Q) e/ z
                    END IF;% @. O/ h7 ?! [- G
               END IF; 9 @& p2 _6 q7 l1 J7 @' t
            END IF;  q- B/ i# ^, _
        END IF;0 z3 X" i- h* k. Y3 e" R
     END IF;               % \$ Z" ?! P" x% u+ ~
Q0 <= imper0; Q1 <= imper1;
3 K/ P0 ~- t- }& b- Z. b- r, tRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
* S" p: q+ E" d$ s* M- B8 ^! o   END PROCESS ;
+ t7 [# _, x5 @% D9 _END arc;
. d2 a; X9 a7 |2 f4 n2 z
% g' ^0 W0 `) B& ~* q6 {5 W- x
上面是我的倒數60秒程式1 g& R: ?! }! \: E/ l/ _- r
小弟不才
6 I, [" \9 H6 f) T3 L. t$ J不知道怎寫停止
/ o" F( V1 z, o6 c4 A只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
22#
發表於 2008-12-26 09:38:06 | 只看該作者
--============================================================( E" W2 D( F9 G
-- key debounce timer+ m! B7 ]% M. B. k% ^
--============================================================
) M$ E! }1 }: ~) @' Y  PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)8 l2 N/ Q1 N# H) H( F. ~
   BEGIN0 X8 r+ Q; s0 o0 f( ?( J5 e' s
   if( RSTn = '0') then4 F# y8 o$ i' X2 P9 K7 d
              debounce_end <= '0';
8 Q& V; j. a7 X+ Z           debounce_counter <= debounce_time;
  @# X% Z* |* q; W* ^' ^3 o/ G. O! J   elsif( CLK 'event and CLK ='1')then" W8 e: m0 a) l" g, w) j. j6 h  z1 K
            if( debounce_counting  ='1')then, K1 c( W1 G1 ~, F. l& O- u
                    if( debounce_count = "1111111111111111")then
) S8 ]8 f  e) T1 l                            debounce_end <= '1';
, Q2 M5 I7 i  x6 g                            debounce_counter <= debounce_time;$ G4 ?* u  B# i
                    else       
2 Y4 H, Q. i( W$ Q( z+ k                            debounce_end <= '0';
% r* b2 x; U2 F, {) m" o                               debounce_count = debounce_count+1 ;
! z' R5 N8 T- d" |. l3 r  `                       end if;       
3 @* V2 l0 t! J* |4 W3 i4 R& ~/ n            end if;  
. ?5 v6 Q; {6 m# _3 s' s2 }+ G" Z   end if;6 H2 ^. k. _! z, f3 p- ]0 C
           ! j0 p5 ~) f/ _0 @/ f; {
--============================================================; H, g5 Z0 o# Y2 t  [( R
-- key function control
5 L0 Q: o* K( U1 {' R-- PAUSE -(key push)-> START_COUNT -(key push)-> PAUSE -(key push)-> START_COUNT9 D) {' Y5 n! s+ Q' t
--============================================================
& {6 Z: x7 C! j3 S+ c& Y  PROCESS (CLK,RSTn,pb_reg,debounce_end)5 Z# p" F+ H" G9 F! R, s
   BEGIN( {8 I3 z: J% W1 b
   if( RSTn = '0') then1 |, M. e% T5 i: H
              currently_state <= "10";        -- pause# B" T3 }5 D9 X1 n6 Q, {; h/ m
   elsif( CLK 'event and CLK ='1')then
4 C5 E1 G) P4 K8 x" a            if( debounce_end  ='1' and pb_reg ='1')then
# y% r4 h2 {3 `, l                    currently_state <= currently_state(0)& currently_state(1);( \5 Z2 ?+ r$ R
            end if;  
- S7 B, K! Y: b( n0 O; ]   end if;        
" V* |/ Y- ]* O: U. Z/ v4 p. @                 START_COUNT        <= currently_state(0);6 h! J0 _8 E3 g
                 PAUSE                <= currently_state(1);
) G* ~. K  P4 a! {# E5 g0 j
$ x1 ~4 k, S* J" O, j9 B   END PROCESS ;7 A' f* ]8 F3 s7 p' W
END arc;
21#
發表於 2008-12-26 09:37:54 | 只看該作者
Key function
0 g" j! N3 L  ]6 A% Y7 L按鍵開關 第一次 on時,開始計時。
9 x% C& j" D6 d8 L- u7 i                 第二次 on時,停止計時。; G. J5 D: ^' a+ T, y. E* y& q9 |6 S
                 第三次 on時,開始計時。& S, k1 ~! g: F* c4 A
未 synthesis,請自行 debug........ - ?( t) K& [; Z  L
$ s. T- O3 {  _* h/ {7 r/ K
LIBRARY ieee; 1 k5 p! K; ]9 K
USE ieee.std_logic_1164.all;
# i+ j8 l- J+ FUSE ieee.std_logic_unsigned.all;4 W9 W; d+ }3 o! D0 o  {2 \1 ^
ENTITY KeyFunction IS
4 W  h& M2 ~/ B) z" ^' n$ V        PORT(CLK,
9 J! r# L( A. T# `6 h9 w                 PB,
1 ?- [5 G- D- K7 X                 RSTn        : IN  STD_LOGIC;
  n) X/ D9 K, {$ S+ X8 x! ~1 _                 START_COUNT,$ ]0 d# D1 y* Y: a
                 PAUSE
5 ^$ G! u2 S6 `/ t5 s5 A                              : OUT  STD_LOGIC . }  F& r5 Y2 N- ^3 P$ }# S
                );
% n2 O2 u1 e$ Z& JEND KeyFunction;
, Y1 B! _% X, {9 M" K7 s; eARCHITECTURE arc OF debounce_v IS
% o- B: h! @0 Y: g$ BSIGNAL  currently_state : STD_LOGIC_VECTOR(2 downto 0);
: ]' B5 v2 K2 K/ l# d  x- `) qsignal     pb_reg,debounce_counting,debounce_end    : std_logic;8 [# x9 j+ Z  [) ^- n$ M% ?0 t  y
signal debounce_counter : STD_LOGIC_VECTOR(15 downto 0);
! z& o& m, J$ T: f. _; C0 ?
- G; f9 e. ?2 t7 t3 ?: U9 iconstant  debounce_time        : STD_LOGIC_VECTOR(15 downto 0):= "0000000000000000";
+ t% g- d8 f( w' N1 M6 p' d& o- gBEGIN2 I- X1 o$ k" w+ z8 R/ _
8 {# T& z  d( K0 [3 V+ M. j
--============================================================# T  q) V& Y- B0 C) _; G" q
-- get key push state. ( active high)
3 a) ?- s, m! M! q( I, J: q--============================================================9 l/ G4 e* |. J# |# c0 \" R
  PROCESS (CLK,RSTn,PB,pb_reg,debounce_counting,debounce_end)& \2 m% u2 Z$ O5 ?" q% p: R
   BEGIN  P7 n, Y. X# m  S
   if( RSTn = '0') then
% a" [: L5 [. I5 Z           pb_reg <= 1;7 }) p, V% A, b- F5 ?- s
   elsif( CLK 'event and CLK ='1')then8 y" A5 Y- C- g0 D1 C
            if( PB='1' and pb_reg ='0')then
( s" U3 q  ~6 t3 ^                       debounce_counting <= '1';/ E1 t4 f2 H, p
            elsif( debounce_end = '1')then# g! E9 t0 n7 G1 W6 W
                    debounce_counting <= '0';       
; T7 h1 ]4 u' \9 G9 Y0 K! e' z            else% C( n& C1 \7 @! [& ]3 l% y
                    debounce_counting <= debounce_counting;
! c& C( U. a! U  J' J7 a3 H            end if;
/ l  l7 T* V9 F( c, ]3 u            pb_reg <= PB;  0 [( R# q! ^+ k; x, L
   end if;
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
- t0 L# v: \7 l至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
" [+ l$ @% d( I7 Z1 ?跟你說原理你又不去想,要用你懂的畫圖的我又不會,
9 F; S7 L# Z; b  H. D! g難解了!
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
% O7 ?- {) P3 [1 J  {7 W3 X今天問老師  / T9 N) G! s6 {! ^
可是老師沒說到暫存器的東西6 b( H. F- H! M; t; p# n% Y  C
反而是說
. y: u5 W. j' V/ D: Z6 fIF CLK'event AND CLK='1
- ?* q" A0 X% ]% R% ^' p4 R1 e' Gcounter := counter + 1 ;
7 _3 X. I' h3 f  M, A2 d7 O* k- d7 o0 o) X
抓counter (0)   ----第一個腳位?!, s; p' `" h7 e$ b3 \
給counter位元多一點之類的
2 \3 K+ P8 A6 `% q
- l1 L& [2 l  g3 J00  01   10   11
' s  T1 C' B: j) C8 o) h) ?8 H7 o" `最後腳位為0   ----Run
& w+ |9 k% \; J, f! P. _最後腳位為1   ----Stop
5 D1 n' d& U6 U7 g1 f  z* V, H& A  i1 r9 Y: m- h0 o" Z/ d! c
可是要怎弄勒@@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
+ ^4 u, `& X; ^3 R/ {7 W, I$ V平行輸入 / 平行輸出
! x2 y. u2 k! [* N( j+ S7 \平行輸入 / 串列輸出
3 F' R8 @: S- v( N) l1 w: D; K串列輸入 / 平行輸出: ?4 h1 f5 S. c) h9 j
串列輸入 / 串列輸出7 X% ]1 m  v' ?9 ?$ E4 j
哪一個啊@@...2 }1 a8 _2 z4 s. l! P* l, E7 x% R9 x3 d( z
我都是看書自己學; Z% i$ I4 t% W4 b9 g5 c
所以都不會咩* Q1 x; X( e* Z' V  i
拜託 幫幫忙
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
1 v. w/ g* Y+ X& E2 K/ k+ w( x
' Z( X) i. Z3 g3 S* |% ^按鍵開關 第一次 on時,開始計時。* C6 y; O3 t' Z+ h' _
                 第二次 on時,停止計時。# @8 n; Q- v+ i* D. O3 |- ~: @
                 第三次 on時,開始計時。
9 w" b7 _. C) N3 z- F, ?: O5 G' G2 T% s( \. N" d% Z$ L7 o4 j
這有哪位大大能幫忙@@
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作9 M6 o6 e5 o+ C0 }+ e6 @
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
! v/ f' A2 D4 r7 d9 Y( l  BEGIN                   8 Y* n( I' U" }. }8 n
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發3 C7 Q7 v. y% g( A9 n
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
! ]$ O2 Q+ E1 s' v! v1 c                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
9 _& o6 [# {  E; U+ G/ `7 M. C' c
: i+ F7 {6 I& |1 Y7 n7 F, x3 b, z      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為07 ]2 ]/ x3 V: s! C2 l
      END IF;
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK). r; {, L( i1 G9 s" n% g
     VARIABLE counter : integer range 0 to 49;
9 O; K0 q$ M+ S$ y5 M- [% K. u  BEGIN$ g. ?+ j7 ^8 M
   IF (CLK'event AND CLK='1') THEN! s) U4 I$ Z! {# ?6 E
          IF counter = "1" and (PB = '1') THEN imper <= '1';1 G  w: b5 [7 d% g% p: u
      ELSE counter := counter-1; imper <= '0';9 C; v" t9 C7 G- q7 ^# H& O
      END IF;
  {4 C% d7 K# d( C能幫我解釋一下這幾行是什麼意思嗎?
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"! }4 ^( [  S  @
有需要暫存器??
) e. G- D& l; c2 w: N4 R那是震盪器→先接到開關→接到暫存器→計數器$ l3 D( `6 o& C) D# B' }2 U8 Y
這是樣嗎?
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
  c, H7 F% W# {; o5 T5 B8 S! F8 i; F2 w; n- W
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"7 E' X$ [( {4 ?: {
但請問 我需要一個另外程式. z3 `$ M, N: S# P: P# f
去控制暫停開始和暫停
  ?! d# n# s8 E* x4 V" w5 SLIBRARY ieee;
* s% p# V4 t, e3 oUSE ieee.std_logic_1164.all;% B4 \* r  o/ z; k8 D
USE ieee.std_logic_unsigned.all;  L: f3 w; Q& G8 y
ENTITY debounce_v IS
* x) j4 o* O  h( U: X0 K; T        PORT(CLK,PB        : IN  STD_LOGIC;
7 G7 v5 N! q4 L$ T6 S! o) n% ]                 PULSE        : OUT  STD_LOGIC . O, _6 ]! r$ M) k( W
                );& E7 s6 m8 r6 n5 e5 s1 A
END debounce_v;
1 k% ?" f8 ~2 Q* _ARCHITECTURE arc OF debounce_v IS
5 |2 i' X# s. h SIGNAL imper : STD_LOGIC;
; w8 i8 P) R- C* {( A' ^$ U BEGIN
8 u8 |/ B% b7 r; ]  k  PROCESS (CLK)
5 I7 K( F: f; s( R$ ?     VARIABLE counter : integer range 0 to 49;
9 M" x+ J, d1 J  BEGIN+ T5 Y8 T, K5 O; o- C' Y) @2 R
   IF (CLK'event AND CLK='1') THEN
' E: {4 s# x5 C          IF counter = "1" and (PB = '1') THEN imper <= '1';) A  u% P: d  r
      ELSE counter := counter-1; imper <= '0';: E5 m& x/ f' R! e
      END IF; ( b# a7 ^# I1 p' }/ U" m# |
   END IF;6 x* @' I2 g$ Y$ I1 r
         PULSE <= imper;   9 F( {2 C+ q7 a9 j& d$ d3 j4 s
   END PROCESS ;& g8 v7 W; G5 J0 k
END arc;! k+ T* w+ S4 F* _- A( Y

  T" M, ?3 l! L2 v. ^( L- i  w這是按一次減一次
8 `$ y% O: \9 Q6 ]想要按一下開始 按一下暫停+ _- |( L! \0 s) m* G$ Z
. K8 g7 w* l6 N0 R; r  _  r$ R' j
ps.轉自全華圖書
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; * X' r" f* R* q8 E/ e7 d
USE ieee.std_logic_1164.all;
0 w8 x8 B1 ?4 I" {' HUSE ieee.std_logic_unsigned.all;
+ G  e" a( E# I9 }7 W4 vENTITY counter_backwards60_seg2 IS
6 Q! p4 G) Q+ i% y4 @        PORT(Clk        : IN  STD_LOGIC;         
+ n) F; s8 a" n* k- t                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
% y3 C& h5 M3 aEND counter_backwards60_seg2;
( z" s2 v8 K4 n' DARCHITECTURE arc OF counter_backwards60_seg2 IS
7 W: q) D  n  A/ Z- R0 W BEGIN- {: B  Z) l; K( J2 s
  PROCESS (Clk)  h. E8 J& \* D' V# z
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
; M: @4 E/ a: i5 V; v5 ^     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
6 n0 P& |$ |" h! ]. N  {  BEGIN          . l# J' l9 X, W1 ]. C* F
       
6 b* J' E" T% i4 }; \       IF (Clk'event AND Clk='1') THEN           
, H( I2 `* F5 v. X* s9 m; b; |             7 v* h: v9 a2 U+ l6 H# m9 C
               IF imper0 >"0000" THEN imper0 := imper0-1;* |! \$ I- v( K9 s; J
               ELSE imper0:="1001";
% a2 \1 t& @+ I/ C& t               IF  imper1 >"0000" THEN imper1 := imper1-1;
9 g/ ]2 i- y, }! z8 {5 |               ELSE imper1:="0101";
                                 
/ P9 X# X4 N( d0 j5 \" {) p                    END IF;
5 H* }! J; I  h& ^               END IF;
- Q9 ]4 p4 P5 i% v             END IF;  6 Z" F1 U' i0 L5 N+ B
         Q0 <= imper0; Q1 <= imper1;  
, t/ v2 K5 [/ }   END PROCESS ;$ A0 Y- p, `  x( B
END arc;
9 B; V, Q. E! z9 v. N6 E3 K7 }以上我精簡了一些 也能跑模擬圖
" l$ \* O1 R. b  [. ~, Z但現在重點是我該怎寫60→59→58...
2 @2 i& C0 i" t7 O8 T" d3 V初始值60要怎寫...
% J1 V# [# k1 v9 h" ]; s是要多2個input 然後給他一開始的值?
- D: V& P0 w- n0 S+ K5 i但要怎寫啊@@...
6 d. s- o" N) R% L% `/ E) n
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
: s$ ^, U4 Y" ^* U, p7 n我是用Quartus II 電路圖接法
6 ?% j4 T) I- B5 D" O5 Q60:00(現在是00:00) →59:59→59:58
1 j6 Q8 U/ c* t5 W3 w; P8 q% q+ d/ a& o$ v- q
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@3 f; B/ g8 R) d$ q1 o* r/ E
小弟比較笨拙~"~
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then* L( A( n8 p5 q3 [& J6 E
     timer<=(others=>'0');  <<<  改這 60 00
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
: K, U1 M% L: H4 o8 m# n) S因為我要做60分鐘倒數  n; N* j/ \( _4 A* v
所以要60:00 →59:59→59:58
2 R3 U; Y4 |! F# V  {我現在是00:00→59:59 @@"
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
9 i: `: A4 T( a3 W7 t- {; Y4 M% j* q; j9 X/ B6 k
不過時鐘的話應該是給59才對,沒有從60在數回來的。
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
3 r1 ]- A- F3 L. H1 w3 Q我想問說
& l/ [  K) H. t  E' V- z怎從"60"開始倒數?
! l# t! I, o5 g* X3 v2 Z60→59→58→57....→00
- O0 }* T( G1 Q  E8 z因為我弄出來都是
' X: V; |* _% W, c00→59→58→57....→00: Y5 q3 k: z* S+ [/ C$ M* G

2 x" i) D5 d' B* Y" Z  r8 Q1 Z4 e* n9 M
希望有高手解一下疑惑
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,- v5 B$ A8 ]3 w9 T  g
看有沒有用可以參考一下。

本帖子中包含更多資源

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

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

本版積分規則

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

GMT+8, 2024-5-23 02:53 PM , Processed in 0.135517 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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