Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 0 K( N, q2 [, @; A! P  v7 l" ^6 B" H
USE ieee.std_logic_1164.all;
: D! l8 _% P& h1 x2 S" ZUSE ieee.std_logic_unsigned.all;* N# Q5 t; H2 F. S: _# t1 b3 K
ENTITY counter_backwards60_seg2 IS
) ~7 |& c1 U6 Z        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;6 l6 q+ a) P, w2 _
                 Ring          : OUT STD_LOGIC;                         8 q! Z6 t4 _0 P, @6 d- a
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
3 X) U8 l5 {7 C% p! V# WEND counter_backwards60_seg2;
& A1 f# @% r. g' V8 G1 O: nARCHITECTURE arc OF counter_backwards60_seg2 IS% [5 q6 D3 Y: U/ O0 l
BEGIN
0 f# }9 n. |% \2 U8 A, }, {! D7 a  PROCESS (Clk); r5 e5 ~$ k+ i7 [* S% b& N2 {) Y
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);- E9 z" \1 Q& D( m- Z) S- I
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
8 X) k: h8 W$ k& w5 O# C  BEGIN
$ d- L% ^  H* ^- k) P* ~; a        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";: L9 P' z7 _# m' ?
        ELSE IF (Clk'event AND Clk='1') THEN ) J# ^2 L1 f* L
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
: a' v* `/ R0 M6 ~            ELSIF Ena='1' THEN' Q. J' p# i1 m3 q
               IF (imper0="1001" AND imper1="0101")THEN: Y6 ]5 L5 o5 T6 |
                  imper0 :="1000";
# D& [3 w( l8 K' ~: Q5 I. U               ELSIF imper0 >"0000" THEN imper0 := imper0-1;% v; k5 {0 w( S
               ELSE imper0:="1001";3 Y  Z# P" _) P4 O( R% s/ p
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
, S, I, y. w* R- Z3 d. g                    ELSE imper1:="0101";                      / e! G+ I; A( F+ d6 L5 S$ t/ d
                    END IF;1 A7 R0 L2 p. u) z' g; f" h/ j# _6 ^( }
               END IF; & |; N4 h* m4 k4 U  B
            END IF;
' T& ?" E  w! R2 j8 q4 E6 n        END IF;
" Q, P, G. T6 i" ]# [1 P% O8 K2 D     END IF;               & @( {$ D: S+ l6 n* p, t' V0 g
Q0 <= imper0; Q1 <= imper1;
8 N8 |4 l  F9 v0 n: E0 gRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
4 t7 K4 n+ i, V: }  V- F6 V   END PROCESS ;# b& l/ @5 h3 `2 g' \
END arc;

