Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
9 G" M& n3 [, hUSE ieee.std_logic_1164.all;
: \# l# s% L' x3 zUSE ieee.std_logic_unsigned.all;
3 s; X/ p, G# e) U  j0 ~ENTITY counter_backwards60_seg2 IS/ l2 X/ D: k8 F) [8 S" K4 A
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;6 Q5 [% N  ~/ z3 l; X# w" c
                 Ring          : OUT STD_LOGIC;                         
4 `) S' K0 t6 c- {5 ]8 p8 D/ U3 p                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        7 N: S6 g! X+ {, D) \. B
END counter_backwards60_seg2;
7 j$ z. |# ^  T7 I2 D3 D1 gARCHITECTURE arc OF counter_backwards60_seg2 IS% I2 g  ]  E1 N" s
BEGIN
3 i1 d3 H* |; q% x2 H8 v  PROCESS (Clk)
; r; d6 `1 H2 Y' z' z" h     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
, b/ m. i) n. J; k' I     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);, t. N  F. J. _5 [( K) J% X
  BEGIN
! Q, j% H0 h! a; |8 Q- j% d        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";0 s( r+ T$ ]& F. L5 ]; b
        ELSE IF (Clk'event AND Clk='1') THEN 5 Q2 ~5 O  o: }- e" }! `* {. W4 L
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                6 X; {1 M7 s+ I+ g$ z7 H0 J/ H9 D
            ELSIF Ena='1' THEN  ?7 y5 Y9 P! Y; W8 w& o
               IF (imper0="1001" AND imper1="0101")THEN" @! B# V% r. |
                  imper0 :="1000"; 4 ]( S& k3 M! m( f. j* Y
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;, ?2 _# _4 |2 u' \5 g  H* P& I
               ELSE imper0:="1001";
; G2 [& L& e1 Q5 K% E                    IF  imper1 >"0000" THEN imper1 := imper1-1;9 n4 g+ j( {; N
                    ELSE imper1:="0101";                      7 o. L9 |7 g/ x, E: f7 O# g
                    END IF;
& w# l" u, J+ n; J* ?( N# U               END IF;
. w; ]& I7 {# c3 o            END IF;4 @, J" }% i  K7 f1 D
        END IF;
5 R8 |* G/ k$ c/ e% W     END IF;               
) {$ O3 Q; g2 F) z) {% f% dQ0 <= imper0; Q1 <= imper1;
7 q# v: ~) y. HRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         * w. B9 n7 y0 [+ n9 t/ q% c# f
   END PROCESS ;
2 ~, M5 B$ y" G3 @END arc;

; U4 E# ^9 K/ c( W/ ?' |
9 G: ~1 u1 l# s* R' @& a上面是我的倒數60秒程式
, U0 I" C- q+ M& U* j5 t小弟不才
- ]1 n2 z, ^2 w7 I8 R不知道怎寫停止
' R& ?& ~% t9 C- [! r# h只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
- K1 d3 i) v$ ~  F& \要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
) r: i1 @( e2 A( z5 ^' X除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
* _" ?7 L/ _$ |) c跑一次的宣告是要放哪一行...?3 K% @# r  q, m2 o& Y! M4 Y- u
還有一個問題想請教* K7 N0 X8 W" U, q
就是counter_backwards60_seg2是我的分鐘
4 t; H& h; B6 Ocounter_backwards60_seg是我的秒
! v4 b5 c! M5 ~2 y6 `4 p+ m: ]- m' Y現在就是秒那邊 10→9秒的時候Co也會進位
4 e+ `/ g; y' C秒的個位數有延遲 所以導致10→9秒的Co會進位2 Y( ^6 X$ A2 I+ U: l, A
程式分跟秒是依樣的 (Ring就是Co)2 }! r3 r# o% X2 v5 y2 o8 {
另外 分鐘怎從60開始
$ s8 V2 C3 O* n' T+ L* e$ j因為現在我是00:00開始倒數
9 ~: |- k& y  J1 i! x我需要在counter_backwards60_seg2改哪邊?0 T8 ], y+ c: r- O1 A) w2 Z. M: m

# H* x" X- K- K' P1 D: d1 d' B( O2 T- @0 F
我奇摩即時通:xt_90002 R5 f; _1 I& m; l
希望有好心人幫幫忙8 U: T: S+ m  G, L8 T4 V
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,) Y- \1 Q! Y) C4 L. b) f
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
. t% {2 j5 Y2 @6 f! I- ?4 u我想問說
  ?. h5 U& @9 I3 j) V4 v怎從"60"開始倒數?$ o1 k; _8 N* A% d5 ^
60→59→58→57....→00
. Q& z3 z7 Z- A9 p: F8 d% b因為我弄出來都是
! I' e. j  a0 W; v5 G% Q8 P( |00→59→58→57....→00! `+ n; w6 N: r9 s

