Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; % ?) t4 k$ \- [2 `9 @
USE ieee.std_logic_1164.all;8 |' r% w' }5 `2 Z9 w2 y% c/ s: O: |
USE ieee.std_logic_unsigned.all;6 u$ q, c# U2 |* `
ENTITY counter_backwards60_seg2 IS9 N# ?7 f3 [% C4 s7 q/ f
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
' i5 Y" I, T# d" K9 [% Z( E                 Ring          : OUT STD_LOGIC;                         7 p1 L$ r, M  }" r4 c- ^
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        3 t, B# c5 Q0 L9 p2 X) d
END counter_backwards60_seg2;
. T  F6 m, h1 }* {* A. s* t7 M+ |ARCHITECTURE arc OF counter_backwards60_seg2 IS  M  P$ K7 V7 b/ ?
BEGIN+ T5 o& R  o  Q
  PROCESS (Clk)0 M- T: S5 S0 G1 f4 h. o0 x
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);9 @5 F3 j. L" M- ?7 i
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);1 X5 t7 v! X( B' w
  BEGIN
* i8 ?# ]! r0 p' w- ^        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
$ B+ A: D$ o/ v$ ^8 m3 C: I        ELSE IF (Clk'event AND Clk='1') THEN
, ~6 {$ G# L$ A6 ~. W9 J/ c- d! [            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
4 h/ K$ x* \7 f4 c) J. I' a            ELSIF Ena='1' THEN9 h# J4 n# g: ^( u, f. g2 q; @- Y+ p7 s
               IF (imper0="1001" AND imper1="0101")THEN4 S5 J( R4 J  |2 R* T7 [
                  imper0 :="1000";
8 e9 o7 ?3 Q2 z8 |2 ~* ]- M               ELSIF imper0 >"0000" THEN imper0 := imper0-1;+ a" [! Y' w) Z+ p5 C
               ELSE imper0:="1001";
  W; H. J5 \! x, Y' E( B1 ^                    IF  imper1 >"0000" THEN imper1 := imper1-1;2 W9 o8 J+ Q$ Z
                    ELSE imper1:="0101";                     
& h1 R+ O' C0 r/ l2 X                    END IF;" B" Z- z, f% t
               END IF; 4 T, s+ l% l" n" h. x6 G
            END IF;
) f2 A; E& m# i        END IF;
: W* V6 a2 g) {+ F' w     END IF;               - d7 d2 k* X; S. S- ^
Q0 <= imper0; Q1 <= imper1; 7 d3 u* Y$ s+ X
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));         
+ w7 |: U: h, E: y1 G   END PROCESS ;) l' B. z2 }% A
END arc;