6 S0 j2 {6 r+ i# K, |$ L
4 P7 Y$ e, E; C上面是我的倒數60秒程式* r' O& Q5 k8 {" E, B$ ^6 e, v  ~
小弟不才
3 k8 U. Z) I) z8 z不知道怎寫停止
* u7 x1 Y' q! ]; P* i/ }只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
. d! L' t% _1 A7 u要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,4 }+ N3 s/ K, z* {3 E
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII: V  @4 ^8 `# K" |& {. r$ P" _
跑一次的宣告是要放哪一行...?
$ G* R  U& M1 ?7 }3 ?" g% O還有一個問題想請教
: q  ?1 o5 Q: j" ~就是counter_backwards60_seg2是我的分鐘
; Y# h( a+ m2 T( |0 V; Dcounter_backwards60_seg是我的秒
! }, w& [# Z! I" v* P& b現在就是秒那邊 10→9秒的時候Co也會進位
5 k& s6 }  o' @4 P* S秒的個位數有延遲 所以導致10→9秒的Co會進位
: h) d: V8 o/ z  Y# `5 F  f程式分跟秒是依樣的 (Ring就是Co)- a0 {1 V8 U2 ~2 v9 O& y
另外 分鐘怎從60開始
1 u# q3 }: Q* Y/ B: H因為現在我是00:00開始倒數
! t' f% U6 n( y, U7 A5 U我需要在counter_backwards60_seg2改哪邊?
" P3 t, z: {# A0 k
+ i+ k/ a% v- {  I" d* e3 C, n3 u! i" d' P+ `5 m
我奇摩即時通:xt_9000) U# |  Y( ~& \- W: A
希望有好心人幫幫忙& L- F0 z3 q, P& _& v$ H. N7 M! t
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
) y" p' e) e3 Y2 J看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
$ s- J6 x! X; u  T# ~我想問說
9 G9 y/ X! u9 E3 T怎從"60"開始倒數?
( W/ {( B3 F% K% n60→59→58→57....→00
  ~* b% m3 A( Y$ z8 ?因為我弄出來都是5 X  c7 e5 @7 o. O
00→59→58→57....→00
. L. b, h) I+ w' ?) X% R# ]! n7 r1 A( ~* X: {7 B# T1 M- w6 C

. ~( u3 Q  i( r+ i' e希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。  r  Y9 B: B+ D" G# Q
- u( {1 Y4 Q2 \, ^$ j  U
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
/ w1 c' C1 [3 e" @( _* U* L: q因為我要做60分鐘倒數
/ N2 e* e9 K* K- {所以要60:00 →59:59→59:586 P# Y8 f/ t' e; L
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
4 J3 x' q# \% z2 ]% Q% n" ^+ D     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"0 Z. m9 `4 ]" y
我是用Quartus II 電路圖接法7 i9 [$ g4 k8 \
60:00(現在是00:00) →59:59→59:58
3 m8 N" ~! H& i; ?$ t+ L" Y6 _  L6 L5 ]. u+ g6 O
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
; C3 D2 L1 f5 y4 e0 p( p& R* a小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; " H/ l% g" x  e2 ]
USE ieee.std_logic_1164.all;5 Q+ l3 S$ t1 k+ y* r
USE ieee.std_logic_unsigned.all;
, v; x, R! H, n: ]6 E% A3 hENTITY counter_backwards60_seg2 IS  g- B8 y0 z$ s' x9 U+ H
        PORT(Clk        : IN  STD_LOGIC;         2 B4 ^2 O' X/ T3 M% Z0 }, ~* B
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                ! K. J, G( X+ `; C: \
END counter_backwards60_seg2;. m5 h, X' E6 c5 y$ b
ARCHITECTURE arc OF counter_backwards60_seg2 IS2 Z  x9 R( a& G: T& O" N
BEGIN' ]$ A( s4 p% K
  PROCESS (Clk)
  a5 L7 W/ p& \+ Y     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);6 E8 K9 C1 d, I, p
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   3 `8 S( n/ A1 b) `
  BEGIN         
# Y$ T/ I' i5 D, g0 }* N; V       & c& y7 R; F4 ^$ F$ |3 y- n
       IF (Clk'event AND Clk='1') THEN           # H( O$ N( R* ?: G3 K$ w
             5 o) @% c& X4 f% v
               IF imper0 >"0000" THEN imper0 := imper0-1;
4 Q% P$ C/ b. F4 O' m! `- `               ELSE imper0:="1001";
$ K8 h- Y% W2 ?( j4 ]/ w3 Z% @7 D               IF  imper1 >"0000" THEN imper1 := imper1-1;
& {& I% |% u$ ?! T/ K               ELSE imper1:="0101";
                                 
. h! M+ L" {( t3 x3 Q                    END IF;
' b6 H3 L, d# K/ I4 C: s               END IF;
* D2 ?$ [/ P( w, V9 G) x             END IF;  
8 K& n3 J, s3 P5 L: h$ v         Q0 <= imper0; Q1 <= imper1;  
* a( ^0 r8 @0 e/ X2 I/ {& Y5 t   END PROCESS ;3 c2 D6 D, K5 f  u
END arc;' }* H, t4 o6 m3 }  S% R& |7 h
以上我精簡了一些 也能跑模擬圖1 U- z2 }5 f0 w5 q' M
但現在重點是我該怎寫60→59→58...
# v8 m: t9 F* }. ?% l0 A+ z8 c- h初始值60要怎寫...9 g; z! w" h* o% J* P0 A
是要多2個input 然後給他一開始的值?" x( u$ f" B! Y: l5 A0 u
但要怎寫啊@@...3 ^  @0 t4 O# O8 _) c
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
# B) z' ]% w; m0 ^3 p, F% Y但請問 我需要一個另外程式
7 f, g5 C! b; Y- t$ E! S, `. ~: @去控制暫停開始和暫停
0 D( K# U3 H" ^3 i+ e; Q) aLIBRARY ieee;
# P7 Q. ^+ Y5 ^' w4 nUSE ieee.std_logic_1164.all;' H- V' `! ~; C2 \: ]
USE ieee.std_logic_unsigned.all;
2 l! Q6 ~6 k  `ENTITY debounce_v IS3 \& o+ Q& ^1 @
        PORT(CLK,PB        : IN  STD_LOGIC;
: E) p! ?1 ^4 P                 PULSE        : OUT  STD_LOGIC # c. v1 n9 b" t2 y) j
                );
% I7 W+ J8 a; }' C( L/ ^$ A. v5 rEND debounce_v;) z: M& a- h' {1 `( @2 m
ARCHITECTURE arc OF debounce_v IS
& \" K! u; Z3 o: W" V' U SIGNAL imper : STD_LOGIC;5 G7 A" `0 J. A- i' n
BEGIN
( E3 ?& L) K& a" l! l  PROCESS (CLK)3 I% n8 g  O1 r4 f, K6 f
     VARIABLE counter : integer range 0 to 49;
1 h1 ~: ]4 |5 j! u/ Z+ @  BEGIN
- O1 Y7 d$ V# M) P  z9 [! ^. o0 g/ q   IF (CLK'event AND CLK='1') THEN4 g) a, q1 C% }5 q+ k5 x' i
          IF counter = "1" and (PB = '1') THEN imper <= '1';
& R3 m/ V# S9 d* L' O) j      ELSE counter := counter-1; imper <= '0';& r5 N  H. f: j* A- W' H, m
      END IF;
, O/ J) ]* e$ l$ J   END IF;
! U4 [/ h+ n" m  {( v         PULSE <= imper;   
) M8 _6 e) O. u& E5 i' f! }6 f   END PROCESS ;
- \% ?2 K2 g- _( H# P2 `$ Z! d# GEND arc;5 w9 d8 T8 j7 q/ r4 c/ R. c

$ d$ S1 G. S& I這是按一次減一次
# {& b6 U; C( q, l, d$ ^" U$ m& L想要按一下開始 按一下暫停
7 g/ o/ u+ f( E+ z. F9 [; B
# `; u- L2 A$ y6 a  p( R, z. O3 _+ @ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。0 u+ x( U& U8 b4 {/ g! @
7 H, m% z% }: z( x- M( z9 z. W
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"6 \* i2 r$ L, @. }8 _
有需要暫存器??
4 G& J. z/ \( v那是震盪器→先接到開關→接到暫存器→計數器; A6 `7 f% u+ x1 t: ^: {
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
* O- }1 ]/ v5 ~     VARIABLE counter : integer range 0 to 49;$ ]# e, \( ~0 g9 ]9 G
  BEGIN$ i. C% r, U; N1 u6 Y
   IF (CLK'event AND CLK='1') THEN: p4 m6 p6 b2 w4 ^' ^
          IF counter = "1" and (PB = '1') THEN imper <= '1';
0 f+ ]& K3 q3 i: X      ELSE counter := counter-1; imper <= '0';
* h4 V9 k. x4 m" w" R      END IF;
4 \% }1 M- @% d2 _3 F& J能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作5 k/ `8 j% u* _
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
! {8 o: L& }7 W# f0 [; L  BEGIN                  
8 o9 \+ j' ^. u1 Q5 k7 d9 P2 \   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
# I% h! @3 f/ o! m          IF counter = "1" and (PB = '1') THEN imper <= '1';  ! m2 B* X0 j, O0 f
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
& ?( _* [+ v8 i* Z3 O
# b2 C9 c/ @3 o5 e. G      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0* D. [0 X' H' d* g* t5 s
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
, ]( C4 H: N+ \0 O) W( M! C& P9 R/ ^+ G1 c" g! Z
按鍵開關 第一次 on時,開始計時。
; g3 e$ h, F3 u6 [$ D7 Y' x                 第二次 on時,停止計時。
8 h, ?# t$ X' Z                 第三次 on時,開始計時。. D( S) e: H0 |0 r9 q( H+ X4 N

6 r3 v* c; a" r. {這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
( o/ W5 Z7 q" r, J5 a. T平行輸入 / 平行輸出
( i# s5 e) {7 p6 p) e) \平行輸入 / 串列輸出5 G7 S" }, B' v/ C# n
串列輸入 / 平行輸出
3 u6 u0 V; l0 e) m" \( Z* V1 z- F; n串列輸入 / 串列輸出
) T2 H0 c7 C' |. i哪一個啊@@...  h9 D  g2 o- b9 D8 u
我都是看書自己學
8 A' }$ ^2 O$ ^* p) x所以都不會咩9 N, F9 R( F2 m. K2 f- z% U
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!" R$ ?) h1 f% P/ {9 h3 G
今天問老師  ' G: e! `9 ~0 \3 |
可是老師沒說到暫存器的東西% j+ G  m- U* L, _2 O+ q; E
反而是說
$ P4 q+ f" r: Z$ SIF CLK'event AND CLK='1
' q# x8 P- T- {0 m* f' y/ W, jcounter := counter + 1 ;
+ P& D9 b3 h& E1 t) |- O
1 C$ P+ p; V, G& `0 O7 g! }抓counter (0)   ----第一個腳位?!
# e, ?" Q/ u& V# z* ^9 [8 ^  Y給counter位元多一點之類的
0 l5 E  @  M) F! C4 N
0 k, T$ f, R, w" Z! g00  01   10   11
8 g% R1 I. e/ t5 O4 K" Z7 Z6 @最後腳位為0   ----Run
/ u. ~. o. s  u- M! Y+ f0 g最後腳位為1   ----Stop* Q1 e) N! c5 S
- e6 N  ]" g+ `
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。' y1 S4 f  {0 h2 s% i: F
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
: D5 k! G4 W) |( b( r5 d" P* w跟你說原理你又不去想,要用你懂的畫圖的我又不會,
- H" B; `' k3 ]% Z難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 10:50 AM , Processed in 0.148019 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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