Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
" ^6 s- ]# I* W% l5 EUSE ieee.std_logic_1164.all;
8 M! B$ v( P9 M  K, \9 u9 bUSE ieee.std_logic_unsigned.all;& I6 h- K' B* F8 t3 j
ENTITY counter_backwards60_seg2 IS6 f7 K* a$ M$ v# L
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;) |/ \$ B3 Q8 K! I" c
                 Ring          : OUT STD_LOGIC;                         9 s8 m: r! H: B$ i$ B
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
/ i% p: ~" l6 }3 U0 H( vEND counter_backwards60_seg2;) J7 V3 m+ z. Y. }4 G, N
ARCHITECTURE arc OF counter_backwards60_seg2 IS
6 r$ n0 s  q8 t0 P1 Z  ^. N7 G BEGIN+ a+ t9 a" p! N6 L" l
  PROCESS (Clk)
. G+ g% W% B5 r     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);9 C) _0 }5 [* V' N- H" c/ `
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
, S6 U$ S9 T; Y& C) W  BEGIN
3 ]; l+ Q- N1 N' X! |! g+ g        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";0 s. j) G# f3 @
        ELSE IF (Clk'event AND Clk='1') THEN 1 Z* a! S  X" \
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
9 N4 Q4 o: P9 ~* K* H            ELSIF Ena='1' THEN
3 c3 T7 o3 [+ }. D" g; e9 c0 [4 p               IF (imper0="1001" AND imper1="0101")THEN
% y+ z! h5 q0 j6 u                  imper0 :="1000"; $ C8 M4 j4 F( T
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;% O& G$ E& i( _2 D
               ELSE imper0:="1001";6 E' R4 {: @8 i; y, h
                    IF  imper1 >"0000" THEN imper1 := imper1-1;- \7 _/ M1 s9 V. r+ K% d: G- v
                    ELSE imper1:="0101";                      $ ?* Y+ y# Y) o$ b+ p% F: {7 m: j
                    END IF;0 ~0 u: c7 }* R# u
               END IF;
* ^. H# p0 `' D; n9 s            END IF;
7 }. x% \! }( \+ W9 L0 \& x& j& Z        END IF;
/ R  ~/ R+ e! G) G     END IF;               4 k! O' o, b& Y* B& @
Q0 <= imper0; Q1 <= imper1; % ?3 e- k& d8 G* g+ E
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));         * ]" h, C8 I% T3 ?. Q# m, K5 {9 ?
   END PROCESS ;$ x8 y9 h$ K5 j) O, l+ R
