Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
( Q7 \, V9 N9 W! n% O4 R/ \USE ieee.std_logic_1164.all;
" b, w4 A0 v, Y' z$ D# QUSE ieee.std_logic_unsigned.all;
) b* K; T, u5 k2 ]0 r5 E3 gENTITY counter_backwards60_seg2 IS2 z5 A- l7 k7 M6 {# L) W& t
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
, S6 E, [- n/ }# F3 e- v8 U( l                 Ring          : OUT STD_LOGIC;                         
0 h$ n, R2 M4 J( z9 {9 H                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
7 ?5 j# r+ v9 ]. w) K  n/ [0 _END counter_backwards60_seg2;0 I6 }: E" Z9 k5 a
ARCHITECTURE arc OF counter_backwards60_seg2 IS
( }6 R! t( c8 n/ [ BEGIN: @% g) e8 i) @
  PROCESS (Clk)
8 r" ?# z4 V1 w# z0 G; U0 A0 s     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
; D* z# d; ]3 ^! s. E4 T* `3 G     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
! H% R; m1 M3 `* D  BEGIN( T( j% m* L9 ?: T& p8 ]6 W
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
& O1 h: H' b2 Y1 ^9 ?        ELSE IF (Clk'event AND Clk='1') THEN
% |  L$ X$ _1 V            IF Load='0' THEN imper1:="0110"; imper0:="0000";                " b6 P/ k1 \1 g& K& [3 ^) p5 K* W
            ELSIF Ena='1' THEN
7 ~3 f: }* {, v! u               IF (imper0="1001" AND imper1="0101")THEN
+ c' D( i% }0 I1 G& R/ y                  imper0 :="1000"; 9 S1 ~; y0 O: C& ^. R
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
1 u5 X' W# M0 a               ELSE imper0:="1001";
0 G1 U6 e1 o: f8 @( t- d                    IF  imper1 >"0000" THEN imper1 := imper1-1;
7 ^4 `' h$ J5 O                    ELSE imper1:="0101";                     
+ f5 l5 p3 o: F7 r8 B! v  v) A2 B. w                    END IF;& \' \8 H6 d. b* `* D
               END IF;
! H! b; a4 _* |9 @            END IF;
2 p7 g* i9 V6 w; r$ c, e3 h* O        END IF;
3 X  S- W, o2 u- z( X' W) w     END IF;               0 v" n6 _0 ~5 _9 w( q6 O: e1 P# r
Q0 <= imper0; Q1 <= imper1;
6 L8 m* ?( T! C- V1 C; Z$ RRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));           t5 \) r; ]7 H* H9 R
   END PROCESS ;  Q% J/ z1 L/ j4 V, G6 I7 Y4 {
END arc;
6 k+ O. [% M( n; s) {

5 ]- r( P2 P: B$ e9 O上面是我的倒數60秒程式
# r2 s+ X8 V% D' R8 e小弟不才
4 x! f" o7 D% M. ^  l不知道怎寫停止0 j5 r) F! S5 q5 g" ?
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
7 B, {  R& U+ |" ^要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
  U8 U0 |9 l: i+ _除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
4 F) T1 l4 y  n7 ~/ Y' p  U跑一次的宣告是要放哪一行...?
; E( r9 t5 z8 k* ^: Q! w, R  t還有一個問題想請教
' {* p+ l: s' T0 ~( T0 y; u就是counter_backwards60_seg2是我的分鐘" B8 x4 o5 W2 a1 W* |3 D
counter_backwards60_seg是我的秒  n- q6 n) U8 z* ?/ M& T
現在就是秒那邊 10→9秒的時候Co也會進位& v+ q4 \  `% f
秒的個位數有延遲 所以導致10→9秒的Co會進位
3 ?  y" D2 G2 r9 _" e5 E程式分跟秒是依樣的 (Ring就是Co)
+ F9 S% v: n2 N0 d另外 分鐘怎從60開始9 A2 p) H3 }! o" i
因為現在我是00:00開始倒數7 F( ]8 r' X! f6 `+ |9 d
我需要在counter_backwards60_seg2改哪邊?
* i% L% Z: e% g1 }7 n6 ~, K8 D
0 {( K% `' f: j7 k: J
& z+ B0 c' H6 b我奇摩即時通:xt_90006 K7 \2 V- j) \4 t
希望有好心人幫幫忙; N3 I& q) O* F* L+ E# e
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已," c3 Z+ d$ \5 W& o8 f% p9 g) d
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
3 D7 E# h2 ]  d- F8 J% f. d; M我想問說4 q& M; Q. `3 x5 e
怎從"60"開始倒數?$ z' |& v1 E6 E5 Y/ ~/ _1 ^
60→59→58→57....→002 K1 P5 v2 S2 u2 ]9 \& u( C" T
因為我弄出來都是" y7 Q' M$ U0 D4 k# `6 i/ }
00→59→58→57....→003 k+ ~6 ]! |4 e8 _+ Q) i
$ {- O* O$ R6 r' \6 {. m

' ~/ x7 j6 Q$ A, i' Y* b+ f$ Z希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
8 h- F2 R: O8 ?7 G
. p5 H) m" O( m8 _& M不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
: A& ], f# |, q; F! \9 K/ r* e+ f因為我要做60分鐘倒數
0 Y7 t# E1 O; m6 k/ n: y所以要60:00 →59:59→59:58, F; V' K* E. W: D
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then' ^6 o! g5 ~# L' R$ M
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"# J9 [+ u2 P* K/ t5 y% [% d1 n
我是用Quartus II 電路圖接法
6 F9 d4 [9 T! ~' P3 g5 t$ {60:00(現在是00:00) →59:59→59:58
( O& Q3 l; `# g; g5 ^& |
/ ^' P  E/ e# S; u. }3 tIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@7 A8 S, R0 f$ `6 Q- v, ]1 O1 c
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; ; b! }1 j3 A8 l/ H, b' o
USE ieee.std_logic_1164.all;. C$ V( X' Y$ U' N, T
USE ieee.std_logic_unsigned.all;
9 g2 x2 l1 ^$ t1 X$ LENTITY counter_backwards60_seg2 IS
% K. ~5 i1 `, ~5 Y  ~        PORT(Clk        : IN  STD_LOGIC;         
' {$ |- N: I9 r, N3 P) d' W3 e! O                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
& s8 x+ {  Z4 z7 P: rEND counter_backwards60_seg2;: L0 {1 o+ u6 Y- f4 v( Y
ARCHITECTURE arc OF counter_backwards60_seg2 IS
' _+ G7 j+ c7 e( e& k3 a4 E. r BEGIN( W$ x0 S' o' E: z  T$ ^. `
  PROCESS (Clk)
6 Y  `: A  ?6 e, n7 R     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);6 e: P, [7 R! S6 h
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   $ H6 h0 S# @0 w& p" o( B
  BEGIN         
: v, U7 Q, V0 U+ h) }! l, u) r       
5 I- u% ^; |9 e       IF (Clk'event AND Clk='1') THEN           
- n4 K8 Y3 C$ d. W               n! {' X. n3 Q- V6 F7 e, Z
               IF imper0 >"0000" THEN imper0 := imper0-1;2 c9 Q( H( j3 |$ x1 M
               ELSE imper0:="1001";2 P) |+ n  v% T7 ]4 b; j
               IF  imper1 >"0000" THEN imper1 := imper1-1;
# ?4 d% L: x8 H; V8 \. Q               ELSE imper1:="0101";
                                 
5 K3 P! t9 F' f8 [$ [: i                    END IF;, f2 O3 a1 K5 y# l+ K
               END IF; + {* E5 _  s/ B6 a
             END IF;  0 i) T$ ?* O' i8 `/ J+ t, y" H
         Q0 <= imper0; Q1 <= imper1;  
9 t3 _- d; t4 f5 a; T6 f   END PROCESS ;% n3 v6 i+ }7 C: w- }% L0 y
END arc;
/ O) P7 l- i6 R6 ]1 Z* H以上我精簡了一些 也能跑模擬圖1 v' g. ]/ D( Y" ?; C: J
但現在重點是我該怎寫60→59→58...: m; p  B1 c- F2 m
初始值60要怎寫...
5 H4 L1 I' K! W3 i是要多2個input 然後給他一開始的值?: m1 _  z# y# s1 N& \: X% M6 Z
但要怎寫啊@@...
3 o* h( X/ _# Z
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
% N& d" o* S) R+ p, x. G但請問 我需要一個另外程式& c" V2 I; L: U( B9 [! ^% d! k
去控制暫停開始和暫停
: X9 @1 b) }0 ]LIBRARY ieee;
$ d6 U% U, @4 z! }) s; BUSE ieee.std_logic_1164.all;
% R: M* r; |9 @* TUSE ieee.std_logic_unsigned.all;; }8 S- `- T# J
ENTITY debounce_v IS9 k& @- [+ k! ^, U& ~
        PORT(CLK,PB        : IN  STD_LOGIC;
! ?# k/ p6 d: R% t) S( Z" n                 PULSE        : OUT  STD_LOGIC : R& J1 K0 l# C4 J/ Q
                );
$ \5 {! q6 K. t5 R2 u6 EEND debounce_v;% Y4 k% b$ T3 Y9 r$ q4 C
ARCHITECTURE arc OF debounce_v IS
9 R" @+ D# O+ {7 S3 C1 O8 w SIGNAL imper : STD_LOGIC;
5 i  S9 ]' S* T/ q' W& V9 c' t BEGIN/ U' Q4 g& a& e: i) l
  PROCESS (CLK)
" q6 X* x+ ^  i. r$ K: r0 C9 [$ U* C     VARIABLE counter : integer range 0 to 49;3 d6 I3 l4 u: [& ^: p
  BEGIN
2 s! y- O8 D7 E. c+ Q+ z   IF (CLK'event AND CLK='1') THEN
! _( W4 M$ ^" a% ~; J          IF counter = "1" and (PB = '1') THEN imper <= '1';
5 L' R; I+ B( K: ?, F1 d. S      ELSE counter := counter-1; imper <= '0';/ m' M( Z' F" F7 k
      END IF;
$ G/ }+ j5 K! Q   END IF;
1 g! S5 ]5 I8 k, T* h         PULSE <= imper;   
; H$ V: v* m4 Y- L2 w  g   END PROCESS ;4 \2 b; R1 y2 v. _
END arc;
) L( h# ^7 v! k3 ~2 N: ^, j+ ^* c% f
這是按一次減一次
( e) N3 j$ L+ @0 J想要按一下開始 按一下暫停
. u$ H) V) }) u0 d/ {# }+ I5 k! X3 H% j# ]
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。# t$ K* j( l4 B7 h: l" s0 W. \. u% E
. z3 i* M$ m) u2 j& S, V' r
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
  ~8 Q- V$ b9 Q" L3 {有需要暫存器??& \* ~' s7 O+ W2 b- K% r5 b
那是震盪器→先接到開關→接到暫存器→計數器
, T* M2 {0 c: k/ V這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)& _2 s9 [) ?( s" p
     VARIABLE counter : integer range 0 to 49;" f4 ?# _4 e7 W7 H3 x
  BEGIN6 R3 B+ h! \& l! i8 Q
   IF (CLK'event AND CLK='1') THEN1 L1 _' M( g4 b- A
          IF counter = "1" and (PB = '1') THEN imper <= '1';3 i/ Z/ |: `* g' X
      ELSE counter := counter-1; imper <= '0';* k/ l" H6 |5 M* H$ Y" p8 e9 E
      END IF;
