Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;   b+ E- P$ ^# m( d' t
USE ieee.std_logic_1164.all;
* C% t5 g- l( |  }. h4 _USE ieee.std_logic_unsigned.all;
! g) U6 o5 z9 wENTITY counter_backwards60_seg2 IS9 e: V( d1 _/ p7 L
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;1 e6 L! a* l1 a. B( _
                 Ring          : OUT STD_LOGIC;                         
; }/ r6 g. b7 f% Y2 L4 b' h0 M1 |                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
5 c$ p5 C$ e- rEND counter_backwards60_seg2;
* ?+ H3 K, M5 D9 B. YARCHITECTURE arc OF counter_backwards60_seg2 IS
5 B% p1 o4 ?/ t) u3 ?) K BEGIN/ b$ L& {' D: [* H: N4 v/ D. r
  PROCESS (Clk)
0 M4 f6 T# A. h1 r' F0 F0 ~5 k     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
3 \% M7 G# u8 H* u. Y. D0 ]     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);* `9 [6 v! H) e% o2 U2 |4 x
  BEGIN
( G' @5 M1 _5 P2 L; n/ i        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
: N5 u$ o0 w3 {* S& N        ELSE IF (Clk'event AND Clk='1') THEN ) u- ^6 ?: \  f. C
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                2 n* p. `( b* _# T
            ELSIF Ena='1' THEN
( t6 l7 n- Q% o% v+ P+ r& y               IF (imper0="1001" AND imper1="0101")THEN
- o" o8 j/ ^/ Y/ {6 n, g) E                  imper0 :="1000";
( A; G$ P4 P( c               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
3 m9 \6 }8 R+ O  e               ELSE imper0:="1001";8 O8 b( K8 n7 A( d: ^) [
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
( i3 h8 Z  c$ \3 w; y. H; Y                    ELSE imper1:="0101";                      # z; v9 m* _9 G: p4 [1 M
                    END IF;
2 @7 c* `+ m5 ^- U               END IF;
4 B" b7 |8 y$ M            END IF;$ s- ?6 l1 i: O! E) P8 x- N
        END IF;
6 B" b  S/ `8 [0 h3 U: C     END IF;               
% ]4 M* A4 {6 A6 l9 |- `1 m. aQ0 <= imper0; Q1 <= imper1;
0 `1 o, d: Q' z2 }) T3 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));         5 P& U* a: ^. h, W
   END PROCESS ;0 n  l9 C3 j& _" J: J8 `
END arc;

' A4 S$ {( q- T& @, c
: v$ m, m6 A: {; ~2 f$ A4 G/ U& y上面是我的倒數60秒程式8 ?- i: R7 h5 K! i- }
小弟不才
9 {! K) \) a- y' D5 F) X8 u不知道怎寫停止- x  y3 N6 w6 ~
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;5 x5 `: N5 G1 c' c. ?+ ?: c  ]
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,! N  E" S7 b) n* D& s; Y' h( O$ x
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
5 d- _0 n6 Z2 Z" D跑一次的宣告是要放哪一行...?* I7 ?' \  _8 @
還有一個問題想請教
& a3 h: j+ L* t" x就是counter_backwards60_seg2是我的分鐘, g. s5 @, {! _' P
counter_backwards60_seg是我的秒
, a* d' T4 u# k& O& x) t  V* U7 F現在就是秒那邊 10→9秒的時候Co也會進位
% D! h1 t! f- N9 p- H秒的個位數有延遲 所以導致10→9秒的Co會進位) _1 d1 e/ Z2 @8 \
程式分跟秒是依樣的 (Ring就是Co)
( ?3 h! \% p! {- a7 Z7 i# T另外 分鐘怎從60開始
2 Q8 P5 t9 F) q因為現在我是00:00開始倒數. `% W/ F7 ?. \( f+ R  s6 @) k
我需要在counter_backwards60_seg2改哪邊?
) m6 d+ C" l% C* T( _! L1 ~+ P. |) \& ?( H% u

7 S$ [' i. C) o# u9 n1 B我奇摩即時通:xt_9000
+ `: A" x# V& R  L: K8 ]# {希望有好心人幫幫忙
; _" ~; s: k4 x9 V  U懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,  g8 i7 d7 N& t
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
7 t0 r8 o$ z+ h( q' t* U9 \/ Q2 j* W我想問說+ M( {5 d; }5 r4 b9 d
怎從"60"開始倒數?
2 m8 L1 J" H  `: C% q% f$ Z60→59→58→57....→00
* u0 b/ `, o2 K9 [4 q, O* N因為我弄出來都是
) C3 B, ]' X; D, s" T9 x. H00→59→58→57....→00# U- I! |  G; I7 ]. y

0 ~" @( k5 P2 v' W/ n4 P5 E; V/ Y* M' z) q1 V  |+ `
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。. z/ q  y: @. d$ W+ x
: o# Z9 l/ I  Q4 _
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
) }/ c( J7 k" T4 L, O& d# Y因為我要做60分鐘倒數
% |3 o) G8 a: C- g+ n所以要60:00 →59:59→59:58( W# m, M# Y3 o9 K, a" N' |4 o- Y
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
  _% A  y1 j# {3 V$ {0 [     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
1 S4 f& t2 C6 u4 X我是用Quartus II 電路圖接法, {3 j( A  A/ N% \
60:00(現在是00:00) →59:59→59:58
4 e  v2 U3 Y# B5 H- M- n2 \. W" ?% m# D  r- y: h  o2 |; R
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
4 J) U( o/ W: Y7 Z5 _9 Q小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 6 Z8 A& _( U1 w# ~# r! f
USE ieee.std_logic_1164.all;$ s+ J8 W7 D+ Y0 b7 w% f/ Y- o
USE ieee.std_logic_unsigned.all;
) [! A; y0 U) j' |, I9 uENTITY counter_backwards60_seg2 IS; o# O0 g: Z" G
        PORT(Clk        : IN  STD_LOGIC;         
0 A8 c( T- W6 e8 ^+ q                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                ' `: M( o9 H5 W# |, U% X
END counter_backwards60_seg2;( U1 |6 I1 v# W, A8 G" Y; q
ARCHITECTURE arc OF counter_backwards60_seg2 IS3 V0 e) N7 ~: m+ C. E+ a' s
BEGIN
1 f- A- Y9 u/ c  A7 O6 x1 L  A" l. x  PROCESS (Clk)
' n4 N9 {+ u# v, i     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
1 k9 R7 C( T" b# A+ Q5 o. J) d     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ) |. |1 \3 w8 @  n: g
  BEGIN         
! {% ]. M0 W& W       
7 f5 g! g, s8 O: |       IF (Clk'event AND Clk='1') THEN           
/ n/ }1 _0 n  D( A5 T; Z- o            
0 Y1 l0 b" u: X  N               IF imper0 >"0000" THEN imper0 := imper0-1;2 R0 X+ X: f' }( q  }: [
               ELSE imper0:="1001";( }) ]$ \1 l3 p, m1 j6 K( H
               IF  imper1 >"0000" THEN imper1 := imper1-1;
0 p5 o$ Q. q4 a3 [, O  e1 Y! _               ELSE imper1:="0101";
                                  8 D* y% [6 t* z" H* D# _# S
                    END IF;
& z4 t* Q7 H0 R+ |# s. ~5 b               END IF;
$ w& h' y3 C% I2 c. x# V/ y: t             END IF;  
. c  U0 Z' c. @: R) l$ E! g9 ]         Q0 <= imper0; Q1 <= imper1;  
  y# E: O' V. Q, M  s   END PROCESS ;
$ i, l- O, b- A( F: ~  s2 L  D% O9 K3 `END arc;
" o1 U( H4 @3 H以上我精簡了一些 也能跑模擬圖( q4 l3 x* i! x* a1 W6 ~9 l6 Q0 {
但現在重點是我該怎寫60→59→58...1 r) F! t" Y# T6 B
初始值60要怎寫...
# R0 M9 s& H  p  G4 s1 M! m) k8 V4 v8 w9 I是要多2個input 然後給他一開始的值?
- j8 e' n, Q6 h但要怎寫啊@@...
, C' F4 v* p! O$ ~  |5 D
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"( |% G$ b* q4 p& h8 d0 S9 S1 w- J
但請問 我需要一個另外程式' Z+ J. S4 L: k  J
去控制暫停開始和暫停4 g. V! B3 b4 _! |) [
LIBRARY ieee; : N/ d( q. k& p5 b: ^$ @4 n( B
USE ieee.std_logic_1164.all;
' v% b! A1 {* K: T5 PUSE ieee.std_logic_unsigned.all;3 l/ p/ p' X( K% `8 I0 g8 T, a2 N
ENTITY debounce_v IS
% j- F2 T. {! y1 U6 U6 k! I% a        PORT(CLK,PB        : IN  STD_LOGIC;# {; `9 F2 r: u1 Q# i, P9 D3 C1 d, Q$ N
                 PULSE        : OUT  STD_LOGIC
& Q1 u$ U, t; [# ]1 L! D' K                );
5 y1 `% t+ `. S* C7 S- TEND debounce_v;
3 o  _& b2 Z. _9 g' N( \ARCHITECTURE arc OF debounce_v IS, l+ Q  P- v, F/ p4 h- D" J
SIGNAL imper : STD_LOGIC;
9 _- _! e' Y* A# o# k9 d/ M BEGIN. h6 T* U0 U  r" U% A" h
  PROCESS (CLK)
/ B% A/ i2 f9 G2 S' m/ N     VARIABLE counter : integer range 0 to 49;' ^/ N% i' f# I3 y: W
  BEGIN7 @2 G' T9 i3 I6 F, f) _5 S
   IF (CLK'event AND CLK='1') THEN( G# w6 y2 p! P) k0 a
          IF counter = "1" and (PB = '1') THEN imper <= '1';! v0 B" I6 r8 G, v  q
      ELSE counter := counter-1; imper <= '0';$ w1 k0 J( e' t" ~  Y
      END IF;
+ v. `5 u3 U% ?- x   END IF;
& E1 F( M' J* \- t+ Z4 `7 E! v         PULSE <= imper;   
' w( {4 ^- i% S( {1 G' ?" Q   END PROCESS ;4 ~5 Y5 ?; Y. C& p# u% `
END arc;
  f; b1 X2 n0 u
( N( G( [1 M' [. J0 u這是按一次減一次
( l  \( c/ _/ e' B想要按一下開始 按一下暫停
5 Q* @+ @, T3 D6 j% c
) Y' s% I1 o4 N3 X' z8 G- P9 Eps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。. x6 o) d/ v7 g
5 J6 p) w; y5 s" }/ ^
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
3 V/ m, X$ l! f8 P( M$ c  ^" o" e有需要暫存器??
% p4 a, V) D) l! O' f那是震盪器→先接到開關→接到暫存器→計數器
7 t; n5 s( G3 ^) W' L$ v- n) b這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)6 O' L3 I' z( E4 H
     VARIABLE counter : integer range 0 to 49;
' C% l. U/ F2 K. v  BEGIN  l$ F& M- I  l: v
   IF (CLK'event AND CLK='1') THEN- t1 h. {# B" G9 W9 n1 A9 M
          IF counter = "1" and (PB = '1') THEN imper <= '1';
% s2 {; [: i  k2 s' b      ELSE counter := counter-1; imper <= '0';) S/ U& @1 i( x  {
      END IF;
/ H" u) `: O+ X能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
: O5 K# r2 ?& P2 s3 k9 r6 N+ M     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數: \* c' @" M8 S; p" C
  BEGIN                  
5 x" _/ ~0 W6 w   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發8 M5 {* [- f2 V2 h' W9 b) H5 A
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
" P, x' b2 w. q" e) m4 \  R* [* [% E                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1( l+ y2 k4 K+ _( D
7 Q7 t+ p' M1 [7 A; m+ v/ U. P
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0& y6 \6 \5 R* a$ u# |' Z0 G0 o. ]
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
) B* X3 m" r% s0 _& c2 [8 _' _+ u2 ^- s' N# a3 F! g
按鍵開關 第一次 on時,開始計時。/ H/ L. N  A$ E* G3 j& x
                 第二次 on時,停止計時。
- i% s! s9 A, D7 H  o! }4 t                 第三次 on時,開始計時。8 X! L. W  W9 O% v) P+ i3 A7 l
6 @1 d1 I3 @/ ]
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?0 X) Y  l, r; _" F& D" \8 O- C& }
平行輸入 / 平行輸出  n* b2 r2 ^  n6 O, d
平行輸入 / 串列輸出: a7 B4 e7 N8 o% F7 v3 e
串列輸入 / 平行輸出
& e5 h) d$ Q" `7 l# |( u) |) E串列輸入 / 串列輸出9 H1 _* l" L' y1 H/ z0 A& {. R9 b
哪一個啊@@..., i7 ~8 p% K, @/ O
我都是看書自己學
0 Z6 p0 X$ m0 w) I9 e7 j) |所以都不會咩) l3 U1 D9 c4 ^$ ?
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
$ V4 w0 Q$ T% g: C" i. |% b今天問老師  
' G' s2 ?1 O3 [/ @# X  q' T可是老師沒說到暫存器的東西+ Y+ N1 o' I; l$ _. e
反而是說 4 |+ @( R1 G& ~7 d, s0 R
IF CLK'event AND CLK='1
9 ]1 ?9 M* j6 {, x5 h6 z+ R7 gcounter := counter + 1 ; * D8 H( [: S6 `0 U
5 M# u! |* L% B# |" h
抓counter (0)   ----第一個腳位?!
( f6 A9 h, U1 `& u( [給counter位元多一點之類的
% ]$ J, N6 f0 K! _, J: d6 F
* F4 C2 D, `9 k: G. V00  01   10   11
. n% \; P9 R: b; i最後腳位為0   ----Run6 h0 _1 d2 a, w2 \; J5 K
最後腳位為1   ----Stop9 u4 @' K& t5 I9 l! i
5 C) |& s1 B$ x: X4 `
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
6 r- C3 Q  _3 x% T4 L" p# N8 j* z- ?至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,! o6 [" Y0 ]8 ~2 Q" O' [- K
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
! F! D7 F2 x, \7 F, _2 H難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-15 11:03 PM , Processed in 0.146518 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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