Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
. C5 a% N; Z7 w1 A0 [$ kUSE ieee.std_logic_1164.all;. n; o- ?+ r# \) M! ]
USE ieee.std_logic_unsigned.all;
$ K6 J4 v. S* ^, S2 K/ TENTITY counter_backwards60_seg2 IS
" I0 m- n: W9 j) P0 |        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
5 v. i1 [. p' I  t3 t7 O                 Ring          : OUT STD_LOGIC;                         $ b4 e& |6 E/ Q; r
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
+ N7 x* W% K- W, ?END counter_backwards60_seg2;  n6 E) q# e0 ~& P5 K$ y+ @$ f/ J' K2 e
ARCHITECTURE arc OF counter_backwards60_seg2 IS, N  |$ r" z2 t% W
BEGIN
( T& s$ d. H+ @/ J% P" |/ j, O  PROCESS (Clk)( c# U$ M1 A! W1 ~, X
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);7 Q7 f, N' i) ~  I& I) ~4 T2 q) U
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
' o3 g1 ?  V$ G' Z+ N* B  BEGIN
7 b: T* Y; y0 D) Z9 \, w/ |        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
  K. P  q7 S) V2 i1 t        ELSE IF (Clk'event AND Clk='1') THEN
  \8 C/ z9 a  R, j            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
! i  O2 B5 ~3 d4 ]3 Q            ELSIF Ena='1' THEN3 p3 X% Q7 @2 y2 b5 _0 i
               IF (imper0="1001" AND imper1="0101")THEN
6 S; V5 ?3 ^2 s! i. Z                  imper0 :="1000";
% d" x6 t( J4 A6 m0 E9 ~               ELSIF imper0 >"0000" THEN imper0 := imper0-1;1 }7 k0 E0 X1 R% m! U' u/ E
               ELSE imper0:="1001";
/ _: E, e2 |. N                    IF  imper1 >"0000" THEN imper1 := imper1-1;( ]4 K% P$ d& E$ R
                    ELSE imper1:="0101";                      , Q* b: e4 \1 M% W' H: U7 A
                    END IF;
" |# v* ?# E1 r3 u               END IF; ! L0 b8 R; \) {
            END IF;
1 S9 K9 d/ z* M6 F# z* f        END IF;7 ~" b: l. K. U' V) X5 G
     END IF;               
2 l2 ?$ l: F3 ^; p2 @& {) o7 qQ0 <= imper0; Q1 <= imper1; ! g0 u, e- Q3 P
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));         " H% Q+ t* b+ r0 I' z3 E
   END PROCESS ;