; U2 U0 ?# U9 U/ C0 J( Y& f* U* {2 q
上面是我的倒數60秒程式" X) @) l$ ]4 K
小弟不才: Y. l' D- v& Z0 G/ k& ~
不知道怎寫停止3 }5 M7 H5 i0 H- @: r' T: b
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;( C+ b2 H! a2 U5 x
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,* n% Q; J: c+ \
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
$ \. Y5 D4 L/ S: M2 X7 v6 v. n跑一次的宣告是要放哪一行...?
5 y% e. Q: X. L* w! T5 Y5 ^! \9 K還有一個問題想請教0 P( s) n# H) K( Y3 {
就是counter_backwards60_seg2是我的分鐘) I: T. m5 c" Q
counter_backwards60_seg是我的秒
9 \+ `; e- {/ k0 ^# c3 q% G現在就是秒那邊 10→9秒的時候Co也會進位4 v$ ]; H* u+ P' b7 r0 Y
秒的個位數有延遲 所以導致10→9秒的Co會進位3 g+ p( Z- o# G! a' e$ @7 Z
程式分跟秒是依樣的 (Ring就是Co)
: h  ~; ?& {1 a& t9 l) l/ p& e另外 分鐘怎從60開始
# s3 x7 X$ Q- z/ z因為現在我是00:00開始倒數' X3 m5 T+ G! o) r6 d
我需要在counter_backwards60_seg2改哪邊?
0 k, ?1 `. P$ ^) V" c1 O2 y5 _  U
5 a% L# _( V6 ~( L2 ^& x
1 q, [- K! B9 {3 F我奇摩即時通:xt_9000
3 ?2 I5 ~8 h+ i8 n1 |希望有好心人幫幫忙
& G) c: S- v2 ]$ Y/ {% D懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,$ d8 x$ X& D, Y6 _' }; c7 `
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
( j3 [( W! I1 a1 T1 d& I, K我想問說
6 g5 }: @0 @, L: S! O: c! l怎從"60"開始倒數?" ?. d+ e; y7 E; w2 @9 ~
60→59→58→57....→00/ v/ n. y* C7 j
因為我弄出來都是/ k" I* D& n1 J* t
00→59→58→57....→007 `; u& m  s/ d2 n6 G0 F7 M
  \* H8 [' A' X5 k- E" |
( m* Q1 h% i3 V1 h$ l
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
: `' b- d& P6 j* n2 a
& @- w* z# D* W9 E+ P不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
6 }7 r! ?, ^7 c: \4 e" d. G0 x% A/ ^因為我要做60分鐘倒數
, ^, u( y, h4 F1 `% |+ L所以要60:00 →59:59→59:58/ w% @4 i% e" s) B
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then% D/ x$ M, |" |! J
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"  j+ N  G9 E" B
我是用Quartus II 電路圖接法' U6 t1 P" Y$ q% ]5 i  w- \& Z* S
60:00(現在是00:00) →59:59→59:58; l+ ^1 x2 |+ j1 J/ S9 d* O

9 E4 ?4 K( J; \IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
! O2 d2 d0 H# Y5 ~# b小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; ) ?9 L1 g: `. k
USE ieee.std_logic_1164.all;
  B5 _/ n' i7 M) DUSE ieee.std_logic_unsigned.all;3 |/ z5 T2 `" l9 p3 Z
ENTITY counter_backwards60_seg2 IS
' R* Y& k" u; v4 N        PORT(Clk        : IN  STD_LOGIC;         
0 T: e4 _7 [; w0 x1 ?                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                : I/ N0 J7 ?9 t% c
END counter_backwards60_seg2;$ b! b& W9 X* D, I
ARCHITECTURE arc OF counter_backwards60_seg2 IS. F! f% i0 j5 [, G% |7 y. K
BEGIN
  S( m& F3 G8 ?# b! c# P  PROCESS (Clk)9 L3 u- h9 x' r' x7 ^" Y
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
. c0 K! {5 {. w+ ~     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
) D: \' s$ L, }$ F* f: R  BEGIN         
: {  r- y& p+ P3 s       
/ w" m7 K- J- [$ _       IF (Clk'event AND Clk='1') THEN           
$ l; A6 f% n. d6 x            
5 e  E' |" _! D' t) z2 ^4 r4 G               IF imper0 >"0000" THEN imper0 := imper0-1;+ C. m/ Y1 j% S
               ELSE imper0:="1001";
; o. S5 o& p$ l6 j3 t9 e  i4 V               IF  imper1 >"0000" THEN imper1 := imper1-1;& b( z8 U: U$ z  }' |4 G: h5 i3 ^4 f
               ELSE imper1:="0101";
                                 
1 {: L# c6 f) B; Y- w                    END IF;
$ I# A5 d4 _9 ]               END IF;
6 _5 o) X) s5 l8 k  s1 a7 g& k             END IF;  $ ^+ w8 ~* Q( X4 d* ^/ h( l
         Q0 <= imper0; Q1 <= imper1;  # f, W; I" }: }$ ^& d7 w# Q, g
   END PROCESS ;
9 i* Y7 O! ]" sEND arc;6 i! _  x6 q; B. `7 q
以上我精簡了一些 也能跑模擬圖
0 r. U1 M1 y! s7 m* ^$ E但現在重點是我該怎寫60→59→58...
8 B" P# d" ~1 V% l7 Y: g初始值60要怎寫...
" g. ]; n! K: d' j# k' I2 C9 p是要多2個input 然後給他一開始的值?
% \, n! L, q. W" y6 O但要怎寫啊@@...
6 @( a- ~' r' ?$ s2 y# R
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
( t! O% _. g6 P# w; N) t但請問 我需要一個另外程式2 X; l0 F9 e- c5 U/ h4 U2 H/ e
去控制暫停開始和暫停
# T! H8 x9 `3 T2 N. LLIBRARY ieee; : P" X; [# |; r6 R% j
USE ieee.std_logic_1164.all;1 Z$ y  M8 r! Z7 L5 a* M0 Y+ i
USE ieee.std_logic_unsigned.all;8 x$ g2 ~) c3 d! Y' m: m
ENTITY debounce_v IS8 {( y+ b9 T9 _% Q# i8 d+ j9 i
        PORT(CLK,PB        : IN  STD_LOGIC;
  _0 h$ O& ^* }  m; [3 v, U                 PULSE        : OUT  STD_LOGIC
$ M4 T1 V% N5 q/ ~. r1 s                );
3 H. P1 D' o- lEND debounce_v;7 x( f0 b; c/ ?2 F* l( C
ARCHITECTURE arc OF debounce_v IS
% y* _0 v+ R! |$ C3 l/ t; t SIGNAL imper : STD_LOGIC;' x% O1 D6 `5 n% j4 a: K2 I% a
BEGIN
- j+ w' x2 f! C" F) z  PROCESS (CLK)
5 f4 H2 y- D7 x2 W' P# T1 z     VARIABLE counter : integer range 0 to 49;& h# |) b2 f2 s0 B1 b" ]
  BEGIN
2 W6 F, x. H$ C" u: O0 N8 y) u   IF (CLK'event AND CLK='1') THEN
9 o: Z8 g- _5 C" }, C" O* W8 @          IF counter = "1" and (PB = '1') THEN imper <= '1';
; e9 f. Y5 D2 d      ELSE counter := counter-1; imper <= '0';
1 C- g5 M! {: e& X) [) a5 r      END IF; $ i5 E- l8 p3 U
   END IF;& e! }: ]7 h3 `2 Z; X: n
         PULSE <= imper;   $ h( K- g8 o: _  p( f
   END PROCESS ;
  K' ]$ ~' L0 a" x9 Y' SEND arc;- P0 M, @- A7 K* I2 h! d2 N

5 r: a5 J, a- w6 M. \5 o. E這是按一次減一次4 l; g2 P$ q6 Q- \1 w5 P# s' h
想要按一下開始 按一下暫停
; u! \1 m* x  Z" D9 S& `
1 e$ Z( X9 @# |4 [' \ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。0 {1 W: @; T5 B5 ^* T. I# Q* k: p
' Q) V% n. m2 {
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
8 @- R) _* G: U, z% z) [& x  R有需要暫存器??
$ L( u+ {2 ~: f) T% ?; U那是震盪器→先接到開關→接到暫存器→計數器  ~+ R0 L3 d. g9 X: q
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
; h2 g- U5 h) S& U& z" ~     VARIABLE counter : integer range 0 to 49;' ^% F: {! f* X: W
  BEGIN
5 j' Z% R) V" \) P/ p   IF (CLK'event AND CLK='1') THEN  U) b  T% h2 r% Q2 e% }
          IF counter = "1" and (PB = '1') THEN imper <= '1';
4 P# B- A: t4 {1 k      ELSE counter := counter-1; imper <= '0';
: ]1 m7 ^1 ~/ [% T      END IF; ; _* o) t' z9 A- Z% x
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
5 o/ ?7 ]) T1 F5 W- C$ C     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
+ @+ D2 B) t. V" D  BEGIN                   2 O" d( ~7 W* A
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
/ M, x) v; Q6 @/ Z          IF counter = "1" and (PB = '1') THEN imper <= '1';  
2 @" U' _& o# S* t7 U0 k. V2 u                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
  ^! |& L. Q+ F4 w! k- a1 L
4 @- M5 {; J6 i0 ?0 n: o; z      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為09 u8 x' L& L; m) [5 J9 |1 O, S$ L  I
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
2 U2 J) n: @8 B+ [1 d+ r
0 w9 Y3 w2 Y& y5 L. z- i4 d按鍵開關 第一次 on時,開始計時。
! K( |8 M. I9 R7 ?. L, J                 第二次 on時,停止計時。) _' r6 c! S1 h5 J) @/ C, C
                 第三次 on時,開始計時。, b; J0 x3 N1 ~5 W# V( `
0 w2 u3 F- }9 ~. C2 g
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
" B. q1 s, L9 n平行輸入 / 平行輸出, u' A' P' b! d. Z8 \! U) j) O, W: u
平行輸入 / 串列輸出
3 x* @) a% r6 w( \; B串列輸入 / 平行輸出2 e2 _' ^6 G6 a+ {5 |' J" {5 ]
串列輸入 / 串列輸出5 W) \( U4 U. m- y5 X& w- W
哪一個啊@@...+ t3 ^+ ]8 T8 S  h* @. O) e
我都是看書自己學$ C4 L6 R5 J+ F# z( |
所以都不會咩2 M; {. \+ K7 `+ N
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!# d. S  c( Q3 S! ^! z. I
今天問老師  : v1 |- G/ }7 j& D/ }
可是老師沒說到暫存器的東西
/ n! E, R2 }1 J+ N反而是說
& q) T. n% N# ~. \8 z) RIF CLK'event AND CLK='1
5 |8 w9 A/ i6 i2 T( a0 Q7 Qcounter := counter + 1 ;   R, [) d5 q0 J4 a
2 D2 U6 [% l" t7 P% P
抓counter (0)   ----第一個腳位?!
' w- d& q9 c1 P7 ]& _給counter位元多一點之類的8 g: Y/ c$ t- }3 P
+ I+ s# L  A( h2 W7 K
00  01   10   11) k+ O" Z4 g- t4 ^
最後腳位為0   ----Run; e5 a4 U* a- j. r- X  A
最後腳位為1   ----Stop7 d, }9 W6 g9 x
$ ^' t% a; Y  C2 O, z( _" i+ p+ |
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。' B9 x- E0 O4 H1 u) K
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
( a, b# A# b  s! A( I# b跟你說原理你又不去想,要用你懂的畫圖的我又不會,5 ~* |, F, s9 g" ~% r6 _
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-9 03:05 AM , Processed in 0.310540 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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