Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
7 o; h+ p5 y' ?$ @- A0 nUSE ieee.std_logic_1164.all;5 a% d, c! r: v9 x, z
USE ieee.std_logic_unsigned.all;
% i8 N" @1 o4 ~' K6 a) O1 L7 VENTITY counter_backwards60_seg2 IS
' A4 Y; d2 S4 @5 z$ h        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
) K4 J' i+ @2 T3 B$ L: y% H                 Ring          : OUT STD_LOGIC;                         
( t+ x* U; {) w, V3 D                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        # o  L+ V. g: _$ y1 r/ V: z
END counter_backwards60_seg2;5 m# \% m5 m7 z9 g
ARCHITECTURE arc OF counter_backwards60_seg2 IS3 N$ h2 Z/ E0 {- s
BEGIN6 B5 a+ `( C" P; D. R( h
  PROCESS (Clk)* h& k7 M' D8 Q6 R( u: V* R4 b
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);- r/ e. j4 `) p5 ?+ V# W' w
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);! N' _4 s2 [, t6 B8 l9 X+ ^. c
  BEGIN6 e) {6 J: R0 j: @. H* K4 L" O
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
: ^+ g& x6 ~( v9 D/ M        ELSE IF (Clk'event AND Clk='1') THEN / h" R) |; Y4 i; ]8 t
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
4 `3 b$ E# i# \& q" F. n            ELSIF Ena='1' THEN
) f6 }- E+ f& \. E) h( y8 `9 g% s               IF (imper0="1001" AND imper1="0101")THEN
2 s% T2 h6 A0 g* r0 P( j                  imper0 :="1000";
) U. u8 c! f" _               ELSIF imper0 >"0000" THEN imper0 := imper0-1;2 g) M1 h; j3 j" I) u/ m' L6 p
               ELSE imper0:="1001";
' c& d5 O% z! q3 e: o6 R) [6 W4 u# F                    IF  imper1 >"0000" THEN imper1 := imper1-1;9 Z5 f# O! K+ k/ s, [  ]& B
                    ELSE imper1:="0101";                     
* ?& _) n# n5 L                    END IF;
$ V  Y3 V- ~4 Z               END IF;
! _  q3 v% w2 A1 k            END IF;
3 `# O% t. C7 v2 H        END IF;% L+ ]# z( B. t8 E1 v7 D  s
     END IF;               
0 V  l5 Y: S3 g. LQ0 <= imper0; Q1 <= imper1; $ q6 l* c/ B3 F/ _& P  r
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));         
" X% N% |- p  f; K8 Y/ f9 U6 N; Z5 O$ d   END PROCESS ;
2 a0 l& n/ ~# p" K4 R' H- lEND arc;

4 Q- F3 A# _7 b2 w
" f' a& c' W9 o9 B+ Z/ Q上面是我的倒數60秒程式
' u$ E+ J' _& J9 j2 B小弟不才/ K7 X% t2 ]) K
不知道怎寫停止
! U* h+ _  p+ X4 Y$ d" \只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
/ B6 |2 D: N- K  x' V! j要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,3 t* ]2 V/ a; d4 ~. l! s
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII5 b& Y" z" c0 V7 y2 ]' \4 x
跑一次的宣告是要放哪一行...?
+ E7 i0 W5 s" ?" b/ p" o還有一個問題想請教' [1 D' `! b; c
就是counter_backwards60_seg2是我的分鐘
, y$ l9 {( A& Y( [- \2 ucounter_backwards60_seg是我的秒
! `5 R! x8 }# i9 c% E1 O現在就是秒那邊 10→9秒的時候Co也會進位. d1 e. Z2 ~1 F
秒的個位數有延遲 所以導致10→9秒的Co會進位" k& e; {& D/ `
程式分跟秒是依樣的 (Ring就是Co)
5 w& ~0 q* h" F! T# v另外 分鐘怎從60開始/ k0 E4 E  c! v/ ~& F
因為現在我是00:00開始倒數3 x/ a/ C$ r: |2 C5 t8 Y- C
我需要在counter_backwards60_seg2改哪邊?
" P( U, V4 {1 j- n4 }  U( ~6 A; p6 L
6 o( P6 ~& F. Q1 Z1 j7 N% K
我奇摩即時通:xt_9000
" Y' Z2 b3 m" C希望有好心人幫幫忙
  B' q) j3 _# a3 M7 H懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,3 {6 U7 I! p# z
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
& O; t8 m7 R5 t" n  e. r% V2 {* o我想問說
5 j" y! R+ I3 U' P. f5 w怎從"60"開始倒數?
& t1 |+ A( \/ O60→59→58→57....→00
, _3 @9 W( |0 m" _8 c因為我弄出來都是5 e4 P; ]' G6 u& \7 I; v
00→59→58→57....→00
6 S* ~" E* Y( k4 @) \* b4 d6 z1 m2 C  t) N. v

5 Q% W; y/ p4 D# U* k$ t希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
* |' u; h+ L2 G- T$ r. D. m, V0 E2 @  ^# I5 f- Z# u
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦, b- ]' F1 O. M, Z% z+ l  F
因為我要做60分鐘倒數0 y0 s! x( n6 \" A
所以要60:00 →59:59→59:588 z$ l) H' k' l; r+ p
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then: T' {2 c5 l0 H$ H" r! \
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
+ T" n; R+ C. h& K我是用Quartus II 電路圖接法. R; L  K" x' g# L! N
60:00(現在是00:00) →59:59→59:58  I1 Z% ?3 g8 }; `8 d) }4 _

9 b% [8 F' @7 ~, qIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
* {$ i+ v  j1 \9 D# J小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;   v7 @2 \, M1 W. g( t% v( ~
USE ieee.std_logic_1164.all;
- ]* r. \9 d% k4 VUSE ieee.std_logic_unsigned.all;
/ y! ^$ s# q/ P& a4 Q% G$ aENTITY counter_backwards60_seg2 IS
: V6 Y8 j2 q( I( S( p. B        PORT(Clk        : IN  STD_LOGIC;         - N7 m! D. a+ O$ b- p0 o8 A' j
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                7 A: V4 F9 X7 u9 _
END counter_backwards60_seg2;
* T* o1 S4 Z7 b, a% O4 C  K! cARCHITECTURE arc OF counter_backwards60_seg2 IS
7 w# u; i/ [0 i" f1 u$ g3 w1 L BEGIN
: u3 |0 e0 t2 i: q  PROCESS (Clk)! [0 L" \% |* z2 _$ F5 A7 w
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);) w7 E3 w% R: y; C1 l) F0 F
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
8 v6 G' K% g$ G5 f% d  BEGIN         
' m. T" W+ ?7 {       
6 B5 p! D" v# `- A- O       IF (Clk'event AND Clk='1') THEN           / u7 ~# u- }: [' ^9 L( c
            
- w. z  u/ h+ a2 }5 k               IF imper0 >"0000" THEN imper0 := imper0-1;) l1 J, P9 O! ]4 A9 L
               ELSE imper0:="1001";6 b; _: ~4 _# r$ z* W
               IF  imper1 >"0000" THEN imper1 := imper1-1;
; D; \- w! x3 ]& ^+ e) x; f               ELSE imper1:="0101";
                                  # F0 a9 q% h! y
                    END IF;
1 s% s6 {2 X; w+ N* `6 G& }               END IF;
4 x) z! \9 W5 y: J5 E2 B             END IF;  / [- q) A7 P6 A# H7 g
         Q0 <= imper0; Q1 <= imper1;  
& c4 C( Z& K% }6 ]( F; k   END PROCESS ;# ^0 A$ c4 I" ^  M# j- i" n" x2 @
END arc;  f7 T; B) l6 }$ K5 S. i
以上我精簡了一些 也能跑模擬圖
5 C$ g! ^% w+ _6 K但現在重點是我該怎寫60→59→58...: y, B7 P# k# m
初始值60要怎寫...4 e/ y( c: ?) G: |+ v# p
是要多2個input 然後給他一開始的值?- l& y, h6 p, ~4 n2 W
但要怎寫啊@@...  a. \; j7 o4 F9 R  E1 r4 |5 F
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"5 q9 |. F* \0 c" C! x& W* B. y
但請問 我需要一個另外程式5 X& j( u/ j7 h9 C" y; o
去控制暫停開始和暫停/ ~* i6 E/ ~1 L
LIBRARY ieee;
) @0 _. O& B- Y& h" XUSE ieee.std_logic_1164.all;3 }( U% u; L8 q/ [( I# D
USE ieee.std_logic_unsigned.all;  U$ ^2 y' b$ K  D' X& T
ENTITY debounce_v IS1 `- B( u% ^0 D; Y' k. u# x
        PORT(CLK,PB        : IN  STD_LOGIC;, l. u1 t6 R: I4 N
                 PULSE        : OUT  STD_LOGIC " [9 F, Q5 ]1 t/ P! Q1 P+ E
                );
5 k2 A$ \0 A* ~7 N4 q6 {5 B% hEND debounce_v;+ C. A! Z: e+ D
ARCHITECTURE arc OF debounce_v IS' r4 f, @. @: M! n1 v
SIGNAL imper : STD_LOGIC;- o; @" l( x( ^- o* Q/ t' Q
BEGIN+ i: g& G9 Z5 K
  PROCESS (CLK)9 M. {2 z9 p8 X7 V- E
     VARIABLE counter : integer range 0 to 49;. t7 D8 w: |8 q0 @: h( P
  BEGIN8 `8 X% Q. l8 ]% _7 R
   IF (CLK'event AND CLK='1') THEN
5 g# Q) I' j# j' }4 Q/ p5 }          IF counter = "1" and (PB = '1') THEN imper <= '1';
5 q9 o% x' Z- @$ x0 c7 W- F' H& \      ELSE counter := counter-1; imper <= '0';
) a& G+ f# q6 w8 E- {/ [( ]      END IF; 4 C+ Z6 y" B! a6 S' `/ l  k3 L' r$ _
   END IF;, `- C# r- i' ?$ M7 k5 ?: T
         PULSE <= imper;   
; t6 V6 n' ~' L( X! P* b9 j   END PROCESS ;; c! g4 h9 N4 W
END arc;, J3 a" D/ N5 g& A, Q9 [) Q

& r% {. F# ~/ [* u& A! B這是按一次減一次. D4 V  V3 x1 L2 S# `: e  H
想要按一下開始 按一下暫停
7 L4 [, ~6 r% [" y6 d) _8 v2 `
, C4 v/ L# n! I: o' Gps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。& V$ X, ~2 R& \/ _) X
. E; i  {( Y) F; M) C
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@": X4 v! B' i* P, ~: C& k
有需要暫存器??
6 ]7 b. U( ]6 @6 l$ {那是震盪器→先接到開關→接到暫存器→計數器
: y. Z6 W3 C, x- p6 R這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
' m8 h- V4 ^' L     VARIABLE counter : integer range 0 to 49;* o- ?" Z7 F* Y. w) P
  BEGIN: t$ [) o0 m0 f' F. V
   IF (CLK'event AND CLK='1') THEN
3 Z# I! n% E* s& ~7 u7 H          IF counter = "1" and (PB = '1') THEN imper <= '1';
, h/ Q4 O' i+ C0 P' J- i+ D! ^      ELSE counter := counter-1; imper <= '0';- U- Y- Y: B) A4 _2 F" A* T) j
      END IF;
" W+ n+ f! I3 J' P能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作7 X3 f1 l7 J1 }4 r/ U* O
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
4 L9 q, [. X; Q* _4 P  BEGIN                  
3 s8 y6 z+ R3 v0 z   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發2 S% U+ X. Z; [
          IF counter = "1" and (PB = '1') THEN imper <= '1';  1 P2 m  L8 x: \
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為12 J" Z; {/ X) X) {7 T9 Q4 Z

! m- V" W: j& l' X6 g/ T  C      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為09 \) ^: I) ~' z4 A, ]
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
, K' u+ z* P$ J! `) H, _% v$ x9 _/ ~/ s; F) U( _$ L
按鍵開關 第一次 on時,開始計時。: s  _* E+ D. Z: ~" n" y
                 第二次 on時,停止計時。
  n6 ~7 K$ M7 Q  a, {! T2 m4 f3 o                 第三次 on時,開始計時。
% S& A' B, U) `& V7 s1 \
; Q7 }% w0 B3 G0 r7 P' V2 h這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?9 P. i) ]$ c9 w( }
平行輸入 / 平行輸出) ]- C1 K! d4 W1 n; y5 t3 ?* @
平行輸入 / 串列輸出6 F; U2 @: A+ L* E/ N8 E; x
串列輸入 / 平行輸出* n8 {: G: M: n# y6 V2 w
串列輸入 / 串列輸出
0 a5 ~( m3 i9 r9 ?+ F, @3 T" K哪一個啊@@...* ^- f! x# i; w# i( \
我都是看書自己學
" G& m* T2 D" I; J* m8 ?所以都不會咩4 [1 k9 o5 r1 G, L1 M# e
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
+ m( U) ], Y6 W) T+ t$ {' Q今天問老師  
: P: A- {, |( O8 w可是老師沒說到暫存器的東西
  g. ^/ `! o# F! i7 K反而是說
2 B7 v/ E6 B0 W5 |/ L) ]IF CLK'event AND CLK='1
! _/ a$ e: P' t+ x4 a- Icounter := counter + 1 ;
0 q2 h) n% G$ z/ H& s$ [: h: @" ?  ^# D- l
抓counter (0)   ----第一個腳位?!
0 G, t6 R' Y3 i! T給counter位元多一點之類的
; y3 o3 N2 q1 P. V+ h8 R# v' V, U* b- h
00  01   10   11* o6 n" X4 D& f6 L
最後腳位為0   ----Run9 X, d* j7 A) [# U
最後腳位為1   ----Stop. s# d/ \' t2 N# u
8 S' @4 ]! w2 p# O' F1 r: f5 [) s
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。3 V) |, }& d) L1 j5 n( o, x0 A  `
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,5 J  P, D( n, N
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
$ c4 ]  C$ O1 K! L7 y1 J難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-9 02:16 AM , Processed in 0.146008 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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