% O! O3 m0 `1 H: f: e能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作7 O" I5 C6 l$ c  e  w- R% M/ g( l
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
1 s  G* C7 V0 V- a" l; B  BEGIN                  
$ D) f5 C! F" i' s   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
7 r1 ^$ z3 v. y          IF counter = "1" and (PB = '1') THEN imper <= '1';  
* A- X+ N5 I2 V, s& r6 {                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
; v# L! P0 e# \8 b
9 c$ T7 v( @/ e/ u      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
5 b+ ?. r9 o* Q1 S( |% H  L      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
2 v% U0 k5 S' J# D$ |, Y, G" y6 ^
按鍵開關 第一次 on時,開始計時。
/ u- M5 b2 Y. @& c" C6 J$ P7 i* k                 第二次 on時,停止計時。( f& a* z+ O5 h* A
                 第三次 on時,開始計時。
2 J; @; \$ r' a7 `
2 T& @% f  T8 z$ ]9 a& i8 P這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?3 \3 r7 a4 B& F5 M
平行輸入 / 平行輸出
4 ?  [$ |+ d# s* K1 `) x2 J  e平行輸入 / 串列輸出, U' E% x8 X3 ?+ z; b
串列輸入 / 平行輸出
5 N% t* r# y7 b/ d6 M串列輸入 / 串列輸出0 K" M9 E2 a( K% n$ E: H9 o% ~/ M
哪一個啊@@.... z0 c3 \' I& L, t4 y4 [* [# T4 u6 b: Z
我都是看書自己學
7 W- y; o: N) P0 T, z4 L) B所以都不會咩
1 z  O! _3 C/ `( O  E拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!$ @" {+ ?4 O9 x  O
今天問老師  , |- r6 ~/ @! z( V+ F, q) H
可是老師沒說到暫存器的東西! Y8 p7 @9 q! s' s0 d9 F
反而是說 " ~0 H- I& s3 w4 _
IF CLK'event AND CLK='1
3 x) G! a, V, A* ?counter := counter + 1 ;
- z% r. ^9 L) g& w
( I* K! }8 Q$ }  o9 q! f抓counter (0)   ----第一個腳位?!
+ V  P6 ]8 W6 Z' K' E# h! F給counter位元多一點之類的
$ o" Q8 X5 M0 y  {
% l: F( o7 d! M/ ^! e  \00  01   10   11
8 X$ L$ I0 H& W. m9 p最後腳位為0   ----Run
, |4 J$ ~3 W6 d7 f# c+ \3 z6 T最後腳位為1   ----Stop7 Q  u0 f: W  M' q* ?

+ I" e& T) k- O& Q可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。2 t: V9 B) K( X/ T! \* e
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
9 g: i; V) ~6 p6 ~5 E8 |. I跟你說原理你又不去想,要用你懂的畫圖的我又不會,  E3 ^+ @/ H# j* g* t
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 11:29 AM , Processed in 0.131017 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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