Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; , S* D% D/ V/ y: G( ]
USE ieee.std_logic_1164.all;9 ~' g% \9 N2 k9 l
USE ieee.std_logic_unsigned.all;3 J2 w4 @+ b1 P' V
ENTITY counter_backwards60_seg2 IS. D& O& y( }1 x. C+ l
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
4 s$ a8 H; H' `1 _$ k$ Q                 Ring          : OUT STD_LOGIC;                         ( L3 c% ^; `" z0 Q: s& D( p/ u$ w
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        ( T" E7 i$ O5 E% P' d2 @& r
END counter_backwards60_seg2;
$ B& t/ i* X4 {$ E0 EARCHITECTURE arc OF counter_backwards60_seg2 IS
4 w0 g' e( X* n8 e: A BEGIN, L9 \/ f; B8 o1 |6 l
  PROCESS (Clk)9 @% e, E* d4 }7 i2 m* K
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);3 B$ u0 h) S4 t
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);! n' _7 m- k* f# C8 ~: _: h
  BEGIN
3 ~; \! {. \% F        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";1 o; p. D0 f) w* @
        ELSE IF (Clk'event AND Clk='1') THEN ; C! h: E' \. D- I+ t6 w0 i
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
5 `& \- O# x) Y1 o7 o            ELSIF Ena='1' THEN
7 ?/ A* M) F3 e, ]- j% H+ `6 O& F               IF (imper0="1001" AND imper1="0101")THEN6 B) A4 F1 o, K
                  imper0 :="1000";
1 \5 f' p: v, ^: O$ N0 W- M( @9 Y               ELSIF imper0 >"0000" THEN imper0 := imper0-1;2 T# U' ?* P3 V( o
               ELSE imper0:="1001";
% Y7 c! N$ N9 i2 I8 f                    IF  imper1 >"0000" THEN imper1 := imper1-1;
% I' C3 K1 f' V; z) Z                    ELSE imper1:="0101";                      2 d0 s9 K% s3 y/ Y1 K
                    END IF;; [6 k; F$ J% d6 i- C
               END IF; % {  C% q- N* i- T5 K1 ^9 S0 T3 a
            END IF;8 r- m  F6 e4 S- {8 R3 i
        END IF;
/ d, `1 J. d# |8 S/ {" g     END IF;               
' z& @* \& w3 N$ @7 _Q0 <= imper0; Q1 <= imper1;
4 R, y1 f+ v, {' aRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         ) q. `- l+ O* M; {
   END PROCESS ;
2 A5 o& v2 ?( [6 D- pEND arc;

, R, Z* R7 \4 M1 p0 q
5 p; x: h/ U5 x1 Y7 g) s) W' C: ]上面是我的倒數60秒程式
% T# N4 X4 ~3 e7 u小弟不才9 ^  M/ o) N4 h: T7 U
不知道怎寫停止0 r( u& {1 @2 ~! u" D% J
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;* x5 P! j# v! [  J  x
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,' Y; R4 u% ?- q! ^$ Y: z
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII) f$ ]9 E: R+ q9 l1 a; q
跑一次的宣告是要放哪一行...?$ }& _$ z% J% K! {
還有一個問題想請教
; R+ c0 ~* K5 b就是counter_backwards60_seg2是我的分鐘
; T! w4 K  Y) F/ S. P. Wcounter_backwards60_seg是我的秒
6 M+ f; v% E5 y! _$ F現在就是秒那邊 10→9秒的時候Co也會進位
" @6 S: d* J+ D+ y0 ?, {1 g秒的個位數有延遲 所以導致10→9秒的Co會進位: N( y- [" H9 |: z- S4 D
程式分跟秒是依樣的 (Ring就是Co)2 ~/ L. }; C, N8 Z& Q  t; F
另外 分鐘怎從60開始
2 H; m& u6 f5 K! M因為現在我是00:00開始倒數
% h3 L) ^6 `# l# _8 }我需要在counter_backwards60_seg2改哪邊?1 J# S6 ?, I# A( i5 l
$ c. @4 U* U, y

4 D6 x# G* X$ X- G/ K' X( [我奇摩即時通:xt_9000
# e7 o2 ^3 \& a) j$ {希望有好心人幫幫忙# L( c: F3 y/ R$ h0 ~+ T9 ^
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
* e2 N) r+ K8 N$ l/ g看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答# H. t7 o" R7 C/ w6 c4 y* z
我想問說
, ]7 [$ Y  K5 T, i怎從"60"開始倒數?
2 P* G. u# D8 A. W; b# O- V60→59→58→57....→00' ?+ R- t$ C. S2 P+ a$ d+ n
因為我弄出來都是& K& {$ J, n* J$ m# g8 C
00→59→58→57....→00  V% b2 I6 b5 u- L- s

/ x; b+ L$ M& v" l0 f( ?
5 C- p& G7 T8 f8 G  U( v2 y) w希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。& H9 f+ q4 d0 p+ o

& Q1 J' ~& x+ f0 M  a) {3 _) S$ j不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
/ D8 q9 x- \5 }6 y( Q: c  @- W因為我要做60分鐘倒數1 ]# o/ Y- \0 G6 M/ B; k! X
所以要60:00 →59:59→59:58
5 ]) D0 X$ T$ G7 x7 W' x0 I% [( i我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then' [& w7 q0 ^. `  D& B' |
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"1 h. r% @9 d) J/ _9 I
我是用Quartus II 電路圖接法) H& }, Z9 G7 {9 Q# N  Y' s
60:00(現在是00:00) →59:59→59:58
. n- O: u/ ?' c1 D) b( M8 l8 o, s8 b  U2 _: }% c& }
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@5 h; J! b4 ?( S
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; * V+ t! _: L1 M% v
USE ieee.std_logic_1164.all;
$ i* [* C" q4 PUSE ieee.std_logic_unsigned.all;
3 m) f* K4 [( ?, @0 f2 C8 pENTITY counter_backwards60_seg2 IS: K! S2 t  G% K9 z4 o" A7 @& o3 Y
        PORT(Clk        : IN  STD_LOGIC;         ; ^% `2 w8 r' ]" o3 J; Y1 p
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
# r5 B& \( X' Z" {+ c6 l5 }END counter_backwards60_seg2;8 W+ b" I* |8 n, Y* U" s
ARCHITECTURE arc OF counter_backwards60_seg2 IS0 W4 F. P5 W7 ~2 ?* X
BEGIN
& B: C4 o5 Q/ \8 E  PROCESS (Clk)
; W6 ~& `4 }' e! {     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);" B$ O2 x. M* w* k4 g# Y. h. e
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   % g6 C" M7 B% y, _7 K
  BEGIN         
6 W& q9 U  W" `, v' Y" g       9 o( _. }9 t% c, d  v+ p; W- X4 K
       IF (Clk'event AND Clk='1') THEN           " H- n. ]( q+ ~# o: f
            
2 A6 \0 M2 |& ~  U# Y/ p0 I) s               IF imper0 >"0000" THEN imper0 := imper0-1;
/ E: b& \" y( Z4 K9 d- U/ Y2 q* N0 r) p               ELSE imper0:="1001";  n4 j1 b$ Q/ I, P+ J7 d1 S
               IF  imper1 >"0000" THEN imper1 := imper1-1;. o& K" A6 F  ~) u7 C
               ELSE imper1:="0101";
                                  6 ^) }4 J: C8 M8 B9 D; d
                    END IF;" S4 ~6 y; u' z3 J! N7 F
               END IF;
: b5 m, Q% ?9 f. _" y) {' R4 I1 w$ V( {             END IF;  
4 M0 ?) w  B* w( L$ Y         Q0 <= imper0; Q1 <= imper1;  
% e' P3 f( Y! ?( r  {, T   END PROCESS ;
# X) }$ M; Y% g( ]- {3 MEND arc;' ~; N6 s* K: X, z/ h
以上我精簡了一些 也能跑模擬圖
. n; C0 G! y& k# H) Z2 N但現在重點是我該怎寫60→59→58...' I; }, s+ \5 |- h" r2 Q
初始值60要怎寫...
  k% m5 q" ?* z/ W8 [) y/ G% Y; J是要多2個input 然後給他一開始的值?
, f& E: G' ?5 S, O1 j, C但要怎寫啊@@...
* G2 n& T* C! ^0 q7 B5 W0 `1 W
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"7 W- E3 M/ X+ d, f; G2 U
但請問 我需要一個另外程式
+ L+ }$ P: P6 Z; I% h; J, e3 F去控制暫停開始和暫停3 j3 L, p: N) g' A
LIBRARY ieee; 4 r5 @1 |# x- Q* W5 E5 O. A
USE ieee.std_logic_1164.all;) k1 S: v4 D# i6 B  ]- t
USE ieee.std_logic_unsigned.all;! d+ A) S, o  o
ENTITY debounce_v IS
: T( b: n7 K% X! v        PORT(CLK,PB        : IN  STD_LOGIC;
# k% n" |7 M" [) ^* F                 PULSE        : OUT  STD_LOGIC
+ G5 i; u: R# i/ C. z, S8 m                );& s0 E+ o; l  g: }3 A" {4 I$ Q2 @
END debounce_v;- d5 ^, Z" A" x( k& |
ARCHITECTURE arc OF debounce_v IS3 D. \& x/ d: p( s" Y
SIGNAL imper : STD_LOGIC;4 i" |8 Q  X. @( w  x' H$ K6 _/ ]
BEGIN" p2 U8 f" t1 q
  PROCESS (CLK)
7 a: q, E* P9 D4 H     VARIABLE counter : integer range 0 to 49;4 ^* L5 L7 p5 A
  BEGIN% M' E$ j: l2 W! [
   IF (CLK'event AND CLK='1') THEN' f! j/ i9 w$ J" p
          IF counter = "1" and (PB = '1') THEN imper <= '1';
0 d% o0 [+ \9 d) T- x' Y* O      ELSE counter := counter-1; imper <= '0';& D6 ?% Q1 |- ?8 Y9 x
      END IF;
' Z8 A5 }( }5 K) P$ ~8 o3 [+ ]   END IF;! w) \5 x. g# c' S  Y- v  c
         PULSE <= imper;   
, _% ]' E2 X" X  ^) Q  M3 I- `, A   END PROCESS ;( T" f" I0 {/ C
END arc;
) ~0 h; \' E$ E  D; K
- C  |0 Z0 s$ K; K3 [+ v5 U這是按一次減一次
1 X6 {3 l# T% b4 a& L想要按一下開始 按一下暫停! X6 T( @6 M; w/ W( b! H5 R

5 H, h' ?  u/ mps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。8 ^' I" ]/ Q% L
" `% ]$ y1 Y" x' U9 Q
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@". J' u) W+ c1 l0 J  {8 T5 V
有需要暫存器??
* \6 |. D2 O1 n) |+ f那是震盪器→先接到開關→接到暫存器→計數器6 \& w. b; z7 R
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
/ z8 ~9 f" ~* S2 u0 f% ~9 x) W     VARIABLE counter : integer range 0 to 49;
9 [* A# C( M+ }! F- f+ @+ w  BEGIN
$ ~' B2 Z: ?/ X4 H/ h% @3 g& ?   IF (CLK'event AND CLK='1') THEN
8 |( e5 B. f/ }# N( ^, D; ^. e          IF counter = "1" and (PB = '1') THEN imper <= '1';
. `# r/ Z7 @! Y      ELSE counter := counter-1; imper <= '0';- ^6 s& s$ c  U" L) ]$ }) Z* j% ^# L
      END IF; ) ]4 `4 @3 v! E4 ?6 f6 Q9 j7 |+ t2 B
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
/ \5 {5 G4 J+ [     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數9 u( W% _* r5 {! u
  BEGIN                   " {8 U# W0 N. Y! J0 ^8 X; s8 C, [6 L
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
* H- K+ k* `( c) G9 x0 a6 @- v! A8 j: H; `          IF counter = "1" and (PB = '1') THEN imper <= '1';  
* S+ r$ _3 @) w' ^                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1- T" P& d  K. v4 y$ ^- a3 }) a
$ y9 U0 z. y! Q. I' c$ \
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
  G. y) z/ u  Z6 e$ U- S+ }      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
+ j* A( o' x: z- e5 p5 |: J! U: e  z4 R1 z
按鍵開關 第一次 on時,開始計時。2 X$ M8 b; q1 u
                 第二次 on時,停止計時。9 K" g- O. X* j  n: Q
                 第三次 on時,開始計時。
' U3 [9 d: ?! F4 M& k% T6 P; k" c
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?% k2 B- X9 U$ t. _5 ^
平行輸入 / 平行輸出! _& g: j, t2 N. ^. x7 i; J
平行輸入 / 串列輸出2 v# ^$ a5 Q$ R0 O. q" l
串列輸入 / 平行輸出
* }, L, \, \5 K3 Y9 |) D* r+ L6 |串列輸入 / 串列輸出! A9 A2 X0 m! l/ r& l" q/ P% M
哪一個啊@@...
" Z5 S5 e. N6 L" \& A4 w. @我都是看書自己學
  A% i3 i. F5 G; I/ A- d' d$ I所以都不會咩
" [; R# p5 _- b; I; w8 m7 b拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!$ h: J9 u: h$ J9 _( y
今天問老師    O; j9 H6 F6 W
可是老師沒說到暫存器的東西
3 }( u  u# G7 z6 U0 q  u9 z4 J反而是說 7 n9 s5 e+ L: s! W8 Z
IF CLK'event AND CLK='1+ g4 J, Y* M- k% l9 ]2 F6 U
counter := counter + 1 ;
* \+ O. L( L) ]7 {$ U& E4 @7 G) t6 w! ^) }+ ^
抓counter (0)   ----第一個腳位?!9 p2 b5 k' j; Y6 R1 F/ O+ v! i, \
給counter位元多一點之類的
& F' @/ d/ i* B9 w& e$ ~4 j4 q
6 g. w/ L1 w* j  o2 e9 ^  H( [% k00  01   10   11
, ?3 l1 ^' c* M0 N+ \, ~% c& G/ _最後腳位為0   ----Run7 ~( n* p' B, ]8 O; g
最後腳位為1   ----Stop6 [/ I! k/ G; t) x
7 u$ H+ B$ ?1 T& w2 k! w
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。  r- Y6 R% n& T$ K) M4 [5 b
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
$ ?; z- _7 ?2 C. V跟你說原理你又不去想,要用你懂的畫圖的我又不會,
4 e  t* A4 c3 M$ q" b難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 06:30 PM , Processed in 0.150519 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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