Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee; : ?- ?5 f9 g) p# S) {
USE ieee.std_logic_1164.all;/ h! P, b: O  B  @8 Q, C
USE ieee.std_logic_unsigned.all;
( n8 H: [$ m" H; s! UENTITY counter_backwards60_seg2 IS
! b6 w7 z: k( B/ j9 e0 u& D7 q        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
" H; I* p6 i! P                 Ring          : OUT STD_LOGIC;                         - r2 u! L" `# i/ K9 W3 q
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
. v" d$ X6 h1 REND counter_backwards60_seg2;
& |+ N9 @0 Y! \2 L# ^ARCHITECTURE arc OF counter_backwards60_seg2 IS
3 H4 [2 Y5 X4 X" J) t8 W BEGIN1 c6 r, h. w. W4 s  G. r
  PROCESS (Clk)
1 h; ^' b. Z+ b$ ^: Z$ B     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);( E+ ?  \8 k# P6 C
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);# i+ c9 x2 P% C
  BEGIN8 Q# e- e# R# \' U
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
+ m% K: |5 Y- p6 H        ELSE IF (Clk'event AND Clk='1') THEN $ p8 g9 U  [; l& @! ^. s: Y0 w: h
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
' X. {* K3 [8 ~0 A3 t            ELSIF Ena='1' THEN4 a: g5 w, u9 y$ T
               IF (imper0="1001" AND imper1="0101")THEN" `- h, j: g% A
                  imper0 :="1000"; . L- _' u& p5 A- ~6 _$ ^( B$ `
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
+ x" ?* @- g/ i4 w" g9 A6 R               ELSE imper0:="1001";
+ _+ L0 I( L0 V7 c% g2 q; ^1 K  I                    IF  imper1 >"0000" THEN imper1 := imper1-1;2 p+ t6 g4 A( ~4 G! i2 V5 N- J; a
                    ELSE imper1:="0101";                      ! v/ O/ s: @7 ]
                    END IF;. W! n7 u( a7 M# S% D% I
               END IF; 5 S$ \3 I3 a4 Z- @" N; E+ R9 ]
            END IF;
  P  s# j6 e! @9 p9 l/ M5 X        END IF;! z, W1 E- `" V* A* A( l
     END IF;                 ?1 r4 G+ c* c& {8 \
Q0 <= imper0; Q1 <= imper1;
6 p: w( Y: s/ ~- N8 r; `! FRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
4 O5 D2 h' j& b4 B* R5 _, E1 B+ f; \   END PROCESS ;
8 l/ J; Q8 s5 E" |END arc;

/ r) ?9 `# }& }: e0 x8 g
1 v1 |6 v9 ^+ `& I上面是我的倒數60秒程式
( ]: i% Y4 ?, N& [小弟不才" O+ Y7 |( Q+ T: M
不知道怎寫停止
2 d; `/ {; b" Y; y% D只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;) z' ~- D; K2 e* {
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
6 S$ ~: |. e( x1 O! \! i- U- K除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII4 t+ g+ g3 Z% h
跑一次的宣告是要放哪一行...?& t( m5 g2 q) v1 h) @
還有一個問題想請教
9 z( [; Z- N9 n8 e- [& N就是counter_backwards60_seg2是我的分鐘6 h3 G0 V5 y  r0 L6 ~
counter_backwards60_seg是我的秒8 ]; \7 M, Y4 _" o
現在就是秒那邊 10→9秒的時候Co也會進位
& J6 ?: s1 G9 C! V秒的個位數有延遲 所以導致10→9秒的Co會進位
/ _1 r( S  z" p4 b/ j1 D4 E程式分跟秒是依樣的 (Ring就是Co)
9 g4 M! d. ^* ^2 P! c4 B6 c2 }另外 分鐘怎從60開始
: P8 h( W; B$ b' X. m7 }因為現在我是00:00開始倒數; _' v7 j! u- I
我需要在counter_backwards60_seg2改哪邊?* Y) W6 H8 R7 d9 T6 `6 @

1 f5 k' f3 t, {  @  S, }) @1 _3 J& h6 g! v- L# v
我奇摩即時通:xt_9000
3 @2 F. n; Z; t0 V! Y希望有好心人幫幫忙( C3 F8 W/ x: r* S1 l: M
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,$ S" i; U# |7 a: Z( n
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
: k4 t& n* g+ l8 z我想問說
1 j4 f( K8 z" S+ @& |# \/ S怎從"60"開始倒數?
+ ^0 A# s5 f. k  H/ h60→59→58→57....→00
4 |: V6 i, w+ G: d' `  K- \+ ?. n  `- W& B因為我弄出來都是
/ v/ |# n1 D  k; N5 r& [, ]9 `( C00→59→58→57....→004 W, x& M- ^( F7 @& Q; k
, N4 d) U: Y3 F" E7 X4 z, c( S
; l4 o  C1 n. r/ D1 E
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。( ?* D) ], c8 c4 d0 ^+ s

9 G' R; D7 k3 O5 H1 v" g" c不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
( v; Y8 I6 S, H; k# M因為我要做60分鐘倒數: q# Y& C( C6 Q4 f% l  u
所以要60:00 →59:59→59:58. W* s1 F. U  U/ R8 }
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
  e% ?; v" A0 Z: x9 T. S     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
: S2 M4 M2 y9 c我是用Quartus II 電路圖接法7 ^) ]4 l9 [9 f; w; ^, \" t, w/ E
60:00(現在是00:00) →59:59→59:58
; }9 q1 F% j+ `3 J% r/ t
  J/ X4 P4 f& W( N+ \; `IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
+ b' u  j; x7 E" |9 I小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; . t2 x, h) K5 [0 _- U- l
USE ieee.std_logic_1164.all;
1 w5 g% E( z5 S7 eUSE ieee.std_logic_unsigned.all;% g, K/ T' D, K- _
ENTITY counter_backwards60_seg2 IS
% s5 b1 j7 V$ ^6 N) H        PORT(Clk        : IN  STD_LOGIC;         2 \7 g( Q5 F! o3 U9 e) F
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
+ t& u8 \+ t; q9 ?4 R) JEND counter_backwards60_seg2;; y; \9 ?* x, H/ J, J% b
ARCHITECTURE arc OF counter_backwards60_seg2 IS* A2 {! Y6 |9 P! B$ W+ Q
BEGIN
) [6 z5 A3 W  g6 s* f- E9 ^  PROCESS (Clk)& o6 `/ u" J7 {9 \. U' i. r
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
  U9 L* g6 _/ m% J     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   4 G3 y4 U4 e1 O, W9 g
  BEGIN          4 o* T; v2 C" ?7 t# P' B5 m  Q" k7 b
       
1 E: @+ A% M0 N       IF (Clk'event AND Clk='1') THEN           $ v* V( d/ U  F
             . S  E4 ^, q, D; c. d+ V0 ?; K
               IF imper0 >"0000" THEN imper0 := imper0-1;7 y  S' @: X8 U: I: |, u/ C: ~
               ELSE imper0:="1001";
! p0 v/ f6 N6 {5 p: {4 \2 C               IF  imper1 >"0000" THEN imper1 := imper1-1;
$ H* a% q" h( r/ _+ o               ELSE imper1:="0101";
                                  , z9 S1 R$ T/ a( D# v- b
                    END IF;
! u- ?* }# i% E- C; W, N  d% L               END IF; + r. h+ ]) U$ {
             END IF;  : ]' c  c. ~1 T; N  B" q6 n  m
         Q0 <= imper0; Q1 <= imper1;  ( c5 a2 i( Y6 V$ ^  z
   END PROCESS ;5 g0 B: @  C9 A" v7 V$ f
END arc;
  X" k8 e* K& e  `以上我精簡了一些 也能跑模擬圖, |0 d0 j* w( @& R1 y! Q- V
但現在重點是我該怎寫60→59→58...
( x8 X0 {3 m5 @7 s9 S; X. Q初始值60要怎寫...
. V$ @9 f) F" O是要多2個input 然後給他一開始的值?
5 t- a& i6 U% Q# [9 s  Z/ ~但要怎寫啊@@...6 l0 S* m3 T. H, l! s1 ~( k
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
& z4 q. c. \& B1 x但請問 我需要一個另外程式' p* Q  F+ [; y( e7 m; N
去控制暫停開始和暫停
2 \5 f- @; Q# J* P" i1 b) t* ULIBRARY ieee;
' q1 d: b6 C3 i0 q+ YUSE ieee.std_logic_1164.all;& t4 z6 O5 j- V9 x$ p
USE ieee.std_logic_unsigned.all;  W' @3 c( n1 y0 @* r$ n. [  D( j9 P
ENTITY debounce_v IS
0 S% \  l- L& U' J! J# t        PORT(CLK,PB        : IN  STD_LOGIC;
5 L2 \4 ]% y' T                 PULSE        : OUT  STD_LOGIC . c# v; z4 V1 _+ Y3 x
                );9 m* C, p  S' }$ N' V' f9 q
END debounce_v;
& k# h2 Q4 K! k. ^, K+ KARCHITECTURE arc OF debounce_v IS
3 ?" M4 f) V) O. ^7 S4 P SIGNAL imper : STD_LOGIC;
, g% @6 l7 R6 o BEGIN
: {& _8 k8 P( k+ W9 W+ z  PROCESS (CLK)
, ~# g" H8 E4 r& z2 F     VARIABLE counter : integer range 0 to 49;
  `* d% J; n. `' B  BEGIN
9 s( c6 U; b* r   IF (CLK'event AND CLK='1') THEN& T7 h( }1 E4 k; F) X( _# w
          IF counter = "1" and (PB = '1') THEN imper <= '1';9 s: s( j& [/ w
      ELSE counter := counter-1; imper <= '0';0 F2 r! a9 i% c: n3 m: m
      END IF;
# v2 Z1 l$ C" o5 [" L   END IF;, B! t" K3 i- a7 R% f/ G" @
         PULSE <= imper;   . E8 V$ D; y5 ^. t4 N0 q
   END PROCESS ;* J% A8 S) F( ?1 W, G
END arc;
5 ?! u& n2 T/ y. J& N
  v, }2 R3 C+ J$ O這是按一次減一次+ u2 }- n4 R! G! v  P$ S' k
想要按一下開始 按一下暫停  X6 C: W" T" u5 B

- o( k1 F" t, Y% r3 o, Sps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
; i% g% {* h! G: P, Y7 w( y" E0 y! R
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
, J' S& r# e; G" _6 @3 J% l& {有需要暫存器??
' p2 G" ?$ R1 Q: r" Y/ J9 c那是震盪器→先接到開關→接到暫存器→計數器
3 s8 b' C7 Q% L$ u% {, K9 a& k這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)) B- r9 v5 Q( {) e  N
     VARIABLE counter : integer range 0 to 49;) i" v; E% x! W. U3 ^
  BEGIN( a3 @6 k* g% |' {7 A  A( a& v
   IF (CLK'event AND CLK='1') THEN7 G/ I1 j) i% ~& k
          IF counter = "1" and (PB = '1') THEN imper <= '1';
( \3 K4 j6 |9 }1 k% d      ELSE counter := counter-1; imper <= '0';/ B6 v# f8 i3 q1 V/ t/ j  e
      END IF; " v# h7 m: F- @( H% t+ k; ]4 ~
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作# Z/ Z: W3 I5 U8 @5 [; J
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數' \6 u& t) |' Y  Y8 z3 @
  BEGIN                   ' A1 A9 U/ s  v
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
$ f7 a* z+ p4 s9 a' `. w          IF counter = "1" and (PB = '1') THEN imper <= '1';  
* n, U- x9 ^7 ]. T; F( ~( V0 V                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
* j/ L) E3 J- {9 K! i" O! c ( T# G/ w9 R% M: D: @. T
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0  E' I7 P4 d3 ~+ c
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您% _8 Z% Q4 Q0 O9 P+ e8 u- v
- t( \8 Z2 I* |& t) f% u4 R
按鍵開關 第一次 on時,開始計時。9 j$ W  X; y/ H1 t$ s# O3 _9 Q
                 第二次 on時,停止計時。% e3 A* g7 S/ z. X8 j0 w. W
                 第三次 on時,開始計時。7 S; W8 o. V3 P! E: s" `) f2 Q8 f

3 B! ]* J! O( Z/ S$ _這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
3 q! n0 t+ e+ |2 O" D. l平行輸入 / 平行輸出- z& t: q8 M" d: p5 i6 @
平行輸入 / 串列輸出5 l! E. T1 K& B7 B# B  e5 V* ^: F
串列輸入 / 平行輸出  K( h! g$ R9 ?: C8 S+ k
串列輸入 / 串列輸出
* s3 e8 |9 o$ V2 S. N( s哪一個啊@@...# ^3 q1 W6 w) x( b9 o. A) y0 U7 C
我都是看書自己學
2 Y* g4 ^% q7 E0 x: H! a! T所以都不會咩
( ]. v+ R* e7 d7 s# ]拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
! G1 O6 V+ L( p+ H9 ?- f% A4 {今天問老師  ! O6 }1 }* {9 @5 c/ i9 p$ Q
可是老師沒說到暫存器的東西
6 a8 Y/ Z5 h9 e. [4 G' M0 v反而是說
+ b! q/ c7 L6 Z, F( IIF CLK'event AND CLK='1
8 s6 F7 V( B- P2 i+ zcounter := counter + 1 ;
2 L# x( d7 W0 `7 k, {4 e! e1 w# q. k3 z4 y" i1 t
抓counter (0)   ----第一個腳位?!. g' d5 m5 J, Z+ I6 Y: u, t# W1 W
給counter位元多一點之類的" o+ @' ~7 q. U- X2 L5 i# A
  @: A) Y  y2 W7 k
00  01   10   11/ L+ {; L$ N3 b$ R4 T
最後腳位為0   ----Run" x, T" _1 a4 T  l
最後腳位為1   ----Stop" `- }+ g' N* i* p
' {! D% v2 H' V. x3 x  u: _
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
4 [# E1 e3 R8 W3 Z3 k: \0 J6 K至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
+ ]' y' c$ j, p! [) ~, W0 E跟你說原理你又不去想,要用你懂的畫圖的我又不會,# s4 b: O6 T7 r4 ]- A
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-2 01:11 AM , Processed in 0.143519 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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