6 h# @/ l$ _$ E. ]# u+ T7 M1 \$ U
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
+ U6 _( |6 v' V2 L  l# m3 t0 q3 X) k- Z: n2 W
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
4 }1 K0 F/ |" M& K/ b0 ?2 h因為我要做60分鐘倒數
9 O% C: b, ]  x2 o, {; U所以要60:00 →59:59→59:58
( Z) o) d$ B. [& X' o我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
- U) ?$ j4 l4 Z+ G* [  O, B3 Y     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
/ o+ T4 w4 e: E0 k" d我是用Quartus II 電路圖接法. H( M( {  N+ X
60:00(現在是00:00) →59:59→59:58& V, Z0 C! O1 k6 L
9 w& ^" L4 ?! u' `2 N
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
( U) T5 x% \* t0 |小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 0 C$ `* W* F- X" u0 W+ V
USE ieee.std_logic_1164.all;, z8 M- S$ L6 U0 Y0 I7 ~; W
USE ieee.std_logic_unsigned.all;' ~+ p' f/ r) f2 ~- C
ENTITY counter_backwards60_seg2 IS; ^, n$ n6 m! E1 U1 }# {
        PORT(Clk        : IN  STD_LOGIC;         * e# z% f, J0 @' o
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
+ F- [+ @3 j+ R  G8 N1 O6 ~5 w( Z3 bEND counter_backwards60_seg2;
; S5 x( _1 S; k- L) L* PARCHITECTURE arc OF counter_backwards60_seg2 IS1 Y0 K$ b; a+ c8 `4 k. n
BEGIN
% }( f4 h6 F2 E) D! V( K  PROCESS (Clk)
( s, E1 Q8 [) w     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
3 y4 E0 g) J$ h5 R) R& L/ |     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
# O6 g& C& |6 P: ]  BEGIN          , x+ l+ @' m6 U: ~4 G
       
: p5 z3 s! k$ x' F% E- _       IF (Clk'event AND Clk='1') THEN           
1 {9 V8 k6 D1 a3 E$ U: {             , \- W- c! w6 q2 V" q6 p" u
               IF imper0 >"0000" THEN imper0 := imper0-1;) f1 A9 h* b; B, c+ y8 n
               ELSE imper0:="1001";
( L/ |1 ]  e6 O) f: C               IF  imper1 >"0000" THEN imper1 := imper1-1;
8 X) k' s5 b9 d; |6 T               ELSE imper1:="0101";
                                  " o6 w% p& f7 V) z! Q! A
                    END IF;