END arc;
( {6 {9 C: |/ s

  o  x0 g5 r; l( @% {3 g上面是我的倒數60秒程式* M8 K5 ^% }0 @. b: ]
小弟不才3 N+ \7 v2 Z/ \( f
不知道怎寫停止
, P( _, @7 ^1 F" g只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;( J- M  G- [7 V, J1 f9 @
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
2 C$ w; f0 O8 ~7 H$ S5 \1 h8 p除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII" f# I$ ^- n: ~7 T( R
跑一次的宣告是要放哪一行...?& `7 W& x  T, p" S) _. I, p' q
還有一個問題想請教3 R& S" b  ]: Z  s+ d1 c
就是counter_backwards60_seg2是我的分鐘
% _$ B; _7 y- _% [+ ?6 xcounter_backwards60_seg是我的秒
9 ^8 z4 s- B* ^: Y. F( F現在就是秒那邊 10→9秒的時候Co也會進位
( _) p$ z  p2 l/ m6 W! s秒的個位數有延遲 所以導致10→9秒的Co會進位' B! P7 B5 H9 R' ]6 m' o) r  b0 p
程式分跟秒是依樣的 (Ring就是Co)$ B+ e# b1 y) R0 T6 j* M
另外 分鐘怎從60開始$ M. i. b3 h+ p. n) ]
因為現在我是00:00開始倒數
) D" u. p1 t  K我需要在counter_backwards60_seg2改哪邊?, w& J& D' `, I8 z3 h9 w

  ^' g- _4 _$ u3 c
/ {# Z' A( x, w2 f7 Q# T+ l8 E) }我奇摩即時通:xt_9000; [% J/ M. k" _
希望有好心人幫幫忙1 c; f/ T, ]0 X( b& f# [2 ^
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,) {: g5 W: n0 m
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答1 F7 f& c- h# _5 l; X; g  z" G
我想問說  x4 W8 \1 K+ u4 K( o
怎從"60"開始倒數?/ `5 i5 L. O% ^2 H3 H9 J9 [8 _
60→59→58→57....→00) P9 R- T! r* W+ M
因為我弄出來都是5 c, c1 B# a' w) L. I# ]% f
00→59→58→57....→006 L3 S5 f3 d  o: s( ]
2 T6 e  p: s) V/ d
$ G6 d7 t0 n! M3 S0 Y
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。- `3 Q1 i( V" @9 E! \- j* v
" Q$ k4 I( F8 k: ?
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦$ j% d$ k2 p8 _$ f9 e
因為我要做60分鐘倒數# n$ o6 U- B" [9 ~' e( v7 j
所以要60:00 →59:59→59:58/ W" V9 P: ], Z, U2 Q" E7 [
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
) K8 w, P# {8 I5 {7 h     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
: F( x5 C- e* F3 f$ O我是用Quartus II 電路圖接法9 k5 O$ U7 N3 i1 i( W+ u
60:00(現在是00:00) →59:59→59:58% g  U8 @) w  U& c& Q

% W  g8 g! Q; `7 g8 t; x, D: CIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
# C; f& E5 w, V6 }3 T小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; / C$ h2 [# o4 I% u" W2 _
USE ieee.std_logic_1164.all;& j! _8 m% L! m5 y/ r, Z
USE ieee.std_logic_unsigned.all;! H/ T3 e8 g# \+ G- T
ENTITY counter_backwards60_seg2 IS9 ?5 h: h- G! W7 M' A% e4 i
        PORT(Clk        : IN  STD_LOGIC;         
$ l7 R; K5 j/ a0 B0 `5 U/ u+ e                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                2 H2 l2 P3 w2 {" v- [
END counter_backwards60_seg2;
  {2 c! I1 v$ n# eARCHITECTURE arc OF counter_backwards60_seg2 IS# P+ Y4 A4 L& W$ h. L' r' G' H
BEGIN
2 R  F. s" `5 b8 j& ]  PROCESS (Clk)
! ^, s% J! s4 X6 f  {     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);( A" l* @. w- Q( q" J3 C" n
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   $ G4 v3 G0 Y& c4 C* q/ c1 V
  BEGIN         
9 e6 V- s' f* O9 }  n( T       
; `  t+ W) m. F& T0 A# L5 B       IF (Clk'event AND Clk='1') THEN           
- G" d0 i# O- h- z# w% t: ~             6 F0 m, U# K6 \( l# Q
               IF imper0 >"0000" THEN imper0 := imper0-1;
2 i, N" L5 F3 J' l               ELSE imper0:="1001";
+ [; v/ B: l  c* r, \* c               IF  imper1 >"0000" THEN imper1 := imper1-1;- R- i0 D& s: [2 S' R) z
               ELSE imper1:="0101";
                                 
, z$ m  E1 ^% o# R4 |$ q: L" w                    END IF;
9 I! e, U/ f0 ]1 X               END IF;
" M6 V+ ?: e1 |" @' i8 F% M; y             END IF;  5 }6 }( `7 ~; W
         Q0 <= imper0; Q1 <= imper1;  
# j2 ~2 ]  {) _2 y; w0 M. x   END PROCESS ;
, k; {" c6 u% i& r# CEND arc;
0 h6 i3 E. s9 q2 W! _6 J以上我精簡了一些 也能跑模擬圖
# a  c, f  G* e但現在重點是我該怎寫60→59→58...
8 y) I1 E3 N7 i1 W1 x% a* E, Q+ g初始值60要怎寫.../ I  s$ z- H! D# b
是要多2個input 然後給他一開始的值?
+ a0 W" u$ ~& Q. Y8 s: \但要怎寫啊@@...1 ~% W8 ?" T# {
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@". B& V, w% V" r2 O3 ?3 r5 M/ W
但請問 我需要一個另外程式
; _6 u7 O; B' w, O# a  B- L2 F2 Y去控制暫停開始和暫停
/ e5 z: F) K" }2 i/ \- l% rLIBRARY ieee; ( f4 Y) S$ n6 Y) L1 O
USE ieee.std_logic_1164.all;
( k3 p; k. T2 V0 e  C% S2 H) AUSE ieee.std_logic_unsigned.all;& g5 K; Q1 V0 _& o: ?4 z- w: \
ENTITY debounce_v IS
3 e8 _/ j# f* }9 m4 C. o) \5 c        PORT(CLK,PB        : IN  STD_LOGIC;
# e* @- }% H/ j                 PULSE        : OUT  STD_LOGIC 0 L9 O1 L4 g* l6 y
                );- D7 m4 F2 t5 O! d+ o: _4 b* Z
END debounce_v;. D( ~# Q! u9 |1 f, g  J
ARCHITECTURE arc OF debounce_v IS( k' s- N* U- W2 z9 B; F/ L) e: h
SIGNAL imper : STD_LOGIC;
6 @: n) u7 v( M3 d6 Q7 [1 W BEGIN
' _! I  p2 K! ?3 k0 |7 M5 H  PROCESS (CLK)4 L9 a  k2 m1 f2 K+ }5 v0 u
     VARIABLE counter : integer range 0 to 49;/ S* D; A0 _  B3 Q, N& b2 N
  BEGIN
, s$ m0 C1 q- }* y0 T) T* G   IF (CLK'event AND CLK='1') THEN1 J' w# L  C7 h/ G
          IF counter = "1" and (PB = '1') THEN imper <= '1';
; m2 V5 Y& D0 O2 o1 @% |& J      ELSE counter := counter-1; imper <= '0';
$ g& z: S2 D5 f/ S8 L! z3 o      END IF;
8 S% \% U* ?( i7 `# [   END IF;, @  x7 m- Q! S7 H# L$ O
         PULSE <= imper;   
6 w) E$ a( V0 a6 ?   END PROCESS ;+ W8 D+ y8 u, C  C, ]7 M0 u
END arc;
1 N" K% J! F( c
% F8 O6 N+ I. {  [% K1 \這是按一次減一次" W( y/ M& E$ f; Z/ P* D/ z
想要按一下開始 按一下暫停
" R5 z# @' |& X5 s
5 W4 U' j4 b9 f% Dps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
4 i3 T. T: M2 D" f- P5 s8 c( v4 [9 L9 s) X9 }4 F
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
5 w# f9 b  f. j, t0 s  w- c  e有需要暫存器??2 }+ y5 S9 t9 V* j
那是震盪器→先接到開關→接到暫存器→計數器
! p  y+ J) ^% s) J) Y1 W這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)7 o. M( n4 B8 _( @' O4 p( _
     VARIABLE counter : integer range 0 to 49;
/ S7 ?: j4 D) m8 s, r) w  BEGIN! V* h8 {2 ]% N' {9 _# j8 s, z$ A
   IF (CLK'event AND CLK='1') THEN
9 S" D2 K; I, h) ~0 x1 \8 u' m          IF counter = "1" and (PB = '1') THEN imper <= '1';8 m+ L! A3 I/ p" S* h
      ELSE counter := counter-1; imper <= '0';
4 B# `& L( E3 _+ Z' L. F4 I8 O      END IF;
" e+ u) e2 _) M8 F$ X能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作  \# }+ O. E# ]
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
0 Y9 T9 F* e% O2 p" y8 q2 G$ M  BEGIN                  
0 H; c0 }" a$ r5 H0 D   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發4 ^# @2 n8 k- X; |% c9 K
          IF counter = "1" and (PB = '1') THEN imper <= '1';  , R! d1 O$ P; T2 y. R
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
4 F% d1 U1 G) O- @: n+ c3 g$ e, p 9 \' u; T9 X8 ~3 G
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
0 x$ p' p. r; y      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您: z. R3 b/ Z' ]6 m

  Z( `/ R8 |* N按鍵開關 第一次 on時,開始計時。' m# j0 F# T& p6 H0 y
                 第二次 on時,停止計時。- g5 F6 [3 [6 O- `) D- P
                 第三次 on時,開始計時。% ^, l9 `- P/ g' V8 L
! {$ b+ Y* d" f/ [. r6 t% ?- p" Z
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?: }2 L4 w; M* k1 y, _
平行輸入 / 平行輸出- Y$ ~9 r3 d3 F: Y" K1 `
平行輸入 / 串列輸出/ F% [- L" ?& ]. \( T+ n9 V
串列輸入 / 平行輸出7 T' j$ ^4 H5 U0 d  `, i
串列輸入 / 串列輸出/ D9 h3 @5 N9 S: ?1 W( o7 w6 b
哪一個啊@@...1 }7 J- W( F& k7 A9 P
我都是看書自己學9 r- T* n0 T3 k
所以都不會咩7 C& J# D) ~. w9 P8 V
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
" P' R' k! C/ n7 D8 I6 |今天問老師  - q$ A- g+ Q. {! s$ S6 I  s' z
可是老師沒說到暫存器的東西) D# a2 }$ k9 q0 ?$ d
反而是說 ) o- ]! L1 O* Q& {
IF CLK'event AND CLK='1
/ ]7 v0 x- Y( \/ [1 T( c0 i' acounter := counter + 1 ;
9 V: f' b8 X, z: \* w/ S: ~8 D6 [0 k: x8 M, M
抓counter (0)   ----第一個腳位?!
6 k) R6 s; ^" j0 L$ e! f給counter位元多一點之類的  _1 Z5 {' v9 T1 J9 q$ K
0 @* j& V( u- `, F* h* U) P3 \
00  01   10   11
, X1 {: H2 H# y$ r' d* |- T最後腳位為0   ----Run
5 u( q2 B: \# m# Z" h6 d最後腳位為1   ----Stop" w- R0 e$ G6 P- E. g

5 G$ p+ F2 N. K5 k$ K可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。8 `8 o5 v3 W* b7 I0 [
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,& w9 e, G# M$ r( t- e" y0 r: m
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
1 e' d3 m1 ]# c# H# s* }" f難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-14 11:11 PM , Processed in 0.125016 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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