Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; ' w8 D# ~0 @0 D9 M2 g
USE ieee.std_logic_1164.all;' w: d1 `- s( I$ R) ]: P
USE ieee.std_logic_unsigned.all;2 H  g$ P) N' f1 `8 m
ENTITY counter_backwards60_seg2 IS8 o( y$ P8 [0 u% _2 q: ^) ?
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
. C. K2 M8 J& i1 T                 Ring          : OUT STD_LOGIC;                         
; v/ m- F/ Z# \3 U! M- ^0 u                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
- [" [& x. `: R( R* iEND counter_backwards60_seg2;
7 n" h: R, S& SARCHITECTURE arc OF counter_backwards60_seg2 IS
; w1 n4 k1 ?& O& X/ q BEGIN
! j1 U" w! a8 M$ L- N0 Z3 Q* K  PROCESS (Clk)$ R0 k/ z6 k) N8 u: S- \
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
7 x: F) Y8 S6 ]/ h( d- N2 S) {7 o' t     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
/ [! a% _  o2 j+ J; F& B  BEGIN
( N  o! S" ?0 ]' b        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";1 r4 T& d# r" @; e8 |
        ELSE IF (Clk'event AND Clk='1') THEN 1 x/ d& k& Z& W/ L% p( v
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
4 P) [, l) A; A3 h" k, V5 _5 d            ELSIF Ena='1' THEN
2 V7 ^3 [& W2 u               IF (imper0="1001" AND imper1="0101")THEN: C* g8 F( ^  O5 c' h5 Y& x- }. M
                  imper0 :="1000";
  p1 K, x/ W; b( D8 o5 B               ELSIF imper0 >"0000" THEN imper0 := imper0-1;( T  n1 \7 W5 U
               ELSE imper0:="1001";
+ Q, i, c! o/ H  v1 l7 r                    IF  imper1 >"0000" THEN imper1 := imper1-1;
" m3 |4 g+ i* c( G                    ELSE imper1:="0101";                     
- M  V; y. [* A, D' ^* K/ R                    END IF;8 `: O- S" i# g2 Z1 E
               END IF;
" |/ c7 o0 P* _  G- d            END IF;
0 N' r' B' `" a% t- y/ }8 x        END IF;8 N- \% x& N1 z7 G# h
     END IF;               
/ J5 R% ~, {( K9 A# r1 g% wQ0 <= imper0; Q1 <= imper1;
8 S7 [& s6 y. R, ?5 r9 eRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
2 \7 j* E$ [" C5 I   END PROCESS ;
& `( p7 e% r; l5 S( m1 q, B) \END arc;
* D! r# `: A+ G2 I
2 ~. N7 G' q0 M/ e) Q
上面是我的倒數60秒程式
; M- x1 R: i1 ]* C& k小弟不才1 g4 f, w! B% l5 B2 K
不知道怎寫停止
+ d! b4 \# i" W5 j# b0 z5 v7 z/ m1 u只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
, \) A7 Y) _; \$ d( i1 i3 l要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,4 k7 {/ y( z9 U1 a) h; w: e, _  w
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
* M* N* B/ x: T$ F& E* r  n$ y! h: _跑一次的宣告是要放哪一行...?$ h+ h( `3 ?& z2 }
還有一個問題想請教
8 E+ J$ \6 r  b: }) r2 T就是counter_backwards60_seg2是我的分鐘
( j4 U- N/ I) G0 }6 N3 q" h; |# @/ Ucounter_backwards60_seg是我的秒
; u! s% d9 @. Q" o+ [7 u現在就是秒那邊 10→9秒的時候Co也會進位8 c8 z& I3 _1 A  K. ~5 ^
秒的個位數有延遲 所以導致10→9秒的Co會進位+ W, z0 Y" j2 n% m
程式分跟秒是依樣的 (Ring就是Co)4 q9 Q9 [. E' u
另外 分鐘怎從60開始
" W( D$ Y4 E2 f) G. ?. g) w因為現在我是00:00開始倒數
- z) f' m# {2 \/ w2 f' Z& s我需要在counter_backwards60_seg2改哪邊?$ q( C, L# g# X0 W

. E& ]* S3 V( p5 K3 A) _9 e# L
! E9 P3 Q7 J* M我奇摩即時通:xt_9000" O! l! p3 U% j& _
希望有好心人幫幫忙
: W" l! G7 R' R+ v$ H4 j0 V+ t懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,  n4 U. x. _; Q1 Y: J1 c
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
( b) N* q5 w/ t1 p1 n( e( E! g& V* ?, }我想問說
1 K: t6 G( r+ s. p  |3 X  S7 |  M怎從"60"開始倒數?0 j$ r( K+ i7 {" k
60→59→58→57....→00
8 |7 P6 c$ a3 f; v1 z因為我弄出來都是
6 N+ p8 b1 _: W00→59→58→57....→00! M* P) l7 p* F+ d" l

, ?9 f  I1 u* |. f3 `( J) J9 Y: S6 v+ h
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。7 `" L! X1 k. j2 f8 j: w+ A6 M
! ?- F5 c% ^+ n% ^; C
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
1 n' x5 ?* e' K6 @( w' I因為我要做60分鐘倒數( {$ ~8 p% c0 _+ _/ S
所以要60:00 →59:59→59:58
! M# N! H- \% r' L0 w我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then; j% W2 W' u- v5 a- `6 }
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
/ Z' Y4 m  s' X4 `我是用Quartus II 電路圖接法
- f* }# [+ A  e3 y( q! _. \/ e* i$ J60:00(現在是00:00) →59:59→59:58
& w% x( V  E0 \5 w2 A1 x5 |6 W8 [3 J* ^& [. m
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
7 e: t6 \! K" x1 {) S小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
( @. ]0 z6 R3 q- PUSE ieee.std_logic_1164.all;
8 X4 c. [) h9 d; @. aUSE ieee.std_logic_unsigned.all;
4 L: e  ]" R7 V7 m( tENTITY counter_backwards60_seg2 IS
8 \" o0 u0 k/ p. `+ t. a        PORT(Clk        : IN  STD_LOGIC;         : }, [; q$ c1 F; P- T. P% g, W* G' ]
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
1 ~6 A, u' E6 @8 s% BEND counter_backwards60_seg2;* v" T# f* m" S8 o4 W; _
ARCHITECTURE arc OF counter_backwards60_seg2 IS
0 `+ K0 Y$ a/ L0 c  p) C- k; M/ v2 l BEGIN. ~0 N. a* [& C. B; x
  PROCESS (Clk)* j2 F) R) Z0 r" q: B3 Q1 m! T: }
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
! ^( q' Q; q" b     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
+ L9 D1 T1 i8 ^: u# D; n# T  BEGIN            ~# ]* C* {& D, {3 _1 T
       
- p3 t0 Q  k( t& l3 I: B       IF (Clk'event AND Clk='1') THEN           3 P- d- @7 P# z8 L/ V
             . S' G: }1 w) f5 \+ K
               IF imper0 >"0000" THEN imper0 := imper0-1;$ P( g- ~* E5 L# v: ?5 \- _0 @
               ELSE imper0:="1001";7 O) R+ C6 z5 \
               IF  imper1 >"0000" THEN imper1 := imper1-1;# {; G. J) r- J0 m3 C
               ELSE imper1:="0101";
                                 
# {. c. g7 _4 o$ f% T0 L                    END IF;
+ F  T  ~1 T* v7 V               END IF; . L: x  y% u# v0 o/ {
             END IF;  ; ^3 m& h2 p% N" H% s( g
         Q0 <= imper0; Q1 <= imper1;  
- I' D. _. L$ o0 U; C6 V   END PROCESS ;: G. e% d6 ^6 ~% s
END arc;
% W0 U$ @! b, X4 X2 u2 u以上我精簡了一些 也能跑模擬圖
1 L3 Y, R$ {- j4 Y+ l/ a但現在重點是我該怎寫60→59→58...7 R! D7 u  h2 y# v
初始值60要怎寫.... e9 ?( i# S3 X4 }: r( G
是要多2個input 然後給他一開始的值?  W: X' G; W5 ^8 d1 j, _
但要怎寫啊@@...! G; h0 m! j7 {. G% J( F+ x
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
4 E  y  o5 |" c: c3 s* m& V  i( t但請問 我需要一個另外程式
! f2 R1 I1 m6 c( D去控制暫停開始和暫停& `- u& Y5 L$ p) c6 G  m/ t
LIBRARY ieee;
& l: q' ?7 u1 ^& JUSE ieee.std_logic_1164.all;; x) [& K* A. |, q- Y" C0 F/ O
USE ieee.std_logic_unsigned.all;
- o8 A9 S; v+ G( I8 @3 ~# r6 _" aENTITY debounce_v IS+ k, K5 K( T$ n, _; ?# w
        PORT(CLK,PB        : IN  STD_LOGIC;& R- [: B- Q1 p* w( R% a
                 PULSE        : OUT  STD_LOGIC ) w, y2 N- n8 Z) V- f% k
                );
% \2 q* Q8 B- K1 X# I7 TEND debounce_v;1 p7 F+ T& A0 n) s+ P0 q9 ]* d
ARCHITECTURE arc OF debounce_v IS
. Y! ^7 G4 p' m! x. i3 s' _9 e5 | SIGNAL imper : STD_LOGIC;1 S. }  p; }4 y- V) u
BEGIN. h. ^4 U  O6 |1 q
  PROCESS (CLK)
+ a% W5 j& [9 Q0 S     VARIABLE counter : integer range 0 to 49;4 a$ J% B+ G1 n
  BEGIN
' Q( O6 C  L5 R" V   IF (CLK'event AND CLK='1') THEN3 r( G( f( `  g8 }5 Q7 q6 w) [
          IF counter = "1" and (PB = '1') THEN imper <= '1';
. a. B' J& c) e      ELSE counter := counter-1; imper <= '0';, _" ~+ w9 d3 o- ?4 m2 K
      END IF; % q! K2 J- ]: I5 m
   END IF;9 j" G1 e- k' J
         PULSE <= imper;   . x4 ^' Y9 M: f/ r8 P, g5 a
   END PROCESS ;
5 j5 J8 f- q# \: F2 g3 D) {: x8 REND arc;( y1 T4 z( s6 m% ^; k

) G7 k5 [+ y( z7 z/ Z; P* W這是按一次減一次
; `% _$ G7 e6 j' R6 l想要按一下開始 按一下暫停
  ?5 W+ p8 I( w; R1 s- k4 ]) H
7 P& \0 H- I6 f% Y& [% _6 |& Ips.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
1 v/ s: O$ J- p# C1 A8 q, a- `: P2 t4 v8 K) I, V) @0 y
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"8 R7 E, W" C" X3 q" h
有需要暫存器??/ I0 E1 N( h% I. Z
那是震盪器→先接到開關→接到暫存器→計數器
) n2 t- J* |: X5 q這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)5 w! _, V1 Y8 ~8 O4 h
     VARIABLE counter : integer range 0 to 49;
# O6 K5 D9 \! t# R) E% E! {0 j" E  BEGIN
+ Z: z5 G4 _& o1 U' a9 l   IF (CLK'event AND CLK='1') THEN. ^) p) r& ^4 O6 h9 d/ y
          IF counter = "1" and (PB = '1') THEN imper <= '1';# d/ p' R8 ]$ Y) q. F; C
      ELSE counter := counter-1; imper <= '0';
3 u. J- r% t3 x- J' ^+ t      END IF;
' b- x! F6 t% J* \5 H+ L6 ]能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作1 u7 g+ x/ ]% a2 I
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
+ L* R9 C; k3 E5 v0 c  BEGIN                  
4 j0 M' U. Q0 B% l" v# U: C   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
6 [: a0 Y1 Z- {8 s% M4 B& ?          IF counter = "1" and (PB = '1') THEN imper <= '1';  6 s+ B3 Y) U! P8 }6 d; x) J
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
; L3 O+ e4 i5 A/ S% I1 B 7 \. m6 A) O' N' ~
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
: x* ^# G/ Q3 h      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您  ]% j0 G  Y5 l4 b2 h
0 L3 f) m( ~. I" @! z& S
按鍵開關 第一次 on時,開始計時。
& p9 D1 [1 P, X" f! X; U                 第二次 on時,停止計時。" U, \  J6 v7 o  v/ M8 \" \6 S
                 第三次 on時,開始計時。
, _& |3 u+ G/ W$ }
% l. {, y; _2 Z4 t% D% z這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?" f$ k" U4 m$ _3 k: t
平行輸入 / 平行輸出
1 }/ s( \- o1 u平行輸入 / 串列輸出5 d  W% G) L0 [! E- u
串列輸入 / 平行輸出2 d0 C' [7 J' G+ k: b
串列輸入 / 串列輸出
2 L4 ]" }7 }  u$ K$ L+ z$ }哪一個啊@@...
7 t9 _$ G! w  v8 c我都是看書自己學+ v2 }/ \  A6 w* C; ?9 n; m) e
所以都不會咩
" W0 U# V# G( t拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!3 N# {  q+ ?/ A% c" z( [7 W6 {9 S
今天問老師  % ?/ ~# y% M& y! d7 o
可是老師沒說到暫存器的東西7 k4 @: Z% I5 P  _' {$ \
反而是說 , w1 f! ^6 j! D1 X
IF CLK'event AND CLK='1; b% a- J. b$ @# [5 h
counter := counter + 1 ; & C+ _( |! U3 ]1 C$ _' U2 g

3 w- |0 I. v% ]+ s抓counter (0)   ----第一個腳位?!
0 _, x3 ]7 A" m1 @給counter位元多一點之類的
  g$ e; O# Q! [! e9 _1 n1 q0 t4 X
; f& c' S$ D* ^( O2 x0 U00  01   10   11
* w# G5 Y' l- _' R; O最後腳位為0   ----Run: p1 q7 a. b2 @3 B! F9 q" q, k
最後腳位為1   ----Stop
( T- m  s3 u$ }- x& ]
4 i+ X3 \8 F# X% s可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
. U& c2 T7 T- v4 g. W, v5 z8 m至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,* K+ C# N/ q  [9 q
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
* y" Q7 S4 h7 U" k難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-19 08:44 PM , Processed in 0.132017 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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