Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
9 f8 ^4 d6 ?: @& R. ?$ p0 H( [. w4 rUSE ieee.std_logic_1164.all;
; i2 v0 O2 n2 ]1 ]4 kUSE ieee.std_logic_unsigned.all;4 g/ p5 M) b( K+ h( n
ENTITY counter_backwards60_seg2 IS
" r* A0 G8 u9 f        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
) J! V* W8 v; }: q& b/ G' S                 Ring          : OUT STD_LOGIC;                         
( Y' x. }& i* O! {                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        , F6 x8 k% M% J( I( N4 H
END counter_backwards60_seg2;
4 S4 ]' T: n& Q6 H% @4 ZARCHITECTURE arc OF counter_backwards60_seg2 IS
% X0 K5 r9 {: k4 Z! O0 G BEGIN2 B) `0 D" ^# \7 P- I
  PROCESS (Clk)
+ h: E+ w& u. q; v2 G     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
# a& G* M( R/ Q8 \     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);1 P$ A3 T3 t9 j
  BEGIN8 ~6 f% y1 P, h2 l
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
+ j: z' J4 t0 n        ELSE IF (Clk'event AND Clk='1') THEN ' L4 p8 ~0 l$ K
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
" [' b- X9 U0 O( O% w            ELSIF Ena='1' THEN
) _& T, y% z0 b  K7 D; R+ U               IF (imper0="1001" AND imper1="0101")THEN1 P1 `8 H- u* X1 P+ S9 c8 W" W$ r& \
                  imper0 :="1000"; 4 N6 A0 X; v0 W1 N7 x" j
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;, X0 ^- E5 [7 `$ V, C- b% N- ]
               ELSE imper0:="1001";/ ^- n# C: l3 Z0 P  G
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
# _& e2 ~& ]4 y! E. q" ?" D                    ELSE imper1:="0101";                      ! ?0 W1 B% H; d6 u# d- Z
                    END IF;
0 o: ~# {* U, H               END IF; ! D+ J' m( P* }1 C
            END IF;0 T* w1 M/ C6 C4 x3 K
        END IF;
: v7 @/ g  `8 h( s1 ?3 O9 ]) l( b     END IF;               
8 C: v( O# |. u. |3 v! dQ0 <= imper0; Q1 <= imper1;
6 p7 |4 P0 g! Y$ L2 K8 K3 _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));         
2 a) R- `: O: y% G; H   END PROCESS ;8 z5 k! C9 {; C: v
END arc;

# T! S+ T9 b7 Z! t
: j3 m9 S* S9 k2 t3 _上面是我的倒數60秒程式
6 v+ a0 d  Z+ _小弟不才) G, o4 ?( ~0 U% A. `
不知道怎寫停止
, O2 I/ `( G1 M/ A只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
$ I; R/ {% C3 Y要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
  I3 l% s8 b  U- o% y$ y, w! C除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
3 J6 A2 m- F  L* A! X# [2 }' V跑一次的宣告是要放哪一行...?
5 ^4 ]1 `4 ]" {! v還有一個問題想請教: ~+ t6 D# P. V' @2 k5 E. v  S
就是counter_backwards60_seg2是我的分鐘5 O5 a% G3 M6 z% Q; ]+ D- l
counter_backwards60_seg是我的秒% |. U  U+ ^) N0 F  j3 h
現在就是秒那邊 10→9秒的時候Co也會進位3 k0 ~: `# W' e/ l: W9 U& ?
秒的個位數有延遲 所以導致10→9秒的Co會進位5 S! n% }3 U7 \* U- b/ d; _6 b
程式分跟秒是依樣的 (Ring就是Co)6 ?  q6 H* [. C
另外 分鐘怎從60開始' E& c1 t& _, q/ |
因為現在我是00:00開始倒數
5 v0 M! Y0 {1 i6 q/ O  O我需要在counter_backwards60_seg2改哪邊?7 Q2 ?+ O8 _6 G( X3 V
( J2 u: X% G, {; u; ?/ h/ j* n& a

/ \% ~8 \3 l# V7 y: T我奇摩即時通:xt_9000
; d( _, D8 U5 M1 i: _希望有好心人幫幫忙: H$ Q4 c' R2 X% G2 ~" }  H$ A
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
, s7 ~- f5 h6 a# O" H看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
( G' n8 @* J6 f7 t我想問說
1 m) d# i) m7 p( ~# A怎從"60"開始倒數?
# N4 ]4 W: S; H, Z60→59→58→57....→00) U$ l, x; V' E) B$ q! O% ~0 n5 J% ]
因為我弄出來都是6 c$ Y9 {  X2 X5 i+ v
00→59→58→57....→00
/ |: s6 F% d) X& U
; G. Q" `7 k- J4 U0 e& S
) ?  o+ x7 g( Z1 F希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
) Y9 b6 f& L  c  o$ C. I
: ]! ~4 `) L- U9 I& x7 Z3 S1 U不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦+ d3 s% c) B, ~
因為我要做60分鐘倒數0 D7 C6 u" Y: |  `5 e
所以要60:00 →59:59→59:58
; I& s  b) w9 P/ `0 L我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
  [5 H& c" j, C' g+ o     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"8 O  e" x7 g$ Q0 R
我是用Quartus II 電路圖接法& n( |- o$ `4 S% d* F' C9 Q
60:00(現在是00:00) →59:59→59:58/ x6 u7 p% S  L, I) v
- E4 c, v" ?0 j' l8 ?! y
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
, o8 p4 c6 l/ p5 U小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 8 h7 B! p; }# I2 J
USE ieee.std_logic_1164.all;
' s* q% \. f$ `( i0 MUSE ieee.std_logic_unsigned.all;* f2 `  b% k# z8 S4 H, G
ENTITY counter_backwards60_seg2 IS
# J; z/ c2 x) H        PORT(Clk        : IN  STD_LOGIC;         
5 n- B0 }3 F! C$ r: P4 ?/ @8 r  O                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
% i# F& E3 d  YEND counter_backwards60_seg2;
, H% a) o; S  c8 bARCHITECTURE arc OF counter_backwards60_seg2 IS" x0 k2 g- x3 N, K% M
BEGIN
6 V% Q4 \) v6 C" v  PROCESS (Clk): G6 g2 C+ V% S  f1 L
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
+ {% \  ^' f- s4 p3 }4 C     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ; n) G) r# ?' B. v: k6 h
  BEGIN         
* [" ^, O& n) J" o" k       
$ g5 u8 ?; v. ]; A0 {" z       IF (Clk'event AND Clk='1') THEN           3 Z1 _% e  j# f5 W3 Y; s
             / [$ c- F  v% T  t
               IF imper0 >"0000" THEN imper0 := imper0-1;
2 i- `2 n# G5 z! M               ELSE imper0:="1001";
! d0 p- y; Z9 F5 r# P$ a               IF  imper1 >"0000" THEN imper1 := imper1-1;4 ]# @; q# F) m( }; |% i- D) a
               ELSE imper1:="0101";
                                 
+ B9 L7 f  h$ V7 `& ~                    END IF;
. d9 {" g& U" r' e               END IF;   r; p5 Y3 G5 K8 _
             END IF;  + g- ^! `% M  z5 q7 H# C0 `
         Q0 <= imper0; Q1 <= imper1;  
) e9 g. |% \! n4 v# v' l  y   END PROCESS ;. \3 Y0 d. H8 F+ K) x
END arc;( C: p; P" T( {: ?4 o: e  l" B( e6 F
以上我精簡了一些 也能跑模擬圖* n' R  C- F0 ]! a$ T4 Z
但現在重點是我該怎寫60→59→58...9 g9 Z' [( V& q" m
初始值60要怎寫...
. A% `6 \# J: ^4 H: N是要多2個input 然後給他一開始的值?  r# d7 L' p# D% M: Z. \( Q
但要怎寫啊@@...
- I5 N3 o2 Q9 Y. f
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
0 h" b; g! H- c- F% T3 m" s1 ]5 p但請問 我需要一個另外程式: R0 j" M+ u2 T. q6 N8 ?4 I6 R! O
去控制暫停開始和暫停
8 A  Q$ `0 ^$ s$ S0 s! jLIBRARY ieee; $ S0 }/ e9 }% v. Y! ^( Z$ m
USE ieee.std_logic_1164.all;# a4 v( T9 L4 |9 O1 I) j* h
USE ieee.std_logic_unsigned.all;9 C5 B" r/ ^, {4 Z+ S; Z$ P& x
ENTITY debounce_v IS6 g( o. q* y1 {& x7 E* t$ J
        PORT(CLK,PB        : IN  STD_LOGIC;
# \8 A6 [7 q0 y                 PULSE        : OUT  STD_LOGIC " {4 a! c  s7 }( w) t
                );; S# h3 U3 A3 E4 f! B
END debounce_v;
- a- _9 ?& |, AARCHITECTURE arc OF debounce_v IS: r9 H1 e1 Z6 \
SIGNAL imper : STD_LOGIC;
2 ]/ F( i; S1 [( u- v$ x, y BEGIN
8 p  T  e  Y3 o$ K. P  PROCESS (CLK), M. D! Z! E4 C6 F" h+ Y* |
     VARIABLE counter : integer range 0 to 49;+ }; S5 |! S, ~" A% U5 z
  BEGIN/ q; S" z$ ~5 }# h& T# K
   IF (CLK'event AND CLK='1') THEN
/ v9 {, g8 }6 T& V, r8 ]9 P" B          IF counter = "1" and (PB = '1') THEN imper <= '1';5 |) x7 ~' t$ y" V" P
      ELSE counter := counter-1; imper <= '0';
% e* {! h4 {/ ~( Q! [3 E      END IF;
) @: d1 u8 U! \# c8 {   END IF;' U2 D  m2 p" i7 ?; c
         PULSE <= imper;     X/ J9 J) ^9 y/ k( [- S
   END PROCESS ;, w. q" b0 e( C0 }* X' G) ]
END arc;
! K4 o9 Z& q0 i: p# S: G3 i5 U$ i; \% W( n  b$ ~* J
這是按一次減一次0 u  f. g: P) ^+ Z$ H1 J6 p, k# b' _
想要按一下開始 按一下暫停
/ z0 v7 h7 p! d& `* z+ ^& m. g/ R- ?  o) f3 x
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。" z+ w! s# }9 w: L7 d5 r' f6 P  u/ e
+ i6 Q) |& j( H5 D# l; H
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"3 ?# p( {1 `- p* N* H8 E
有需要暫存器??& T: P1 t; U& m
那是震盪器→先接到開關→接到暫存器→計數器$ @# l: {9 O0 Z6 l0 f" r, Z1 M+ b
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)1 n: |  ^- S8 z8 H3 i( r9 S
     VARIABLE counter : integer range 0 to 49;& Q9 j; e$ O* g- s9 c7 v
  BEGIN9 m' O9 }5 N  t4 F( t
   IF (CLK'event AND CLK='1') THEN1 z" R9 N" `! O  b/ Q2 I& g
          IF counter = "1" and (PB = '1') THEN imper <= '1';
! {) z& y+ k0 |: b& ?! y! u      ELSE counter := counter-1; imper <= '0';
0 W* _! {5 _4 P! b1 @      END IF;
: p$ F7 [1 \5 E. R能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
: v# D1 [3 O6 ^/ N. h* ~+ R     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數& {2 i. N) J4 m. u) o
  BEGIN                     S# h3 D! ?/ ?- g
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發+ @$ F8 P( E+ s, q5 M6 z
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
8 w5 Y- v1 q( n! \                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
% O& W& x5 D4 s) a7 T # J% @) w* L" J/ s9 o
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0! m# G( f, M; u! j3 ^. d# h
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
) o  E% m* j! m# S/ L
  c, w5 C* {7 q4 u  ]0 n6 _按鍵開關 第一次 on時,開始計時。
% n  u3 C2 `$ w                 第二次 on時,停止計時。
4 o. P+ @: B  n# U                 第三次 on時,開始計時。
: Z$ B$ H$ _( v: d: u, p6 r& @# d0 y$ t
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
/ p8 n# F" ~3 T$ _' O7 U+ x1 \平行輸入 / 平行輸出5 \, c0 K! \. `7 c3 t" ]% b, @
平行輸入 / 串列輸出
  K* o# o7 C: q串列輸入 / 平行輸出
3 f0 @6 N' Z( a串列輸入 / 串列輸出2 d- h+ u* z: L6 e0 R% g7 @6 y
哪一個啊@@...7 |3 ^! T$ @3 v, l6 d
我都是看書自己學
2 q, j1 ^( G7 _1 x( `5 r/ Z9 O所以都不會咩- z- s* L1 v* ^+ M- `. O
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
5 }% D2 ?. V( V+ [今天問老師  
% ^; E. M1 C+ p* f; o( N+ `可是老師沒說到暫存器的東西  h5 s2 R) ^5 L+ i6 H8 r4 D' O
反而是說 ; u! D! g: Q: l, H: {
IF CLK'event AND CLK='1& }1 q# Q/ ~4 q4 C
counter := counter + 1 ;
; u* V1 E  t5 B& a7 W
$ c0 s$ n' y8 V' d抓counter (0)   ----第一個腳位?!4 r, T: G2 m5 z* B. X
給counter位元多一點之類的5 x. _, u; m0 s8 Y/ O1 _
! r3 b! |" a8 _. _1 A( q& U
00  01   10   11
8 M- F- L* b6 o. ^最後腳位為0   ----Run
* S: g6 M6 f! @$ d* J最後腳位為1   ----Stop
" ^% j/ H" F0 f- g$ f) d& f/ Z/ n' t
. f1 m8 t# J% r3 v+ d可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
; Y; v& i* g+ F8 e4 ~7 O至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,/ D2 q& Q  `/ ~7 Z
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
* o' _+ y, F8 z  g% i難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 11:28 AM , Processed in 0.137017 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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