Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
# z% |/ U$ a$ e- @* D  ZUSE ieee.std_logic_1164.all;1 W+ J1 W5 p4 R3 M9 m
USE ieee.std_logic_unsigned.all;$ }5 ^8 y6 a$ w$ a
ENTITY counter_backwards60_seg2 IS8 m  G4 ~- h4 X1 e
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;! P: e" |1 r' Y9 U- ?# N
                 Ring          : OUT STD_LOGIC;                         
) r) f. Z' Q7 A7 ^0 k  h+ T, q5 m                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        1 Y) i' R/ o; E& f- h) S: Z
END counter_backwards60_seg2;7 K- p* }& {" X3 |8 U" B- \
ARCHITECTURE arc OF counter_backwards60_seg2 IS+ t) E7 w9 ?) w" @7 J; x
BEGIN+ |- O& C' F5 _
  PROCESS (Clk)
- R& R7 m3 p0 U     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);2 n1 A& {  H$ k; p4 T
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
0 x; ]7 V* N2 s) `$ V  BEGIN
( e* k( ?6 p/ @8 I+ ?# t. r! g/ W        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
2 A( |- v, v/ L0 J1 W7 P        ELSE IF (Clk'event AND Clk='1') THEN & N3 I4 a+ E  H7 T2 D
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                * p+ @% R2 N+ L5 Y* J1 {
            ELSIF Ena='1' THEN* k0 `+ D" ~$ \/ Q/ P* |# ?3 K
               IF (imper0="1001" AND imper1="0101")THEN
( y- W5 ~( R( P0 Q7 k( `% L                  imper0 :="1000";
3 C+ {* R7 x6 T/ }3 [9 X               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
7 U2 D' L: b% q8 l/ c' a               ELSE imper0:="1001";8 Z) S; n% P3 \& `# g* A1 ^
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
* B/ W* c/ t8 P2 m$ M) |. ?$ w                    ELSE imper1:="0101";                     
% y8 |, M- n7 ^# Q8 }                    END IF;) y5 J3 x. X( d& X" o
               END IF; ' @! c: ~9 x2 Y0 F1 h
            END IF;
9 k4 r7 w# R: `  ]; t        END IF;9 U  c( |! b" L* |
     END IF;               0 f. u. I! U/ E% Y/ }; i2 }0 Z
Q0 <= imper0; Q1 <= imper1;
7 q' B' p2 p  j! S# x% dRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));           o: I# @; V3 N4 m; O
   END PROCESS ;; ~7 f2 W& C% J4 b7 q( p9 {2 R
END arc;

; Z2 y1 \% h# p: r1 e+ T) e* M- [! _9 s( ]
上面是我的倒數60秒程式
) v# v- X% K0 r% q' a小弟不才
+ @/ ]; ]9 C1 D- D" J4 n" q不知道怎寫停止
; v+ l5 Q; s- y0 `/ {3 _5 [/ U只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;2 s" T6 A) s5 g$ N8 D# r* Q& U
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,8 s2 a1 Y9 b1 X2 p
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
2 }7 c5 Q) w- d, w$ Z% F2 s: [7 x跑一次的宣告是要放哪一行...?
- k1 {  K/ Y9 E) C4 i% t7 P$ t: e還有一個問題想請教
* o$ j  }  w! L, b4 y就是counter_backwards60_seg2是我的分鐘
' R7 |) S+ g' Y* Icounter_backwards60_seg是我的秒
: I9 D7 o* w6 p3 G: x2 l現在就是秒那邊 10→9秒的時候Co也會進位
1 {# X$ }* A: Z* B1 p秒的個位數有延遲 所以導致10→9秒的Co會進位1 a# t4 s4 d; Q$ ?/ s$ M3 F
程式分跟秒是依樣的 (Ring就是Co)9 I% O1 }. g0 D" E+ ?- b
另外 分鐘怎從60開始7 {* o" Q- p, o7 N2 c: N
因為現在我是00:00開始倒數
- g6 k" z& n3 K1 n9 |我需要在counter_backwards60_seg2改哪邊?9 `/ J. U) Y& F% H1 M3 e

0 X7 I( q' B. E6 H5 }0 l' P/ }, e! ]
我奇摩即時通:xt_90005 ?8 \6 x- s% l) o
希望有好心人幫幫忙( e5 S3 d7 n( u+ o6 _+ I. E
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,1 @/ a+ o! N0 }8 @
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
- h1 N! V1 \! r% V; J' t$ }+ S( {1 _我想問說$ O1 K5 U# \* l4 g& G
怎從"60"開始倒數?
: g/ u5 o+ i* Q( x60→59→58→57....→00+ q3 Q/ Q: a% c+ D
因為我弄出來都是
6 @3 W4 y5 B4 }: }00→59→58→57....→00
0 k! U; f9 b, o
+ e4 |" J- t7 {: G7 l' x% U6 ^! f. L
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。; o) d  d  K' a

