Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; " Y! I! z  J) a5 Z
USE ieee.std_logic_1164.all;& j; v: J8 c+ X) `) P+ k. m2 I
USE ieee.std_logic_unsigned.all;
$ u* `9 U2 `# M! S: Z: mENTITY counter_backwards60_seg2 IS
2 r) ]& L( f. D" W7 X+ w, Z        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
# L# G& T0 s0 q" `( G. a2 M7 O3 g                 Ring          : OUT STD_LOGIC;                         
# G" l- N6 [; M                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        3 I+ I# i: X0 G% m  s- v
END counter_backwards60_seg2;
: X7 ~; i# V: q$ m: E3 C6 sARCHITECTURE arc OF counter_backwards60_seg2 IS4 j+ n$ e( @7 c8 F5 H' p
BEGIN
! {  M/ U1 L& I2 `5 `  PROCESS (Clk)% V# _5 ~4 |; }* y4 b/ J3 O+ S
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);6 U% R5 i  \' K6 k
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);/ ]6 u' J6 \2 J' z0 F6 i- O, l
  BEGIN/ n. V- Z' M# @* @
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
1 I" @6 m! B9 A0 _# d) E        ELSE IF (Clk'event AND Clk='1') THEN 7 X/ b+ s$ E' p- p& m3 W; Z: {
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
$ J8 ~% C8 `/ w3 l7 e            ELSIF Ena='1' THEN; k; k  R7 \' ?/ B1 |7 [
               IF (imper0="1001" AND imper1="0101")THEN
- H  X2 u3 c' ~- {                  imper0 :="1000";
: ]' a/ Q% C, f# n% Q7 s               ELSIF imper0 >"0000" THEN imper0 := imper0-1;$ v: q- b9 c( }; m9 b0 ?9 L5 w
               ELSE imper0:="1001";
, o. T( F8 r0 C8 e) Y8 F! V9 j                    IF  imper1 >"0000" THEN imper1 := imper1-1;' ?2 o! V1 R8 K% ~
                    ELSE imper1:="0101";                      $ R4 g4 [/ A) p( ^3 ^- }% W% J
                    END IF;8 H5 [. z; J  \. g
               END IF;
5 T8 h- C0 v$ {/ P" ~+ Q7 |, n            END IF;
4 n- N& F% h; n6 ^$ x( t" |        END IF;
5 B9 ^, G( i0 C8 j: a# `     END IF;               # q  V- g/ ~) T: h  L
Q0 <= imper0; Q1 <= imper1; & J0 ?3 Y2 N3 Y/ f) z5 L+ b
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));         
3 Y( @, V( h7 l: k5 {2 W# u' V: {2 W   END PROCESS ;
. ]! y5 R$ O2 B" P3 P! d) z8 ~5 e% U5 pEND arc;
9 F+ y9 m  B- |* t0 C
( c( [- \- g0 ^/ A8 b. {; Y. w; I
上面是我的倒數60秒程式
8 ]4 j! J/ j- f小弟不才
9 S! z( }& L5 h不知道怎寫停止' ]9 \& L8 r/ T" ]$ d
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
+ H4 k" ]* C% ~1 H8 l2 e! e$ q要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
8 p" j8 n8 `9 C; [9 E除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
3 S% {6 k( {' f7 u$ j; S0 z4 |跑一次的宣告是要放哪一行...?
3 Y4 K! G# @& z' m, S還有一個問題想請教5 Q& {" I5 V4 C
就是counter_backwards60_seg2是我的分鐘
! F, ~2 F$ @5 y" r3 ]6 Ecounter_backwards60_seg是我的秒; k  j( ?' W7 r9 x1 R! ]
現在就是秒那邊 10→9秒的時候Co也會進位# Q6 \  W9 z- F! A9 Y7 v4 v; g( _* M
秒的個位數有延遲 所以導致10→9秒的Co會進位4 v* z: L/ o' {
程式分跟秒是依樣的 (Ring就是Co)0 H  S& F6 T3 [: R2 X( h
另外 分鐘怎從60開始9 W$ W6 H: O$ F: U) B- X; N
因為現在我是00:00開始倒數
) U) m/ x4 c( @* f我需要在counter_backwards60_seg2改哪邊?
% ^- C0 o5 N# D
  j6 S8 U" Z# v" b
( |3 P5 ~( n( i' f5 w我奇摩即時通:xt_9000
2 z2 c7 C6 x# H' b希望有好心人幫幫忙- c7 W, n) W; e! \2 Y5 c
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,9 l- S% J+ g- l% s
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
, i6 R& ]; @/ A7 W' L# ]我想問說
2 I+ z6 O; a8 g  l$ F& P- x% v/ d怎從"60"開始倒數?4 @( D) I" g* |9 {) G+ ~
60→59→58→57....→00
- j4 i9 a$ _! ^& b8 |因為我弄出來都是1 U  u9 z- X  i" {* z
00→59→58→57....→00( o. F! ?9 q, `9 J6 D& m

& o& h5 S+ a  Y4 o# N: _  r% [6 r3 t+ N
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
/ E2 X2 s4 S/ h* U5 Q  A& K& f' A6 g4 G( B8 c; n
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦! @- y; @  A  W  g5 _/ M, |
因為我要做60分鐘倒數8 w4 a& V9 N* i4 W: D' l
所以要60:00 →59:59→59:58$ p2 ~( g/ T" l2 a! v3 q. V
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then8 Y. G( g6 S" ~- E
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"7 g  w2 A( ]7 h/ G
我是用Quartus II 電路圖接法
; j3 G+ m5 o0 L, t3 Z60:00(現在是00:00) →59:59→59:58
; m$ x  f6 `7 D+ X1 s7 L: ?
$ U4 y" |1 Y; k; |IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@  ~6 d& B: j1 }- r: d1 ?% z
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; / l2 z0 a! w! v* V6 e7 y
USE ieee.std_logic_1164.all;. D4 V% l/ x& Q9 t* O5 [( i
USE ieee.std_logic_unsigned.all;
9 M9 u) l- T) A4 I; VENTITY counter_backwards60_seg2 IS
6 k2 L# C  x' w4 l$ v9 T& t$ V5 c$ s        PORT(Clk        : IN  STD_LOGIC;         
3 j" s) h; k* X) w                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                * j" ^$ E  A4 J, e( m8 h  I4 f
END counter_backwards60_seg2;+ |5 `: w( s9 W0 y
ARCHITECTURE arc OF counter_backwards60_seg2 IS: g' Z. B0 M2 W8 m% a3 N* _
BEGIN$ y/ X  ~' n5 C4 S
  PROCESS (Clk)6 f  B+ Y. J2 [9 V" [$ T) t1 k
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
  D  ]. @) p7 B4 d+ ]# R     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   * h+ j$ V/ C) P) a1 W
  BEGIN         
0 M/ C9 p8 M! \* `       
8 @; G, X9 h8 J% I       IF (Clk'event AND Clk='1') THEN           * y3 n0 I% ]/ p9 \2 C; d3 q$ _
             7 b" b2 B, }$ |/ Y4 c
               IF imper0 >"0000" THEN imper0 := imper0-1;
( D5 h: p1 s2 d- E2 X! {* z0 k               ELSE imper0:="1001";  g3 ]+ u6 p4 G5 B" M7 p! f
               IF  imper1 >"0000" THEN imper1 := imper1-1;) B; ]- q; I/ `
               ELSE imper1:="0101";
                                    p* y+ G: j' Z/ h: d  y0 N' h
                    END IF;! Y$ u$ o$ x) L, u; p, b- m$ V
               END IF;
7 ]; v- A, w9 w             END IF;  : f3 j% u5 k  |' \4 ]7 z, |
         Q0 <= imper0; Q1 <= imper1;  ( [  T4 F! Y% ?7 k" o
   END PROCESS ;8 M8 b4 U9 P+ m/ F
END arc;
3 S' w1 E& J- Q, c以上我精簡了一些 也能跑模擬圖7 ]# G9 X. {( L8 s
但現在重點是我該怎寫60→59→58...
7 z  `4 _# u# V8 P初始值60要怎寫...: F6 B/ D. T) Y) U. U8 T4 v
是要多2個input 然後給他一開始的值?
" i% T" n1 C% x/ W/ o, E5 k但要怎寫啊@@...( [# K. i$ s# @" N
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
6 `# [: d# ^3 V; N( k7 g但請問 我需要一個另外程式; {* e& ?& L/ b; h4 O" z
去控制暫停開始和暫停
- y) D& Z, t5 ^# c6 tLIBRARY ieee; ' \! L9 @) _' ?  g" m$ Z
USE ieee.std_logic_1164.all;# |# e8 f; j4 d0 Q" P6 C$ I
USE ieee.std_logic_unsigned.all;% q5 J( A# v  d
ENTITY debounce_v IS; E1 x3 B! H- b9 |: L
        PORT(CLK,PB        : IN  STD_LOGIC;
+ O' ?# ^2 f6 T# y" C! K" {                 PULSE        : OUT  STD_LOGIC
# Z) M& b" j6 y( r                );
. O% i: h: G3 w- L& Y. H$ qEND debounce_v;- f7 u3 W' `' D: ]
ARCHITECTURE arc OF debounce_v IS) ~- o2 e8 z0 a4 B) t
SIGNAL imper : STD_LOGIC;
2 J6 A2 G8 o3 c9 G BEGIN3 l; H: H+ c+ i8 Q
  PROCESS (CLK)& P' |# }  c5 E9 m" ], S
     VARIABLE counter : integer range 0 to 49;' [! x& e$ y7 ]7 T4 q" c
  BEGIN$ v9 @2 R* _" I3 k' M( S- G( ^
   IF (CLK'event AND CLK='1') THEN
. @  ^. f! a2 u4 @: |# `          IF counter = "1" and (PB = '1') THEN imper <= '1';: X( l4 Z- p4 d: {
      ELSE counter := counter-1; imper <= '0';
# X: t. i/ M3 ~8 S' m* t      END IF;
( O$ ]1 B- o0 D9 e   END IF;2 Q6 m6 V2 k8 f2 l* I
         PULSE <= imper;   & }) }) R  r" P2 O. P3 u0 c* s4 v
   END PROCESS ;
# w( F1 c# W7 q6 {END arc;+ D6 T+ i- d  E; \" d, L0 U4 H* X
' [; i( {* ^9 \, X3 u
這是按一次減一次+ P9 J9 b* p/ S. o
想要按一下開始 按一下暫停$ n% Z# f7 `" E5 E, c

  S! h( Y0 Z# Aps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
1 X2 l8 E# p  ~( `3 D: l; W
! ^3 y0 @# d2 P# G5 S" R+ B" y2 V% F你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"- Y, S" h" W" t& E
有需要暫存器??& M2 t. n$ v1 y% F& W: K
那是震盪器→先接到開關→接到暫存器→計數器1 e- ^, U- l* v
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)* O0 J2 `9 o. M' t" F- \# F# D
     VARIABLE counter : integer range 0 to 49;
% A% T6 b" D8 Z" k2 f0 E& i3 k- _  BEGIN( M8 i0 r6 Z# ], q% |# s
   IF (CLK'event AND CLK='1') THEN
, Y7 f' g& J+ j/ W  f          IF counter = "1" and (PB = '1') THEN imper <= '1';( `8 Z" _7 f# L7 t) h( _4 H
      ELSE counter := counter-1; imper <= '0';
# ^5 B! f' k3 D4 z( L8 K      END IF;
3 q! Z; N4 a( w$ v" I能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
( a' f0 o$ K* }$ J6 p7 m. _$ A) p     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數# A+ N" c. P6 K" o* p
  BEGIN                   # T! A9 g( v0 A
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
8 Z- v5 M; Q7 o, G0 T( b          IF counter = "1" and (PB = '1') THEN imper <= '1';  
# u) s6 P$ r/ y& b7 w. _6 T" f                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1. h# w% I# Q* K3 D% m  H
9 b/ ~5 \( p% {8 h
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
, Q8 L! C0 [& t6 n      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您2 |  O* M/ Y! k$ `; E

2 w) O6 y0 }2 B6 H  d! u按鍵開關 第一次 on時,開始計時。# o7 p3 u6 a1 `, [5 w2 R8 Q" t
                 第二次 on時,停止計時。0 n- f% u) \, H8 F
                 第三次 on時,開始計時。. _; i4 V2 Z/ o7 L0 b+ V5 C4 \4 A/ J# z6 [

7 |+ u7 [) A; H6 G8 h這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
& X* b" k. s, X& B0 e/ A平行輸入 / 平行輸出
/ f3 c! }  A9 C# l2 W2 L平行輸入 / 串列輸出+ P# @" ]$ b& t7 d
串列輸入 / 平行輸出/ k+ w; M, H& j, k- C. i0 a% I# ?$ i  E
串列輸入 / 串列輸出, G; `7 A$ ^& D8 \+ V
哪一個啊@@...
, I, j& V+ l) D+ p5 l$ e4 u我都是看書自己學
0 T* l5 W  u" T; g所以都不會咩
* X" e- ]) b6 m9 h7 D) F拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!' v% J  Y! z2 H- `0 O
今天問老師  . m; Y# w' Y0 h, F. f3 b! V$ Q! Z
可是老師沒說到暫存器的東西
1 k1 I( J$ \# a反而是說 ; u6 c( b$ T5 l" z6 s* l
IF CLK'event AND CLK='1
( g( |& @( w2 A+ Ucounter := counter + 1 ;
0 [) O4 [' q( G* l: r! {( q
4 s0 {7 T6 U, c/ \  a4 ^+ ]9 N抓counter (0)   ----第一個腳位?!5 F7 c( i5 O) W+ q2 |- h
給counter位元多一點之類的5 ]  b6 b' @. f: o, R

* w2 B. \& S9 q8 J1 E) k& _$ [00  01   10   11
' J4 E/ r4 f: J* A最後腳位為0   ----Run+ |% w4 Z2 n9 h  L$ D* O
最後腳位為1   ----Stop- H: Q( X8 ]5 }8 B& G/ f+ n% |
1 {* H1 f1 }- u: O; j- G5 q5 y
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。' ]/ o: s7 Q3 y4 w* z. h* M
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
) T+ H3 A' a) Q$ Z; d跟你說原理你又不去想,要用你懂的畫圖的我又不會,
  Q' B+ r4 }: i8 g+ i- W/ ~$ H% S難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-23 03:07 AM , Processed in 0.189011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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