Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; % j& D9 `% l3 F0 W! ?
USE ieee.std_logic_1164.all;
0 Q/ i1 e# E8 E, LUSE ieee.std_logic_unsigned.all;
! B5 h) l9 N0 j  G5 G6 ^- ^0 OENTITY counter_backwards60_seg2 IS
4 K1 Z8 e, A" J' t1 S        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;2 }9 U* v% }  Y" B4 D' m; T5 d4 w
                 Ring          : OUT STD_LOGIC;                         
: [: q8 ?$ y2 L% x+ A! ~, ]' J  N                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        * S0 ^  E& V0 v
END counter_backwards60_seg2;9 H) m, F3 C# K( t
ARCHITECTURE arc OF counter_backwards60_seg2 IS
  F8 E) H/ a+ B BEGIN
& \8 i# I  G9 m% D! U  PROCESS (Clk)/ B( P$ P4 s1 g. f; v; O
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);; b+ Y* W6 I' U( ~/ Z
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
/ J3 X3 y2 J( `6 k  BEGIN6 x0 t8 V3 p2 Z) I6 C  {" U
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";: L, o" _2 p4 D: u8 c0 @. p
        ELSE IF (Clk'event AND Clk='1') THEN
+ D$ D% E- B9 M# \            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
+ l: ~+ z' f0 K. E            ELSIF Ena='1' THEN+ p: p6 o% Z5 C4 ]
               IF (imper0="1001" AND imper1="0101")THEN
6 T$ X6 k9 `5 B3 E                  imper0 :="1000";
4 B3 h  L+ _2 P: m! w1 _2 P: t$ l               ELSIF imper0 >"0000" THEN imper0 := imper0-1;/ G- W) O) c. y2 y: E. {( [3 u
               ELSE imper0:="1001";4 \/ i2 E8 T7 J, B* }
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
2 u! Y" k; {* S! F                    ELSE imper1:="0101";                      6 T. ?. |, D! A7 {( }' W' P
                    END IF;7 `# n) V" A2 L$ Q
               END IF;
# Q3 {- O( g9 X% C0 u            END IF;
6 D4 S% x3 A; R* r, {$ b        END IF;( m, I9 Q6 w, {2 ?4 c
     END IF;               7 W9 ^. A, y% F! o' D  i
Q0 <= imper0; Q1 <= imper1;
, @/ l+ G2 I1 F+ x5 q' ZRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
7 ]" v0 _$ @* d$ y- A$ }  Q9 L   END PROCESS ;: q2 G- P  }* F
END arc;
8 g1 f6 L$ V" A4 M' h$ |  n: L4 Y* E
& ?9 L+ E3 p5 u
上面是我的倒數60秒程式7 r  T8 V2 A' Z6 J( j1 E* F
小弟不才
& z: [8 \7 [/ L& {不知道怎寫停止
, Q1 c, x  {& c8 K5 w只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;6 O% l' {: z! H
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,% v3 a1 P' |  F8 U0 [: O
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII' g& v' }) E/ z: B. @4 C& I
跑一次的宣告是要放哪一行...?
. F* L8 x  g2 ^" b還有一個問題想請教
) N! ?$ l' s- Y' E; T: S就是counter_backwards60_seg2是我的分鐘
3 e/ \" c! q" X' D0 U) S+ Ecounter_backwards60_seg是我的秒
' u" K3 _7 y9 M現在就是秒那邊 10→9秒的時候Co也會進位
6 U+ P/ j1 q5 B: h$ E6 x$ ^7 m0 b秒的個位數有延遲 所以導致10→9秒的Co會進位
2 Z' Z6 N# K: o3 S程式分跟秒是依樣的 (Ring就是Co)
3 |+ e0 f; d5 n另外 分鐘怎從60開始
* ^, N5 W: Q+ O+ X; P  Y因為現在我是00:00開始倒數
/ R, v, A2 n& h3 X- b( }* f0 \9 o我需要在counter_backwards60_seg2改哪邊?
8 Q4 q% a$ i' }& I
$ _8 S# o; d& A2 T+ ^9 q4 Z8 K/ z6 D# u5 ^5 w7 f* ]4 ^) ~* t
我奇摩即時通:xt_9000
) R# h* Z( d: \! _3 O0 j9 k3 G希望有好心人幫幫忙
3 E- n4 P( d% u% b, c& u' w懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
- `! _4 U) I+ p3 z看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答3 L$ o# a( y5 B, N2 l7 h
我想問說6 Q( a5 Y) y. w( z& ?" Y3 e
怎從"60"開始倒數?
1 U8 Z; a# s8 ]1 e3 \4 ~( I60→59→58→57....→00
( a1 c6 ?. f4 S  o9 E因為我弄出來都是. s7 n0 H: p: D% D0 B
00→59→58→57....→00
2 V9 ]. c  F' r" I5 q* C1 B
. f( ?, T) [* b, G% _8 x4 f5 H: \/ U  }* Q8 M& t2 V' n  a
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。! {. A, A2 _! G" p& i

" T5 T2 b! Z/ t  }: c  }: a不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦. f% c  d+ H6 t" a0 g# K) V
因為我要做60分鐘倒數. E$ h, X3 O: z0 O
所以要60:00 →59:59→59:588 x+ b- G' |: z$ S9 O/ l/ U1 h6 e
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
. ~, Q' T7 u+ |" U0 H- I     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
( a2 @( F, _+ B' Q& H1 S$ n我是用Quartus II 電路圖接法
4 F5 C8 R2 B2 D: Q* Y: t. T0 w6 T60:00(現在是00:00) →59:59→59:58
* d0 N: n7 W3 |8 R* t( l7 j
& m+ k6 M0 _. }: e: Q9 @+ J1 k4 @IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
9 r5 \9 F( X/ R' K( F小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
$ E* O! d6 r: \- F, cUSE ieee.std_logic_1164.all;5 A& r* E0 d, R( {
USE ieee.std_logic_unsigned.all;6 C+ ]% S/ P, _- Q+ y1 F
ENTITY counter_backwards60_seg2 IS
6 w8 ?. q8 S+ ], T1 |' c1 [        PORT(Clk        : IN  STD_LOGIC;         3 ^2 F( @" ~4 R
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                ' A  ?1 N" B. B3 [( {
END counter_backwards60_seg2;
0 F& X9 J! n+ @. T9 f1 _5 oARCHITECTURE arc OF counter_backwards60_seg2 IS
, x, c* Y( {# i2 e8 E BEGIN2 |* l6 M1 D8 f7 P$ f
  PROCESS (Clk)
( S, f& V' S0 F6 e9 m  C8 [     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
3 q3 x' j4 f# w! C* {  \     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ! s4 V& J" A/ Y+ f+ |+ K8 b
  BEGIN         
- N2 T+ D4 |/ K5 U       
! k1 d3 h; ~9 n       IF (Clk'event AND Clk='1') THEN           % M4 ^+ o: g$ M+ ?) s6 Z( N, T
             9 ?) p- D; S, ^
               IF imper0 >"0000" THEN imper0 := imper0-1;
+ Q! \9 B7 Z8 H9 M               ELSE imper0:="1001";
" L7 c6 ]. l+ h6 P* p+ r               IF  imper1 >"0000" THEN imper1 := imper1-1;8 u" `8 Y' b4 L$ N; A2 ]" A' j
               ELSE imper1:="0101";
                                 
8 I+ n1 [# K! `4 s6 H; h, G2 Q3 Q5 l                    END IF;  b; _  N4 n% Y  F7 ?4 a
               END IF; - a% F* i. x7 m: Q
             END IF;  7 j3 J5 o, B; W6 S+ c1 J- \$ O
         Q0 <= imper0; Q1 <= imper1;  , s5 V3 L  ?9 H! }( m
   END PROCESS ;+ w2 \% H' A/ e
END arc;
5 x* U9 o6 u! E/ f1 f, V  ]$ f1 O3 C3 L以上我精簡了一些 也能跑模擬圖8 q, V8 D* V, F! T' h8 i4 h0 N& h
但現在重點是我該怎寫60→59→58...
3 c. l0 G- B, p: ?初始值60要怎寫...+ _; [1 {2 ^& R& X8 {+ n0 B
是要多2個input 然後給他一開始的值?$ B- h) B) d6 R- O
但要怎寫啊@@...) E. ]6 ^% m: R% o" ]
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
/ d' ]; J% B; s但請問 我需要一個另外程式6 p. W" d! T; N. ?) a' G/ M
去控制暫停開始和暫停# _+ ^  _8 j/ u& t3 v2 c
LIBRARY ieee; $ Y( ^# e( Z7 S+ L* _
USE ieee.std_logic_1164.all;6 V3 V' ?1 C1 P) y) l- u
USE ieee.std_logic_unsigned.all;
4 o  q( [1 k5 I$ p5 `, _ENTITY debounce_v IS
, j5 ~: R6 J6 t' f+ c. P. @        PORT(CLK,PB        : IN  STD_LOGIC;
+ J7 W+ d# D( Q+ D& V2 N- m                 PULSE        : OUT  STD_LOGIC 2 P3 \5 d: g1 U& _
                );
8 a* `' i: P5 M/ }% E. D! V! kEND debounce_v;
! A/ ?& i2 }9 t8 T  T- ^2 yARCHITECTURE arc OF debounce_v IS2 g4 X+ z( ~5 M+ B. n3 O; [
SIGNAL imper : STD_LOGIC;7 S: X& {) T; Y) `1 {4 K6 ^
BEGIN# `) g) l9 N- U% L% N$ X
  PROCESS (CLK)
1 }5 O) ^. k5 d$ y     VARIABLE counter : integer range 0 to 49;
* _+ \  u; s( ^- W$ ^# V  BEGIN( m7 M! S+ o3 j& Z! o9 T
   IF (CLK'event AND CLK='1') THEN
/ q. O2 L7 g. b" a2 u          IF counter = "1" and (PB = '1') THEN imper <= '1';
) E# W$ S* P, G$ g2 ?  \5 Z% ?      ELSE counter := counter-1; imper <= '0';
( ^; X6 ?2 k) I( H: ^8 g      END IF; 6 P) q4 \. c' R% Y3 Z. e1 p9 L- p
   END IF;& O/ n2 q, U6 [- b+ J6 ^. D
         PULSE <= imper;   + _8 Z3 e6 K- q: V
   END PROCESS ;) C- o. U2 l* N0 {6 x
END arc;
! z' J% ]/ s! @/ H9 U8 X" h/ x3 P' N/ ?; c2 U1 F# d1 U
這是按一次減一次0 T9 W3 a5 R' N. B: y) g
想要按一下開始 按一下暫停
5 i1 u; _; }% m& P, N- q0 r
$ `4 G1 C+ c* h5 _6 c" R" j2 nps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。1 P$ Z9 L0 H% m% _

3 x( m; S* k* B3 M7 [你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"( e0 f2 ]8 |0 _
有需要暫存器??
7 P1 T9 D4 Y: M那是震盪器→先接到開關→接到暫存器→計數器
6 w4 O5 J6 B; E) B這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
2 I+ j1 l( L5 d9 |; ^& f6 K6 o     VARIABLE counter : integer range 0 to 49;
% r  |# d$ g( D  @* ?% E. V  BEGIN
2 E2 j! R! }4 ^% S   IF (CLK'event AND CLK='1') THEN
+ [' S' M/ A3 j          IF counter = "1" and (PB = '1') THEN imper <= '1';
( t7 J0 w( s$ }2 O! I4 S) P9 F      ELSE counter := counter-1; imper <= '0';" n: M; n& n7 l" W& K, t
      END IF;
# f/ o* m) g1 [3 }  W) A3 P能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作8 ?+ C& h* H. M9 C
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
. g! E7 p7 @' U+ o  BEGIN                   " t: e1 R' ^4 I; p5 }. W# m, M1 ~
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
% g, \. z1 d1 {4 `/ w          IF counter = "1" and (PB = '1') THEN imper <= '1';  
# c7 |& z5 H/ ~                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1* r+ R% {1 y  L
6 ~5 \7 N. h) H! `6 G! ?
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0' y6 O  X, G: H2 j
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
* g2 ?" E( f/ W
$ L2 m3 ?, l0 r4 M) |3 }( [按鍵開關 第一次 on時,開始計時。- S% Y9 b6 Q) i
                 第二次 on時,停止計時。' g- S( \. `$ f: ]! _7 _
                 第三次 on時,開始計時。
- ?; [+ G, V# K& J' J0 h2 U7 V! g( }- E3 S/ g
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?/ z+ E; j6 L0 M4 a# d: H" `
平行輸入 / 平行輸出7 R) _! j: D0 E& e
平行輸入 / 串列輸出
: y3 e1 M* Z6 Q+ l) C0 \  C! P8 B串列輸入 / 平行輸出
. ~6 o  d1 C' F5 Y0 {串列輸入 / 串列輸出
; B8 x  O7 `: r6 E( e哪一個啊@@...
* N( P& ^2 r$ L" h* o我都是看書自己學9 l1 X% F4 g, t0 E; K3 w; @2 W
所以都不會咩
$ n5 u8 \8 P' S' C; f4 l拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
- a4 y1 ^' E7 z" J5 f, L6 W, H今天問老師  
, \6 I" J4 N! _& C; s- ?可是老師沒說到暫存器的東西
$ K5 D2 S9 t, i6 C& I反而是說
/ O: |% p" R) Z5 CIF CLK'event AND CLK='1
; t6 u! G+ L( R) O4 h4 ccounter := counter + 1 ;
7 J9 G) `* x8 |5 Z; a  l$ V; K# X
抓counter (0)   ----第一個腳位?!3 t9 E. E# x, t" j$ @0 Z5 H
給counter位元多一點之類的
- Q! Q- U* T( w3 s3 b6 ~: u) L5 L
00  01   10   11
9 \5 M) J% M4 |  _; F3 x最後腳位為0   ----Run
8 z$ G8 d' [/ V' Y( P' {. F最後腳位為1   ----Stop
. Z5 f2 ], Y$ P" c; ]
- U; Q6 D1 @+ L- j可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
$ k+ a0 h. F: b( n! N; f至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,  x: H: M3 `! p5 f- {& f% j' W
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
0 S/ @9 e; c$ F4 A難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 05:36 AM , Processed in 0.144519 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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