( p2 M0 s% k- V. J3 [" SEND arc;
+ \) v* _7 ^5 ~& ]
8 Q2 ?) u7 o5 F( b
上面是我的倒數60秒程式+ e5 j7 w# f& ]" l- L2 `9 B$ c( k
小弟不才
/ S$ F1 h9 Y1 i不知道怎寫停止
- Z0 ^; d" c' \只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;/ [! P; `' ~: N3 K4 ?
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,% R! Z( S% _: I" \. ^
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
. p7 J, K2 Q* q  S/ y, ^0 r跑一次的宣告是要放哪一行...?
2 T1 x' ]( S+ _5 r2 D5 S4 m還有一個問題想請教
4 C. N* @# N' I9 ~7 P, R就是counter_backwards60_seg2是我的分鐘' L5 e3 F; I2 t( |3 S! B
counter_backwards60_seg是我的秒9 \1 Q5 d5 j: ^: y( D  t
現在就是秒那邊 10→9秒的時候Co也會進位
' {; S/ B: C. [秒的個位數有延遲 所以導致10→9秒的Co會進位
% K* n* r. U. U$ L2 k; c/ ]程式分跟秒是依樣的 (Ring就是Co)% G* c. N0 S% h
另外 分鐘怎從60開始8 o' p' N% C. H2 V0 C# E
因為現在我是00:00開始倒數
2 w0 I0 l2 e# \& `0 q# {1 i, L我需要在counter_backwards60_seg2改哪邊?
0 |( Y* P& P5 E& w0 j. u7 ^
* @& V& t8 c. G: J1 F3 z) Q2 K5 p! b* |- L
我奇摩即時通:xt_9000
. X% }. [4 I' d% h. B" R) u6 u希望有好心人幫幫忙
5 ~0 g2 P, ]3 R( N/ Z懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
# R) d- h3 n, j8 x) k5 [看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
1 {3 n5 a% C6 x  |$ E我想問說
3 W/ ]' g4 \! G% o* ?怎從"60"開始倒數?
! M1 ]+ Y/ a; b0 h9 K& I+ ?60→59→58→57....→001 f! T& b& |6 c4 x( v6 v( B2 j  ?- L
因為我弄出來都是
; J! O4 V3 Y+ z( }" D00→59→58→57....→00( r8 _% k% P" q; l
' G& O5 |0 }! C$ P+ D

- Z% ?. z5 T) P$ f2 I8 x+ i/ N; t, c希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
5 T, o! l; o) ]! u* r- j: e) R
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦) H) ^, C5 W6 l6 R6 a
因為我要做60分鐘倒數5 j4 p. }, Q) Z4 z( ~
所以要60:00 →59:59→59:58, \- ?  z$ X" o0 O( q! e3 z
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then0 L5 T  \( l( |7 z
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"1 h, a5 Y' W0 B4 W1 A( G2 M
我是用Quartus II 電路圖接法; N2 j8 _$ S0 b6 ~" E. |' k
60:00(現在是00:00) →59:59→59:58" l- A; S* f, W; m9 P& l
  \0 G! r1 d* v; F8 W
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@3 @& {1 B1 y& z  J
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
. o( y4 P) Z" X& [9 qUSE ieee.std_logic_1164.all;6 M( S" z) H  A2 W% [; H8 f
USE ieee.std_logic_unsigned.all;6 }* _+ C3 O8 B' s0 O
ENTITY counter_backwards60_seg2 IS, T- B8 \& }  `2 W# S
        PORT(Clk        : IN  STD_LOGIC;         
5 `- o2 I' K- T# m, x                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                9 T* U6 C) V9 o! c
END counter_backwards60_seg2;( c) @7 ]6 h9 o; n
ARCHITECTURE arc OF counter_backwards60_seg2 IS
$ p1 W9 a0 V. J8 v BEGIN
% ]5 ]* Y2 C4 c  PROCESS (Clk)% W/ X* f$ F* H) R6 J5 q0 K
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
  e; O9 q& ?* s, b1 y3 N" ?1 E) u     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
) o! C& O' ], N: W. F; g  BEGIN         
8 a2 ?5 t. `1 Q       
4 p) d* b; ?  W* Y' n, P       IF (Clk'event AND Clk='1') THEN           2 I- {. X- c8 l  P) C
            
( B5 v# _  \8 {! i7 {; C               IF imper0 >"0000" THEN imper0 := imper0-1;6 ^4 l# C( Z) u" F
               ELSE imper0:="1001";5 k/ o# I, s5 k1 l: f
               IF  imper1 >"0000" THEN imper1 := imper1-1;% v. h- ~7 ~) j, D
               ELSE imper1:="0101";
                                 
( I4 y% V. d4 x( z! D4 _1 u1 y                    END IF;
$ Q2 ]3 d! P1 W5 [4 ^9 z               END IF; * |8 f; f6 T; t3 y
             END IF;  # U" |  ^/ G8 }0 f; @: i" `3 G
         Q0 <= imper0; Q1 <= imper1;  + W; a8 u: c: U! r( G, V
   END PROCESS ;& }; r+ @$ s: Y& F$ S
END arc;
- M4 p/ q# u# `# @以上我精簡了一些 也能跑模擬圖
& P6 T( G- }! A5 y6 T但現在重點是我該怎寫60→59→58...
; c8 w3 K2 m  l& g9 j+ b初始值60要怎寫...
# C2 G! @  B! K是要多2個input 然後給他一開始的值?: T% k- q2 a$ o$ o- ]
但要怎寫啊@@...( e' d& j- |  T) }
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
1 H. i1 j5 @  r3 H( _" N- ?但請問 我需要一個另外程式
9 O6 O$ W  x; g% o+ A- p去控制暫停開始和暫停
$ G# x' U4 R& f" B! V: l  g5 m8 FLIBRARY ieee;
5 F7 {3 W  D, A# w# Y# i/ w% WUSE ieee.std_logic_1164.all;1 l0 ]$ W/ `; N: R# p- W! K& J
USE ieee.std_logic_unsigned.all;
$ }( T3 C  p5 ?- s$ W9 t4 O$ G2 FENTITY debounce_v IS" Y" v0 s9 S; t
        PORT(CLK,PB        : IN  STD_LOGIC;4 o+ r' e) f* O5 H! X" U
                 PULSE        : OUT  STD_LOGIC 7 @  C; q4 D# [9 k1 \3 \
                );+ T) M0 Z) U* P, R
END debounce_v;
  e) C5 |! d8 ~8 H( M/ |$ u+ o: AARCHITECTURE arc OF debounce_v IS9 X# x0 @4 s# I) r. p
SIGNAL imper : STD_LOGIC;
* I3 Y! `% U, i( W+ C: `9 h7 W9 Q% R BEGIN4 {; g# F7 k4 C" x9 C
  PROCESS (CLK); V  Z9 t& y: l9 u% I5 j
     VARIABLE counter : integer range 0 to 49;% }$ w3 V- d7 y
  BEGIN
& G7 T7 c7 _4 y5 p! v' _9 @   IF (CLK'event AND CLK='1') THEN  N0 p/ K% s- Q- n/ @; `0 s
          IF counter = "1" and (PB = '1') THEN imper <= '1';
( n" X2 E( D5 L& N( a      ELSE counter := counter-1; imper <= '0';
; D% v7 ?( t7 ]/ U  k; m  w$ O      END IF;
- P  |$ A5 K0 p4 z: ?; ]; U, ^* t   END IF;. g. p% N" O. ~) g( N
         PULSE <= imper;   4 E' d# `+ B* n  a' t7 T/ D: c9 P7 m
   END PROCESS ;: p  |, c1 O, L; J6 f: \; J2 H, ]" v+ _