+ h. m6 r6 ]8 W+ b$ i) r0 Y( [+ i               END IF;
  r8 D  B, L+ Q9 {7 @             END IF;  " q; X5 i' H0 W0 E( S
         Q0 <= imper0; Q1 <= imper1;  
7 p% |$ Y0 ]6 s& |9 ]2 Z( c' r   END PROCESS ;
) y$ ]8 g" B: R/ \+ N  q7 `) GEND arc;
8 X$ q1 M) y! w4 u4 w以上我精簡了一些 也能跑模擬圖; W, n9 T  t3 g2 @( n, W' |
但現在重點是我該怎寫60→59→58...
* G. u# f# K4 |9 U# j: K1 c. y5 v初始值60要怎寫...0 c6 B- y3 B: M  D
是要多2個input 然後給他一開始的值?2 M- L7 [1 Y" D
但要怎寫啊@@...* o6 M. i! A! v0 A5 f
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
+ k' S6 F( Q7 K4 X/ s% ~但請問 我需要一個另外程式8 z  r* L8 U- o  B  Z* w. H
去控制暫停開始和暫停
$ _- ~2 n6 ?# j4 A; i- _' F: hLIBRARY ieee;
7 Y5 `- h3 G; L9 X& F# VUSE ieee.std_logic_1164.all;; N$ F. s: J/ d' \# q+ ?' t
USE ieee.std_logic_unsigned.all;
  x0 v3 z& `, ^8 b. b" @( E, VENTITY debounce_v IS
, b) y* e1 D7 B7 Z        PORT(CLK,PB        : IN  STD_LOGIC;  u. @0 P1 P. |/ r. e1 d4 n
                 PULSE        : OUT  STD_LOGIC 0 w6 W  U( ~  x- j5 K
                );# K  r) c( X$ _; y* {4 c
END debounce_v;
6 M7 N2 p0 N! H3 iARCHITECTURE arc OF debounce_v IS+ i( p) v- @8 g1 F1 J& |
SIGNAL imper : STD_LOGIC;
- q6 ~/ N7 V: n BEGIN$ l) Q; u4 {' V' _
  PROCESS (CLK), t( u% m$ y8 t3 i5 h
     VARIABLE counter : integer range 0 to 49;8 V9 v/ V9 y  d
  BEGIN
9 _( i4 t. ~  ]9 u/ {. g* q8 U! j   IF (CLK'event AND CLK='1') THEN3 ^* d9 q% ]0 _; w6 b4 @6 j
          IF counter = "1" and (PB = '1') THEN imper <= '1';
/ ^, R% \, v* V3 p4 x  d: g: t) u      ELSE counter := counter-1; imper <= '0';- w  Z1 a" Z; k) L
      END IF;
( r7 g) d" k: G7 i' x# V   END IF;
3 b* q8 M. H* d# `& `6 ?         PULSE <= imper;   ' A/ B# U: f7 J! s' Z
   END PROCESS ;
. k$ v2 v) k9 i/ N+ I# KEND arc;: P8 J5 e! R2 k, w5 r1 j

6 r% y+ M; t$ Z. j這是按一次減一次- w, v% |  ]( S6 \
想要按一下開始 按一下暫停
/ w! Q8 ~* {/ D+ W/ P9 A/ y. x' T. h8 F$ ]9 ^& f, W) f
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。* L+ j4 k9 F1 u$ I+ \- T! k
7 n5 y( z; ]: z  P+ Q
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
" g# S- ~6 |  w7 V7 A, {4 O有需要暫存器??+ Y8 z* t* `& n! H* `/ |2 ?
那是震盪器→先接到開關→接到暫存器→計數器5 i# \9 f. o& s8 L2 D2 f
這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK); Z) e( H1 H+ a" I( r4 k
     VARIABLE counter : integer range 0 to 49;( C& d7 A1 O0 F' R1 Q6 B
  BEGIN
$ F4 R1 {4 l0 S  Z; y, O   IF (CLK'event AND CLK='1') THEN! L. q3 a+ R" v% Y. ^
          IF counter = "1" and (PB = '1') THEN imper <= '1';
. R/ z( J# }: `6 p+ C* P! l      ELSE counter := counter-1; imper <= '0';0 x, @  r, T3 Q  T. g- ?3 N  w
      END IF;
. N  T8 q0 Y4 _0 p! m+ y8 |能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作( P# ]' L1 [# v& V3 |: k5 P; [
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數; ]8 h, z( ?4 V
  BEGIN                     u$ m1 S, `! @2 p0 c. V
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發( F! O! i& \: i4 ?5 J
          IF counter = "1" and (PB = '1') THEN imper <= '1';  % M/ j4 X2 @2 h1 ]$ j
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
1 ?& w: W# b2 ]. p ' f5 Z# \; J6 l8 `
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為09 V8 o; r, E6 _; N) {
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
7 m1 y+ z" O. i7 d2 S# E7 n/ U) ]0 s
按鍵開關 第一次 on時,開始計時。" }; J, K  [9 R4 p2 j
                 第二次 on時,停止計時。
: {. L4 N# |1 j# K/ b; G                 第三次 on時,開始計時。
! T( M% O, P% u" J) |0 F) W1 Z8 b$ n, h# f+ A* S
這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
& |0 V8 S+ V/ k$ X6 j平行輸入 / 平行輸出7 f' s7 a) E: z) z
平行輸入 / 串列輸出
# b* n& V/ P; O串列輸入 / 平行輸出& r7 A9 p! O, Z7 V( D% g
串列輸入 / 串列輸出
. K6 o0 X& X6 ?9 h. N哪一個啊@@...
8 d4 M! g  [" u- f1 p2 q. t我都是看書自己學5 g. o: q* G8 r* N9 s2 ?
所以都不會咩
0 D$ q( W) d! p* d0 b3 d' e2 \拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!% W' G/ d4 x* X; g3 h. E# R$ \$ h, x
今天問老師  
3 Q+ V3 o% h8 O6 I2 ?% t可是老師沒說到暫存器的東西
( `* b8 R4 ]/ q3 V/ H! \+ y反而是說
" g: W/ `6 e# ?3 z# V+ f! ^0 u. [IF CLK'event AND CLK='1
! n) U' Q0 K  `counter := counter + 1 ; ; I+ X' m7 U( j$ J6 ]+ U7 ]
' J! S" B0 ^2 ?
抓counter (0)   ----第一個腳位?!/ k4 t0 d7 `! I+ D
給counter位元多一點之類的, S0 u  i1 f* ^. Q; }

) y7 d0 f. G3 L00  01   10   11
, F+ y0 s" z0 A1 ~最後腳位為0   ----Run5 }0 `8 z9 F0 z( R1 [0 C( d
最後腳位為1   ----Stop4 w: C. {/ I( m/ P5 I
) O8 z, L- l$ o3 d) m
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
, O- K. _/ R1 a5 r7 X! {$ p至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
, a' n7 t0 O0 b9 Z8 `跟你說原理你又不去想,要用你懂的畫圖的我又不會,2 V7 ^; @; T) P3 r6 F
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 03:15 PM , Processed in 0.133517 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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