Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; 4 q; Y& T, {/ v
USE ieee.std_logic_1164.all;: Y$ _  |  U+ s6 j0 v* k% [
USE ieee.std_logic_unsigned.all;- W' T- N5 Y% u' ~+ m% P% `
ENTITY counter_backwards60_seg2 IS3 K' t, t/ M* k3 [. Z7 w: o' S
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
6 |0 q& B9 Q" i1 N0 u* Q& I3 B: l9 A                 Ring          : OUT STD_LOGIC;                         % c) t' H5 p9 F. \, m7 J% I
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
. T3 c, ~- x/ Y* m9 F1 `END counter_backwards60_seg2;# B8 S5 d0 ^& f! D( h; I1 {
ARCHITECTURE arc OF counter_backwards60_seg2 IS; S" E+ ]8 F7 @4 F
BEGIN& ?3 ^# |6 G2 }8 S% J1 R
  PROCESS (Clk)7 A( h* |7 W6 R$ g/ q9 G
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
1 S+ E* t* ~2 C7 i0 N1 f     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
  H8 f2 {" D& T; f0 T3 ^" X  BEGIN, D0 r. N* N* L- M1 f
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
% A( Q5 S& }/ \        ELSE IF (Clk'event AND Clk='1') THEN : c  ~4 A* I. Q$ b5 j
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                7 Y5 `2 J2 N2 Z5 Y
            ELSIF Ena='1' THEN. O; S' e& I# Q8 o6 X7 W9 y9 q
               IF (imper0="1001" AND imper1="0101")THEN
% C; m, L) X- j2 h* u: O& \                  imper0 :="1000";
4 K( k. I0 r: W1 e! u; c( J               ELSIF imper0 >"0000" THEN imper0 := imper0-1;* U4 g5 s% ^, W  [( l
               ELSE imper0:="1001";
% n7 D& Q+ R8 G) G2 c                    IF  imper1 >"0000" THEN imper1 := imper1-1;" M& M( y; p$ u- i6 k  [
                    ELSE imper1:="0101";                     
! [+ O1 L+ H+ {                    END IF;
' V" y1 W, W! ]% J               END IF; 7 }3 R, A* `8 l, R1 b% H
            END IF;9 G- N! Y+ f4 q* w
        END IF;; E1 ^  h  b7 o$ ~; S0 B2 C9 o- u/ g! N
     END IF;               
, |: G& l$ M$ {Q0 <= imper0; Q1 <= imper1;
1 h! P0 B3 O- h9 E( ]0 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));         
( J3 m7 m, l( P/ N3 v   END PROCESS ;
& E9 M9 F3 s! F3 |END arc;

: d& I) }# r: o8 x6 g
2 N. V( z7 A: ~上面是我的倒數60秒程式. H8 f7 a: x' c! S) i5 r% f* q
小弟不才+ U6 N& s, Y' ]7 G! M% g# N
不知道怎寫停止
  i; M' \) N8 K5 m* g# v只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
: ?8 U0 I) l1 y6 F2 I要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,- l& R, X2 C9 |6 @  A
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII" B+ c/ G. o3 U% s; K3 t
跑一次的宣告是要放哪一行...?
* P& g9 a; O! S1 P: N/ J還有一個問題想請教
+ H$ E) ~; X5 }& u$ z" p; N" i就是counter_backwards60_seg2是我的分鐘
0 j7 U' G  _4 x! B5 r4 P2 {/ J  q4 Lcounter_backwards60_seg是我的秒* r* A1 H, s/ F; o% P. e
現在就是秒那邊 10→9秒的時候Co也會進位
* \1 E/ q/ B& s' w; t" k9 {秒的個位數有延遲 所以導致10→9秒的Co會進位
9 Y/ T# D- C0 i, o) l程式分跟秒是依樣的 (Ring就是Co)2 h  P2 u5 l4 K, h+ V2 W4 _' U
另外 分鐘怎從60開始* E' `) m3 k: `, B
因為現在我是00:00開始倒數) ]! X" D9 l* E
我需要在counter_backwards60_seg2改哪邊?
' @) p. L0 b* @9 H( [$ W
$ m& d) m' i& H# [8 W4 f! w* U
4 e2 C1 o/ g- X5 ~' j# s我奇摩即時通:xt_9000
& P; h6 B& @0 y& f$ X8 y希望有好心人幫幫忙
/ n6 C" R3 U1 E7 ]# `懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,- i) ?& r8 w/ g+ a9 Z( n
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答/ M" L% o- W2 _. G: E( Q. H% {5 `
我想問說
' _( E# e- W5 L5 \- E怎從"60"開始倒數?
  l5 ?! U9 n% u, {6 ~. q60→59→58→57....→00
8 Z) j6 ~/ @4 d6 N0 K% d6 D. m因為我弄出來都是
, O( T9 I2 c& R3 D0 w" |00→59→58→57....→00
0 ^* M. L  Q; b& V- j7 G4 ~, a& |6 X8 }; y
8 ~! E4 ?3 h  F3 p
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
' Y# z* U1 W2 z
0 N  L9 I; F# o2 z不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦; }0 S: l& W# h8 `( f1 @
因為我要做60分鐘倒數
: }( Z% t# _: Q  V$ R* X# \所以要60:00 →59:59→59:58- d& [- S8 [4 d% e+ q
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
/ x$ {( C; b, j( i/ r! o5 U( s     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
" d6 }; b: _" \5 g2 A! q我是用Quartus II 電路圖接法
8 N1 R1 M6 t8 c! N- a2 W60:00(現在是00:00) →59:59→59:58
, |7 A6 W1 n# r& I: e, A, Z# Q& Y3 T
6 F& U2 V+ Z" I4 rIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
  V+ M3 l  b3 s" E/ n/ \小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; $ k2 A- i3 q* ~
USE ieee.std_logic_1164.all;
/ }, p" V% U" G: V! DUSE ieee.std_logic_unsigned.all;
7 A$ u0 a( O; @# D3 b3 ^ENTITY counter_backwards60_seg2 IS$ w. i! ~) ~. h
        PORT(Clk        : IN  STD_LOGIC;         
- k# H0 E+ q6 W/ e                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                9 Z! x  Y" a1 Z/ x: J: n1 }
END counter_backwards60_seg2;
& r3 G8 `# m0 ~2 b  FARCHITECTURE arc OF counter_backwards60_seg2 IS
. r) P1 a; d/ E: Y+ i! V BEGIN% ?0 j# U$ W7 P( o
  PROCESS (Clk)
6 L8 ]& i& I9 ]0 _  ~- p     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);3 t* Q5 ~7 S8 {1 M* U
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ; z  O( Q1 e8 }/ y0 z3 h4 A$ ]
  BEGIN         
0 G* Q; |5 R! i& `6 y) x1 ~/ `5 u       4 z& j$ b, Y& W* ~) p8 g
       IF (Clk'event AND Clk='1') THEN           
8 }' A- W0 G/ W$ N; |& j- \5 |9 R            
% L6 T* I* v+ }7 X& e/ H) O( v; f               IF imper0 >"0000" THEN imper0 := imper0-1;$ m. v0 q2 D( Z# Y1 F
               ELSE imper0:="1001";$ X) z9 |# I* A) \
               IF  imper1 >"0000" THEN imper1 := imper1-1;6 m6 ~& {) p" C0 R0 H- J
               ELSE imper1:="0101";
                                 
! W8 W# l* T; Z5 V                    END IF;1 u7 K0 w; H; G9 a. U- V) ^
               END IF;
: o5 H3 }2 d4 F$ ]             END IF;  
" f1 F! q2 w  ]/ Y" U6 Q: i! v         Q0 <= imper0; Q1 <= imper1;  ( I- w7 e5 K! t/ U8 l" D- U( E
   END PROCESS ;
" p* c8 G  Z0 c! y7 S; ]/ Q- M# oEND arc;9 f! D; T% q+ t2 J1 n" r  _
以上我精簡了一些 也能跑模擬圖8 I4 Y. n7 Q7 n# W" ?( ]% N
但現在重點是我該怎寫60→59→58...
$ X5 _: B" W  E初始值60要怎寫.../ \6 _! a# M. ^5 N
是要多2個input 然後給他一開始的值?. y* `+ b" {7 o  F) @6 N( U4 w
但要怎寫啊@@..., o5 Y) j% K5 m) l* z
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
2 @# O1 X, P5 k7 ^但請問 我需要一個另外程式
  w. d" r  B) c% X  ~9 m4 ^去控制暫停開始和暫停
" o  Q" c1 P( j. w# V* NLIBRARY ieee;
2 m% L. o5 M5 \* \& ]6 wUSE ieee.std_logic_1164.all;. M7 j; P, V' V. x9 v
USE ieee.std_logic_unsigned.all;
6 U" n3 l. {' x; t- g2 |# XENTITY debounce_v IS
, p  z2 |8 e0 C$ J        PORT(CLK,PB        : IN  STD_LOGIC;
: C8 i5 R  i3 I# v( t                 PULSE        : OUT  STD_LOGIC
  J, L, }0 h4 b+ x0 Z) @2 i5 q                );
5 n, |5 {% o; n+ _, y3 y# EEND debounce_v;+ }2 y" k* l7 C( ~* [
ARCHITECTURE arc OF debounce_v IS
9 K$ _2 D4 ]1 D SIGNAL imper : STD_LOGIC;
, _: y) K) `; T BEGIN8 N. G+ X( x/ F- r, {5 A
  PROCESS (CLK)
: }! X% m5 J" H7 M- G     VARIABLE counter : integer range 0 to 49;
8 V- ]) _  Y' k6 ^* F1 F" s, G. }9 w  BEGIN
, P) A8 m" w6 E8 U, M" o5 x   IF (CLK'event AND CLK='1') THEN
! D( L, _* R1 W# g# Z! z! o          IF counter = "1" and (PB = '1') THEN imper <= '1';
# s0 O! T( c9 K: x* l- {# u; a      ELSE counter := counter-1; imper <= '0';
) ^% X6 }! ~4 o- |! c" Z6 Y      END IF;
# M+ A: w  |' B2 o( f, t$ C   END IF;7 s3 H2 |' ~9 i, [  E! b! A) h7 p
         PULSE <= imper;   
. @) F* T) P% |' N   END PROCESS ;! U# _* m, G, K: w$ ]9 F$ }
END arc;1 R5 K, _' z8 y0 K, b  `  B
7 _% a  h" s! l1 i
這是按一次減一次
! @6 L1 t* r: C$ `想要按一下開始 按一下暫停, V" N0 o0 c& b5 P! x8 \) N4 Y

8 `: }& H: I- x$ n( L, W, U( j: gps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
4 P9 {# s4 s+ ^0 g$ b7 `) N3 \) ~, q" M3 |. [$ E5 \
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
3 T- Q+ U& n" _有需要暫存器??) _) M/ @2 a6 Q- v, ^
那是震盪器→先接到開關→接到暫存器→計數器
& ?/ m# n) `  A; J, O2 o這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
" K* ~9 s* D1 v! h7 M$ D0 X     VARIABLE counter : integer range 0 to 49;/ W, r* M9 f' \' J" j! |9 \
  BEGIN
5 M" |5 e0 B8 H" u- l8 g" N1 W- ~& M   IF (CLK'event AND CLK='1') THEN8 s( x# p: U) A1 J3 o
          IF counter = "1" and (PB = '1') THEN imper <= '1';* N5 a; C; n$ x/ K/ z( W, B8 @
      ELSE counter := counter-1; imper <= '0';5 x0 `3 ]5 E% e) q% O2 }" {9 J
      END IF; * k. ~9 E* Q+ }& }
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作! E: V+ F1 }) S+ q1 b6 T
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數! p& }$ d- Y0 `" |9 W
  BEGIN                  
- G; K& X7 H1 a8 e4 r1 C   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
2 h8 U" c9 ~: [% [$ S4 [0 o4 ^          IF counter = "1" and (PB = '1') THEN imper <= '1';  
* @1 F/ z0 E" a+ d! \* X                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1: k1 C* C1 I/ _# [9 _5 w. U2 N) z

# n; b" j& K+ g; q      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0$ R. s7 C  M. s% J
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您( p3 T5 T% O5 a- {) J& {

2 e. S5 i% u  F' H7 j& M按鍵開關 第一次 on時,開始計時。. w" D  D) W8 l. s& e
                 第二次 on時,停止計時。' t0 _. `# B* ~0 q! y
                 第三次 on時,開始計時。
" L# s0 A+ H0 L5 w0 i  |1 E7 I8 F9 E( t6 ^6 u  U
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?  k$ G. x1 n! ^* H) ]3 T! {6 N! c
平行輸入 / 平行輸出* R% ?3 v7 f( R1 V
平行輸入 / 串列輸出
) w* I/ `* ?# x& J' S% j串列輸入 / 平行輸出
# m" b3 x' X+ f, S) ]; _串列輸入 / 串列輸出9 C. I, f0 D! C
哪一個啊@@...
# G& F! ^) W1 n: c! Y. y- E! |我都是看書自己學+ O6 K6 s4 |: c7 P7 r: \
所以都不會咩- T# I# ]7 P& _# {
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!) j4 T# w, F3 ?6 A# r. Z( |$ \3 _& B
今天問老師  ( b7 G1 X' N3 ?. V' s. O/ j
可是老師沒說到暫存器的東西5 v) Q+ F4 H" V/ I: l6 c
反而是說
0 z! g% f( L' n9 @! i0 fIF CLK'event AND CLK='16 P6 w. B: W& [- r, C
counter := counter + 1 ; ) V' U7 h7 E0 x" B* s, L

+ e# ]2 [' o" J; j- E3 d抓counter (0)   ----第一個腳位?!
; Y% {3 E0 X: d給counter位元多一點之類的7 g( m9 c& S5 e/ K
, V5 v0 v6 V- [0 }
00  01   10   11
- v6 F( g. A  Z0 L. ~) ?' R最後腳位為0   ----Run
. Z0 a+ D/ x" m( U3 _; H最後腳位為1   ----Stop
: M' E- X1 K# Z! D& h' ^1 n6 A' s( w1 O- D# n* {5 ^* w
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。2 M0 d9 ?% d$ w8 D1 {( f4 j
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,; l8 t' J1 A( I% t4 g3 x
跟你說原理你又不去想,要用你懂的畫圖的我又不會,8 z# w* h. a6 i& [1 F
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 10:10 AM , Processed in 0.128516 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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