Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; $ J$ o) C8 h, W: u8 P1 ^# c
USE ieee.std_logic_1164.all;: ^% i1 h; b; J7 S
USE ieee.std_logic_unsigned.all;
  m/ ?( o) y) z" r" MENTITY counter_backwards60_seg2 IS
' b$ Y+ f% D' b3 [& o/ `; a: B        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;9 c( p. j+ P" {/ {' m
                 Ring          : OUT STD_LOGIC;                         ; g* z" h5 F1 q( c# K4 d
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
0 x; G; h: D3 ^3 \; fEND counter_backwards60_seg2;# g- C) b5 |. W' o" t( i
ARCHITECTURE arc OF counter_backwards60_seg2 IS
/ U$ I; e+ X# n  A BEGIN
+ J$ x0 }$ w( I. `  PROCESS (Clk)
2 a+ z: Z& t7 G: ]$ [     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
! i: x2 q7 J3 r! I     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
: m  z" P  S% N# z& P" P! V. |  BEGIN
7 E& U- N( i# o% w# Q        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";# k0 S! g) ?9 n1 y/ R
        ELSE IF (Clk'event AND Clk='1') THEN " J3 P$ D( S! w5 W% T9 ?4 ]$ M
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
$ \' x" w) H1 w* U            ELSIF Ena='1' THEN' h: n& L  X' W7 [  |
               IF (imper0="1001" AND imper1="0101")THEN
6 u9 A. j) F( i7 Q3 e: Q                  imper0 :="1000"; ( R1 W3 B+ H% A" _- k8 @
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;  {% I/ ?& b+ X, Y) n$ B, t: S
               ELSE imper0:="1001";) ^8 Z& Z& x- H
                    IF  imper1 >"0000" THEN imper1 := imper1-1;, {; V, J( k1 R% g. T
                    ELSE imper1:="0101";                      / q6 V0 t; W/ C; B1 ~8 ]1 z# J4 ~* `
                    END IF;- @% P5 i, c/ _  R2 Y& Z. G
               END IF; ! j0 l3 ^0 @/ F/ l: V5 _! U8 b; Q- b
            END IF;
3 C  t8 b( J3 e! M! {8 j        END IF;
% @  [3 I4 K4 A$ s+ d: }     END IF;               
9 C; o; D4 [5 q: F! {8 UQ0 <= imper0; Q1 <= imper1; - n/ l4 W6 b8 z, {# w* X2 b% N* c2 E5 Q# V
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));         & P8 D1 o* d/ p$ V) z+ [
   END PROCESS ;9 k# Y$ ^1 S9 i( O* Q
END arc;

' p9 l$ J6 s2 D2 Z* {  Z- W$ K! p! p8 \+ t. ?' ^% k
上面是我的倒數60秒程式) @9 T3 T! u! b1 z3 [
小弟不才2 \1 g. c, x! m# h! q. b
不知道怎寫停止
% A9 v$ c' N$ Y4 }( k- n只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
1 H' r3 o5 u3 m& L要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
: u1 i$ |- l; z" N除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
) e- q& P# D) N; C- i/ }跑一次的宣告是要放哪一行...?
4 @/ z) h) a+ k還有一個問題想請教# m& ?- E, X0 m# c/ T, U# i9 d# I
就是counter_backwards60_seg2是我的分鐘) m" G# S6 m9 ~2 {& m- J! w
counter_backwards60_seg是我的秒& I3 @* L, b" R+ e& P
現在就是秒那邊 10→9秒的時候Co也會進位( e2 W1 v9 U: U) u3 T1 |
秒的個位數有延遲 所以導致10→9秒的Co會進位! H5 d: v* m% t4 ~( j
程式分跟秒是依樣的 (Ring就是Co)6 ~7 T4 r4 }( K( O7 q! H  J
另外 分鐘怎從60開始
9 W# ?; ]4 X$ h, O) ~# l* N因為現在我是00:00開始倒數
! Z6 V8 e4 \: G我需要在counter_backwards60_seg2改哪邊?" x; a8 p1 e, w: B
6 \6 j0 {/ N! y, q$ o
5 }4 z7 G+ T2 c. `
我奇摩即時通:xt_9000  L4 f" w- K! g& w  Y# M% m; F. M. Y
希望有好心人幫幫忙6 P# V6 a/ a3 Y9 T. H4 ^" H. w
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,4 E- ]( T( H! T) p3 g
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
  C$ k3 U2 R1 J* ?我想問說
7 y- _, Z, L3 q+ ^4 |' l* `怎從"60"開始倒數?
& _% O' p/ @5 A4 `60→59→58→57....→00: O1 b/ e( U. t' x' m$ G
因為我弄出來都是9 @% c, q( c1 p; w' b
00→59→58→57....→00
3 P. m1 `/ u; Z1 q$ \
5 v% z/ W9 w0 I' B, F% _% r& I9 O$ e7 ?. ^* R& ?
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。3 y: w4 r  n2 t1 W2 @' @
$ ~& G0 m) g* X4 W7 r; M. C
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦! A+ p6 W+ h' [$ [: c
因為我要做60分鐘倒數
+ y9 m- }0 f- _0 }8 n所以要60:00 →59:59→59:58
" E& q7 b# K! m2 F: g2 W0 v6 m5 @$ S! P我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then5 `$ {  _/ A6 `
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
$ e$ h5 F, s! E7 V, ?, ^我是用Quartus II 電路圖接法8 R  v% u# ?" ~& F
60:00(現在是00:00) →59:59→59:583 L# O! K* s  W2 b" p
$ d, S1 w) w, A0 f; ^
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@$ P' @2 ~2 v+ v9 H) Q; V8 h% \
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
* l* ?0 B+ X) _. y5 q8 q4 N% HUSE ieee.std_logic_1164.all;
' r$ J* c' ?% I/ Q* S2 \: \9 zUSE ieee.std_logic_unsigned.all;1 V: L( ^2 w' {+ W# x6 U# U) }. S
ENTITY counter_backwards60_seg2 IS
: L8 N- L5 {& y! l8 J" I# ^. g8 W        PORT(Clk        : IN  STD_LOGIC;         
7 N/ s6 o* D! n1 I/ o1 ~3 R+ ?                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
; K# |5 k* v! ?& \  m5 l4 }& TEND counter_backwards60_seg2;
) ]* A! {3 ~- e" [% CARCHITECTURE arc OF counter_backwards60_seg2 IS$ C$ {( W6 {8 d! c6 h/ c( o5 @) e
BEGIN
, l7 R1 F5 a  N6 s  PROCESS (Clk)( a4 a  a& _$ x5 s; d! A& J
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
; M3 M- ?2 b# T; Z     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   : `$ t  b/ R# O5 e1 j
  BEGIN         
! D" @- d( ~8 B8 T  y! S       
% ?$ V% Q# `. E' V6 w! S       IF (Clk'event AND Clk='1') THEN           
- c$ w7 U6 o1 v" F7 B             . M9 ?' V4 K. C, e9 x! A$ L1 i
               IF imper0 >"0000" THEN imper0 := imper0-1;: d4 n$ D) p) o) r7 @
               ELSE imper0:="1001";3 A8 d' Q. `% N) ^
               IF  imper1 >"0000" THEN imper1 := imper1-1;& w8 O, f5 U4 n
               ELSE imper1:="0101";
                                  " S9 c+ Z9 M  H+ E3 t; P
                    END IF;
9 g7 y. Z% B' ?0 d1 I# X. Z- g               END IF; 0 t% Y0 ]4 _% f" \
             END IF;  
- f: n# U6 r7 J* d. d         Q0 <= imper0; Q1 <= imper1;  - v! D) O& `" a
   END PROCESS ;. v( s, {0 ^* A0 V6 O
END arc;
% z$ M4 ^! ^$ ^以上我精簡了一些 也能跑模擬圖( \! V6 }; j7 Q
但現在重點是我該怎寫60→59→58...; ]/ ^: p0 n; A. a  Y0 X
初始值60要怎寫...
6 G6 G9 g9 T8 q! I+ y是要多2個input 然後給他一開始的值?1 J# w9 j, [. Z2 |* L
但要怎寫啊@@...$ N7 K/ Z+ |" h0 U2 [
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"8 H& T# ^+ j" ?
但請問 我需要一個另外程式
3 n, @- K+ Y. N9 W# i去控制暫停開始和暫停
! f& Q: _5 f- Z% K4 Y2 e' oLIBRARY ieee;
' F# k6 y3 {( f# W  D! ^: ?- A, {) S; XUSE ieee.std_logic_1164.all;
! s: f$ r" ^4 Q$ z/ O% w& @USE ieee.std_logic_unsigned.all;
8 Z/ f  P2 |  H1 n$ X5 A$ N9 H9 _ENTITY debounce_v IS
# s5 ^6 B/ p& H" n' c; `) o! j        PORT(CLK,PB        : IN  STD_LOGIC;
7 ^: ?( m: l* t# M& P                 PULSE        : OUT  STD_LOGIC
3 g* h" s+ U7 N3 A, w! j0 R                );
0 h, s4 h% o* I% K8 b# IEND debounce_v;
5 L6 H2 S, k6 `9 Q( y  VARCHITECTURE arc OF debounce_v IS
" D8 K, c2 e% L; {* z SIGNAL imper : STD_LOGIC;! a* p& C) O6 \, h$ S7 V6 G7 p
BEGIN1 `8 Z5 U9 Z0 x6 z/ q* {7 t) E
  PROCESS (CLK)( c) C3 g, N8 H: a" F5 P4 Y2 U
     VARIABLE counter : integer range 0 to 49;
5 Y. i( C9 w* D  T* E/ Z) M  BEGIN! f! c) O- W6 a- o2 {
   IF (CLK'event AND CLK='1') THEN
3 y% m( H( a+ [2 X/ B          IF counter = "1" and (PB = '1') THEN imper <= '1';8 {  j: z2 ^" f3 T; e# u) t, s
      ELSE counter := counter-1; imper <= '0';& O' i' Z. p/ ?! o5 l+ c
      END IF;
( I( c% K: O4 I   END IF;
) X! |# F- e8 k         PULSE <= imper;   * D/ d: t! ^( w# `
   END PROCESS ;
: `$ M5 o! ?6 v( V( VEND arc;/ v) x4 N8 v8 j6 Y

4 Y- ?* h' t5 d9 D& C2 J( E6 C$ @這是按一次減一次
+ F) e2 G: `* B( {# O+ ?想要按一下開始 按一下暫停
  \0 j6 k/ w3 V
6 O- x$ {7 d- U/ Z9 b6 V6 ?ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
7 I5 T3 @. `- I% x1 K) C7 R) m  e2 o5 c3 m
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"7 z  v. O% i  A: |: I# g8 [9 y
有需要暫存器??
+ x. V1 M) D8 A% U8 Y那是震盪器→先接到開關→接到暫存器→計數器
% f* ?" R! e6 V4 }) U6 g$ f, E這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
6 ?7 W$ V, z2 U3 }     VARIABLE counter : integer range 0 to 49;
0 T5 c% q8 ?+ E/ n+ ~" o0 k( G! m  BEGIN; ^( d: o. R5 C1 ?/ Y+ d" {
   IF (CLK'event AND CLK='1') THEN2 g2 R6 f, Y9 m* p9 o  _
          IF counter = "1" and (PB = '1') THEN imper <= '1';7 N0 R7 V8 q  u
      ELSE counter := counter-1; imper <= '0';
* U6 {" E) P; |& ~- k5 U( J2 }      END IF;
7 r  i1 j. P# C6 l能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
/ [- D  A- F& M' N8 u9 H     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
4 p/ n6 x' r' A; \' {# A' }2 d  BEGIN                   5 I1 {* L  U# H- `" J: t/ D
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發7 D3 j2 V$ Q! c6 j" u& X; R
          IF counter = "1" and (PB = '1') THEN imper <= '1';  / ]8 v  e$ ]: M1 z) V1 ?% h4 ?, X  ^
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
. j7 _( a7 S+ N' _ , Z* ]/ s$ t  h% S0 i
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為03 j/ ^7 w: q' X. U# ?6 A# t
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
6 \- R/ A4 X$ x: L, J2 X( L) I# |: F8 `3 ]$ f  W
按鍵開關 第一次 on時,開始計時。
5 L5 ]! D8 c2 K! ]                 第二次 on時,停止計時。
# d; w( ^7 `9 u8 d8 M                 第三次 on時,開始計時。
9 Q) t" q& l8 Z0 D, b7 s& A) e+ a8 A
  X' V* j. ?- q1 {! f5 i, c  V這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?$ s$ Z, a3 n& n3 k: i' o* E
平行輸入 / 平行輸出  I8 W6 t! }# Q4 S' ~. c
平行輸入 / 串列輸出
5 p9 o- e3 r8 e% E& w串列輸入 / 平行輸出
7 E* R- E) a0 y0 i8 C" B" U5 d2 s串列輸入 / 串列輸出
8 }" W8 A9 y0 T6 K; A4 h哪一個啊@@...
8 D1 v& r3 g; T5 F& f# U# @我都是看書自己學1 K/ u6 V! m& ^# R2 M& z- p$ [9 h9 b
所以都不會咩0 M3 I9 J! U* b1 `) H# G
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!- W8 T: E+ I, Y! n( \/ I
今天問老師  
8 o  g4 T3 s0 f" \可是老師沒說到暫存器的東西# r9 ?2 m! t, Z& @( O
反而是說
) q+ M' H+ p& f! c5 R$ z+ fIF CLK'event AND CLK='1
9 k, k7 g, D; ?# ]7 F4 T4 ]$ tcounter := counter + 1 ;
! B) k, h2 T+ j6 i3 ?' p0 V/ ^: ^" p5 [1 Q, N
抓counter (0)   ----第一個腳位?!
+ Q1 e; e0 s, l8 V' A3 `給counter位元多一點之類的
4 e/ Y1 v$ v* }0 m% Q) G2 j& {1 L$ j- H& Q2 R& E) v1 ?) @
00  01   10   11# }2 W# D! R& X8 m  W8 K* V
最後腳位為0   ----Run
5 q' R% y' @4 _1 L; @最後腳位為1   ----Stop
' ?& \$ N+ q. j: N$ c7 V+ [  I: S' m% C& H
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
3 Q1 T% d- l$ D至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,/ m/ @0 \& s9 S# G
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
" `+ v. e5 ~' R/ G% H難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 07:35 AM , Processed in 0.141518 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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