END arc;; C7 \& M% V% K; o) K  f
1 {3 n7 Q6 z* ?- V% n9 D, B
這是按一次減一次
1 t! D6 e; D8 P8 C& t' U想要按一下開始 按一下暫停
4 A/ @# h# y% l# a+ q7 h4 ]- \6 W# d) q
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
& Y# M/ l% Y& t9 p' N' k
2 y2 {7 V' c- x" t7 {! l& ~你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
% K! t7 e0 B! u$ Y8 e有需要暫存器??
% s8 A9 _) o( U+ @; ?: D' P: c那是震盪器→先接到開關→接到暫存器→計數器
$ T9 U- q! ^- c4 [$ y' Q% y! A" C這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
7 h& W: T4 i6 F     VARIABLE counter : integer range 0 to 49;
. j7 b4 y- o( w/ Q  BEGIN
$ W# d9 s2 {, B# s   IF (CLK'event AND CLK='1') THEN
9 a2 q! }( ^/ o+ @4 _  P8 B          IF counter = "1" and (PB = '1') THEN imper <= '1';
9 L# C$ R8 h4 {      ELSE counter := counter-1; imper <= '0';! U. d1 z6 u2 T; q! j
      END IF;
* c& U" k' O( p' h* |6 D能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作& b' K9 @$ a1 |8 T/ C' Z
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數$ e' W3 j4 h) v2 f; C1 G8 `" N
  BEGIN                   + K! P4 Q  o% p5 s2 S4 e$ P
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
7 e$ F. {+ @3 `/ \1 k2 A8 ^, @: X          IF counter = "1" and (PB = '1') THEN imper <= '1';  
8 ^8 J5 x2 N1 N5 f                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
$ c. l$ [5 e4 @. \7 T5 w. Y 3 ^# @% }% }* H& @4 D9 ~
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
4 x5 P: @* @5 ^! s      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
% h, V/ n1 Y3 g) M0 o/ Q; f: N9 s( x! I/ T- Y- `2 R
按鍵開關 第一次 on時,開始計時。
$ Z$ x8 P# `' @+ b4 U& O                 第二次 on時,停止計時。) h) _8 i, U% M; |
                 第三次 on時,開始計時。8 @; Q+ }2 V9 |2 W% u, {7 L2 Y1 M

5 \1 K6 M1 W. V這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?& A% g1 S4 y$ ]4 ?
平行輸入 / 平行輸出% r+ ~8 s' l9 Y6 P' L, g
平行輸入 / 串列輸出
8 Q! \( G5 E. W& o' Q# H串列輸入 / 平行輸出4 ?- z; o6 N# m" j) l7 z* P# @
串列輸入 / 串列輸出2 W% k$ U% a/ ]% ]
哪一個啊@@...
. w# ]& j! _$ g7 X4 {我都是看書自己學
: j* ?: E( ]; h; d6 W* [; J所以都不會咩, g& ^" y2 w- ^5 C% o+ [$ h
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!- G' ]' m. ^( y4 c$ n
今天問老師  4 a, H+ z1 w4 c: R! @* k! c3 S1 R
可是老師沒說到暫存器的東西
. i3 }7 J1 \+ j6 f% t) C反而是說 ; b/ C4 w& u9 z" Z* q
IF CLK'event AND CLK='13 n% K- ^# e4 @2 h/ ~/ r4 l+ ~
counter := counter + 1 ; 5 |( {6 c; |5 B* y! a* t- b2 Q
1 J! z* c' R1 y$ f8 B
抓counter (0)   ----第一個腳位?!6 L' c- R- f( c! ~7 O2 N4 H. Q
給counter位元多一點之類的9 _) I" ^# Y& k* d+ J: G6 ?

, T$ i3 v7 Z1 _! |* {8 @00  01   10   11
# r+ m* p! l2 ~, }' I最後腳位為0   ----Run
" V6 r4 I% i7 b# x+ ?  ~. h最後腳位為1   ----Stop( A" M! L. H$ v( T5 P3 {9 a

; I. J$ D0 g1 x0 q* r可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。# F9 K0 E2 w3 m  H7 U; z7 h
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,; k5 @* t1 d& @/ b/ B1 r2 |; p; h& I# {  }
跟你說原理你又不去想,要用你懂的畫圖的我又不會,
3 ^3 Y. P) l% [, F( f難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

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

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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