# G- G3 c) A& x6 d- |不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
$ f2 \7 ^! v8 E% s* N- a0 S因為我要做60分鐘倒數
( m3 V2 r% q4 ^% N8 _' c. N2 a所以要60:00 →59:59→59:58% I9 G2 p: @9 d4 _! s9 |
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then5 v; z3 t+ z2 r0 i
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
+ F( \4 \0 m5 o" V! [4 T3 V我是用Quartus II 電路圖接法  [: n4 A- [. d- B- ]; k
60:00(現在是00:00) →59:59→59:58/ v, L" w/ d; a2 V5 V! x% Q

! J. }: v- d- H# S6 n' r0 z. w- NIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
8 H( U1 {! y( w0 Q) Z小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
# p8 _2 F% \) G  bUSE ieee.std_logic_1164.all;
5 z. K( U- y& k3 d& H8 V7 y, sUSE ieee.std_logic_unsigned.all;" v0 Q1 X3 i9 H( x* `3 C  k! y
ENTITY counter_backwards60_seg2 IS
: t, Q# C! M. t& t2 S: l        PORT(Clk        : IN  STD_LOGIC;         5 n# q& j4 x5 W- R+ Q# y2 x, D
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
. f; y$ ~& x+ L5 E/ x( ^' hEND counter_backwards60_seg2;
# M" m) J. [3 `+ O( VARCHITECTURE arc OF counter_backwards60_seg2 IS
% o. P/ Q8 y/ M3 ` BEGIN" }' v) `4 Q' c4 E5 X* n6 Y
  PROCESS (Clk)3 i. n1 B8 _( R( S
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
) J8 ^6 `- m2 r; c  ]: X; _$ z- W     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ! {$ j) U+ `7 \6 I0 n3 i6 s8 |
  BEGIN         
( C+ B) O! z5 S  g" k# w& q5 \       
9 s- u( r: H8 A( I" n       IF (Clk'event AND Clk='1') THEN           ! m, u' p) @" M, d
             ( o& G/ v; c0 a. g$ F
               IF imper0 >"0000" THEN imper0 := imper0-1;0 C5 ^1 y" A5 m3 `+ z
               ELSE imper0:="1001";5 Y. @/ Z3 m/ l, ^/ }. P9 E* c5 Y
               IF  imper1 >"0000" THEN imper1 := imper1-1;
. t3 L. O8 V$ r2 ?7 E- x               ELSE imper1:="0101";
                                 
0 n  s5 w% Y3 B. b# f2 n                    END IF;
: w0 I) o% x7 F1 ^% \               END IF;
* |) }2 j. N! y% w9 a0 W& b4 E; C             END IF;  
: x! w) N; [9 ~' X8 u         Q0 <= imper0; Q1 <= imper1;  ! R3 z  F# B" R: P- Y0 M
   END PROCESS ;
" w8 h9 J' s- }END arc;. `1 n' L2 @  n* N) |# P
以上我精簡了一些 也能跑模擬圖+ ?1 w) m2 C; P; L  z1 K6 E
但現在重點是我該怎寫60→59→58...1 E% X) W1 n+ j# ]* q' ~
初始值60要怎寫...
  C( P) P  A8 g是要多2個input 然後給他一開始的值?
  I/ k, ?0 [) y7 b3 U但要怎寫啊@@...
9 p9 x) Q% U' \3 x; Y
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
9 W/ K& ?) m# w. G$ t5 M但請問 我需要一個另外程式
( J& s3 e6 g- ]8 l去控制暫停開始和暫停
/ l. O4 U3 _6 T+ KLIBRARY ieee; ( K- ?1 P0 N" ~, f' P
USE ieee.std_logic_1164.all;
7 s& h& h, c  R5 a2 M: D; i) Z3 g. IUSE ieee.std_logic_unsigned.all;% g9 P8 T' t0 n) K( J
ENTITY debounce_v IS0 {% N2 d+ ?2 A- r
        PORT(CLK,PB        : IN  STD_LOGIC;5 m' D; B: m8 X
                 PULSE        : OUT  STD_LOGIC
6 m# g* j, F% m# [  e                );
$ o- q" f7 Q5 w) S9 JEND debounce_v;* w' I$ W, T9 S- L
ARCHITECTURE arc OF debounce_v IS5 E* j+ M$ F4 s: s6 L
SIGNAL imper : STD_LOGIC;! B2 b) J+ `3 q) o7 T
BEGIN' B0 N( `3 \1 D& I( j
  PROCESS (CLK): w7 [; k3 d  s  O# J4 |# }
     VARIABLE counter : integer range 0 to 49;
' W' g* J5 h4 W  BEGIN$ ]1 e. a7 Z3 y0 E+ y4 s- z: g
   IF (CLK'event AND CLK='1') THEN* V7 Q1 A' C' ]5 w$ o* J
          IF counter = "1" and (PB = '1') THEN imper <= '1';; Q0 K! j0 N8 w: \# K) O  |6 t
      ELSE counter := counter-1; imper <= '0';; G* [/ ~8 Y1 W: H5 r
      END IF; % r- a/ J3 {0 S0 ^
   END IF;
) f5 k1 n7 d9 l0 g         PULSE <= imper;   
. t$ W+ b  _9 k6 r: p7 u   END PROCESS ;4 B# R9 v+ T+ w0 n. N
END arc;
# V: M: D- b7 n5 o7 f+ C% P( L% f9 v; c
這是按一次減一次1 e; Y1 x8 w4 d% _% d) q
想要按一下開始 按一下暫停0 t5 _; v( t( J2 [

9 L: E! E2 [/ }  T! jps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
- U3 M" V$ v- L9 V8 U. G; ^4 p3 [. p+ o0 z# }
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
' N9 r$ V" \( G% t/ T有需要暫存器??
$ p5 w" o7 C' N6 t那是震盪器→先接到開關→接到暫存器→計數器
& ?7 o# m. P4 _( F* n這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
) N1 k- ?( `* C5 Q5 D( C' |! ?     VARIABLE counter : integer range 0 to 49;
. E; }% L( s1 |" u6 U) o  V  BEGIN
9 V  A; A; I" V1 N% J* A   IF (CLK'event AND CLK='1') THEN
( m) O, f  j- j" J+ Z8 w; R          IF counter = "1" and (PB = '1') THEN imper <= '1';
; N+ ~1 S9 D5 ?/ C4 M      ELSE counter := counter-1; imper <= '0';
1 R! s3 r5 p4 Y6 H; ?      END IF;
6 m7 |  L% S+ L8 q4 c能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作' }" m. w& c% V$ j' d
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
' w* T& S# |7 t0 ]- _  BEGIN                   ) o2 m" `' F( o' {8 e6 l: U
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發  o( Q: B  x2 t# {" h
          IF counter = "1" and (PB = '1') THEN imper <= '1';  % L5 c4 {& \+ G" y7 J& h$ F
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
% q. d- X4 O: L$ w; Y: o : M% y) h/ e/ Q
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0) N3 @) N4 P7 Y4 W; r: }+ b
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
7 N+ c" `( o- @0 Y, Y
3 Q! b. n5 V& U% m& V' I6 E按鍵開關 第一次 on時,開始計時。, Y4 j5 G9 ?+ Y* E% j5 E
                 第二次 on時,停止計時。
9 l5 J* i) `: I3 g' p8 v4 c  ^4 B( A                 第三次 on時,開始計時。5 _. h' t1 ^, Q. e  y; c
; f0 [' W+ R4 e! }* v$ J0 Y1 k
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?! p: f1 l) ?7 X5 _! g- m8 E
平行輸入 / 平行輸出
5 e+ Q9 D( x+ w& M- C' g平行輸入 / 串列輸出& o3 S1 p$ b2 |  u* @% @# k7 I/ q
串列輸入 / 平行輸出7 ^; ~/ o+ }$ w
串列輸入 / 串列輸出) R6 R8 B9 r) @# u- E7 N3 Y  P
哪一個啊@@...- A* R; z0 s9 P7 b
我都是看書自己學+ u6 h0 p2 R4 Q4 J
所以都不會咩* j# t* i  p1 h/ J
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!% p" b% }5 }' G8 |
今天問老師  
/ y; f5 D0 w1 }9 }9 n8 b' @可是老師沒說到暫存器的東西
# ~1 a. R+ J" w反而是說
/ H0 A# H3 D! v' K8 f. d% cIF CLK'event AND CLK='1
0 ?% U- p! f: u$ Lcounter := counter + 1 ;
+ O' O$ `% R( q4 ~; D3 }
+ A9 I- w9 g7 ]( u抓counter (0)   ----第一個腳位?!' h& @1 [$ m; `+ o6 C- ?! g7 O+ W
給counter位元多一點之類的
+ ]* d! d5 S' R" p; |8 z# _
9 O. {$ t4 b# f9 v/ x1 x, m+ g00  01   10   11
, i, o1 C  }8 J& Q7 U最後腳位為0   ----Run
$ Q7 n7 O! O: |3 D9 w最後腳位為1   ----Stop- T) ~0 ^2 h3 D2 Y$ O* {

1 A! q0 E5 ]8 j" [* C# c6 v. Y可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。% J2 c; b1 R' h( S/ O- _( P. G
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
, I7 S/ p; n! q( k跟你說原理你又不去想,要用你懂的畫圖的我又不會,
8 g& l5 r3 s; S( {- n難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-22 04:56 AM , Processed in 0.192011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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