Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
6 A" b8 q" p: J+ E5 L8 {USE ieee.std_logic_1164.all;: {7 }) {+ w6 i5 v
USE ieee.std_logic_unsigned.all;3 {# ~- J- M$ w$ v/ s% [
ENTITY counter_backwards60_seg2 IS
' y4 U, j/ f% o2 a" G6 ^! D        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;
; R* x# n5 e( H) G% f) Q0 \( R                 Ring          : OUT STD_LOGIC;                         
* g; n, [% T8 C8 F                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        5 Z3 S( P$ S0 T' y: q6 H
END counter_backwards60_seg2;
$ }3 E2 K! H- E) J9 N) j+ W4 vARCHITECTURE arc OF counter_backwards60_seg2 IS
( P5 v# v5 j. S/ s$ }6 f BEGIN& |$ p- ^9 @; s8 g
  PROCESS (Clk)9 x* i% N( w9 h4 q- P4 E
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
3 N  {+ p9 s" X5 ^2 f     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);' o  e! o( f( x( `7 Q
  BEGIN
( R& P1 ]4 N4 L8 e& W  L  k* W) N        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";; j: x' U4 k4 h- h. [
        ELSE IF (Clk'event AND Clk='1') THEN
( ?' i0 B+ B# X( }            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
! W6 K: F0 T9 o& V2 `            ELSIF Ena='1' THEN
$ `% _4 z+ |, M" w; w               IF (imper0="1001" AND imper1="0101")THEN
/ W& w' d9 s3 W5 a+ c                  imper0 :="1000"; ( r4 E( P# w: b, J
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
4 n" k0 ?* d: Y5 _* y$ I  U9 ]; t! W+ K  C               ELSE imper0:="1001";
9 E5 x, i1 d( _, V4 h+ i& T                    IF  imper1 >"0000" THEN imper1 := imper1-1;6 f' H6 t+ k. j0 V8 ]
                    ELSE imper1:="0101";                     
0 K! a  ^/ P! D" a4 `( X$ l$ P                    END IF;9 l" g  u& b% l* o# m7 z
               END IF; ' _$ |+ G6 g; U( ]* t/ j# _# C
            END IF;$ U5 u- A2 X* k
        END IF;* U+ L- C: u0 |5 E0 [2 o. W
     END IF;               4 Y" m4 ]! ]2 X0 `# D4 V
Q0 <= imper0; Q1 <= imper1; ; s6 n( L; x- u7 Z/ z# D5 N0 b3 L) 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));         
- \! J& Z% o" Q1 {   END PROCESS ;
2 B0 w  q# n4 iEND arc;
# h# f# N3 O; l

* x+ M  H# p. ?0 X& U上面是我的倒數60秒程式
! u! V# t) \6 ^/ w+ \# n' p( J- {7 D小弟不才' J5 E3 s+ {( J0 g3 q, t  ~& J2 j
不知道怎寫停止4 r, g$ X6 A: W' ?
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
# ]) f3 R+ _5 u% S! c) e: e7 }要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
: j+ Z. O: _; {: w/ s$ x3 e除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII* S: J1 X' E1 l$ N2 n& K# ^' K
跑一次的宣告是要放哪一行...?2 m  _$ l6 ?) j& ]
還有一個問題想請教
* {6 C8 x( ?% x9 v- g- x1 }8 L就是counter_backwards60_seg2是我的分鐘  M3 |$ \# T: g: ]
counter_backwards60_seg是我的秒
6 u8 |7 p6 n4 I7 ^現在就是秒那邊 10→9秒的時候Co也會進位. C0 ?9 q; m, s, H; k  R( }
秒的個位數有延遲 所以導致10→9秒的Co會進位
% S% [  P0 w8 O' S. y7 J* m' g程式分跟秒是依樣的 (Ring就是Co)
1 J& c/ h6 `, ~& j: A2 B9 ^4 ]另外 分鐘怎從60開始
6 f8 m" g6 _1 a& I# J因為現在我是00:00開始倒數# h; n* e7 c1 Z  n' u$ p+ W8 e
我需要在counter_backwards60_seg2改哪邊?, G% a; W7 e+ g$ a

  k* v* u/ l5 t8 g9 X7 F
' b& U4 Y4 p, S9 j$ B$ f# B/ W我奇摩即時通:xt_9000
0 B4 \2 k; F7 z. R3 I希望有好心人幫幫忙
0 Z# |% r9 q; L: ?+ ?( m懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,' m; C' i9 Z7 r! C# ]0 h  u
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答/ c, Z- `' D8 L8 T+ ?3 q! w) l* I
我想問說
; g# e( v6 Q: c: u& \& c怎從"60"開始倒數?
, @7 U; ^8 b. r) w9 E( f60→59→58→57....→00! I8 {" S! @% Y" d3 b: h( w
因為我弄出來都是
. w9 L7 e2 ?; l/ \00→59→58→57....→00
) T6 G: b0 H' I( \. R  ^# F, [/ V* G! [* N$ T3 D' ^( |

6 i# M: G: d0 y( v希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
0 k) k9 J% u8 c+ [& u: |+ k1 G9 r; Q: [( H) ~
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
, s" F. k% e8 J* Z9 n8 O因為我要做60分鐘倒數& ?# S- a% A9 @8 S
所以要60:00 →59:59→59:58# Z! \, Q4 L9 D1 m: m  v5 |
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
  v* i5 f8 h; c% g8 [' e; c     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"$ k$ m. N" {7 d- g
我是用Quartus II 電路圖接法
% {1 q/ N# K7 {! u( f$ q8 L% U60:00(現在是00:00) →59:59→59:58
$ e: B8 {- N7 J$ Z
( @, a/ H3 O7 Q4 \* @0 Y1 ^IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
) V+ V2 Q& ?; \小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
8 D6 o. @, c1 [& q2 i8 k% vUSE ieee.std_logic_1164.all;# T: @# V" H4 [/ c
USE ieee.std_logic_unsigned.all;
+ O( h; p/ Y/ Z+ G1 o3 k' n( OENTITY counter_backwards60_seg2 IS# h/ \. d6 U1 Q5 M( E
        PORT(Clk        : IN  STD_LOGIC;         
! l# E0 }+ h/ q/ M( x                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
, H6 R! Q' D/ X; W; BEND counter_backwards60_seg2;/ I  ^) B) t* m& j8 ]* m
ARCHITECTURE arc OF counter_backwards60_seg2 IS
/ W' J3 ^% ^# F1 G1 u/ [ BEGIN
" D; }+ I" p4 T1 K2 n, a% V& q  PROCESS (Clk)
- b4 t' a$ E2 L4 A2 l     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
4 i' ?7 I2 g/ p9 v% d" x( ], C     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
+ o6 D1 M  K& j) Y- F. F. u  BEGIN         
6 |+ S8 Q5 L) E# e       ( R7 V2 ]$ A$ o8 q( n# v2 K6 m
       IF (Clk'event AND Clk='1') THEN           
0 N0 c0 J2 R* @             0 r8 [4 G1 x. E
               IF imper0 >"0000" THEN imper0 := imper0-1;# G! Z1 o) W" F
               ELSE imper0:="1001";
" v/ V- D, K& ^; r5 R9 e. z               IF  imper1 >"0000" THEN imper1 := imper1-1;  o, @; h% s# j  B$ o
               ELSE imper1:="0101";
                                  8 V9 \  {2 T& K2 w9 m" T
                    END IF;
- E3 H* H! G* E; k1 f1 V( V               END IF;
/ V( M% p0 _. \2 [             END IF;  : _: k; c$ A. r
         Q0 <= imper0; Q1 <= imper1;  ( A1 e& Z7 l7 k& G1 K3 }& O% w
   END PROCESS ;  N' ]7 V3 l! ~, G+ C$ ?
END arc;( `- T" C4 d( C7 N" K7 z5 i$ n
以上我精簡了一些 也能跑模擬圖
  J5 o$ @: \, F* F- E- Y8 T3 K但現在重點是我該怎寫60→59→58...3 v7 Z+ |/ i' k) }% E7 G
初始值60要怎寫...
3 `) k/ w" p$ R4 B1 j是要多2個input 然後給他一開始的值?+ o: z  x) r0 }% V. B" ~) T  ~3 }( \
但要怎寫啊@@...! O" y2 v2 D, g5 q: A3 L! d
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"
! A* ]: W: r4 n, [1 T6 T9 Y但請問 我需要一個另外程式
6 S3 u0 H% L' _# k7 n4 I4 R1 g去控制暫停開始和暫停4 s( a1 g1 O5 v' b
LIBRARY ieee; ( T6 A0 a" r% L
USE ieee.std_logic_1164.all;
: l" L, i- L: mUSE ieee.std_logic_unsigned.all;
* u; N0 U/ n8 _2 YENTITY debounce_v IS/ q% l- P  {/ J; W: W6 p3 I+ s# V
        PORT(CLK,PB        : IN  STD_LOGIC;
! ~* H  s5 K* P$ p/ B2 Q$ _0 n. A0 \                 PULSE        : OUT  STD_LOGIC 5 {' E$ B  W* L4 |! r
                );
% V( S- t* o8 h# T1 OEND debounce_v;/ r2 h  o" d; h" Z" E
ARCHITECTURE arc OF debounce_v IS$ [! O5 U8 r9 `8 N* s2 z
SIGNAL imper : STD_LOGIC;
3 k  X! E* I+ R! `" p BEGIN9 _6 f3 P9 _1 G8 L$ J' s
  PROCESS (CLK)
8 \% m+ z( z+ {8 Q1 \. s" o     VARIABLE counter : integer range 0 to 49;
9 Q' W, z: u- R: v& W: p. a  BEGIN. k+ R: x) \; ?5 e; b+ w5 k
   IF (CLK'event AND CLK='1') THEN% F$ P% B/ H: q! E
          IF counter = "1" and (PB = '1') THEN imper <= '1';
- A4 G% I) g1 n5 {# t5 T3 R      ELSE counter := counter-1; imper <= '0';" i. j1 J0 m% p0 {( S5 Z
      END IF; 8 d! B4 R( i! {+ J
   END IF;+ D1 d% o7 v9 ]6 S$ w$ _
         PULSE <= imper;   ; c$ f1 W9 c3 V2 x- w& V: t$ \
   END PROCESS ;
& D" d. I( z, h$ T) N$ s9 {. bEND arc;; N6 n. R  }4 b* o/ ]1 a
- o5 K1 U$ J- F# \
這是按一次減一次, _: }' S5 q. B, W
想要按一下開始 按一下暫停
+ i% {' S) L# l6 ^8 s- a7 e& I$ W' X4 K6 ?& e
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
4 m5 B) [+ ^" V- K) u
  v; d! p7 p) [7 c你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@". @) n. e* }2 C
有需要暫存器??
: w, V4 ~5 m- q" z8 U% C那是震盪器→先接到開關→接到暫存器→計數器
/ x+ N; l/ Y% c這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)
0 h+ \( i$ c4 i0 }) e- v9 o     VARIABLE counter : integer range 0 to 49;: y- h  z- C) E; E& w/ e4 b
  BEGIN
" |3 Q2 m9 A( W5 J& u' K! y   IF (CLK'event AND CLK='1') THEN
5 p- [* }* }; ], n. b! D. v          IF counter = "1" and (PB = '1') THEN imper <= '1';
4 \/ U  \  b  T      ELSE counter := counter-1; imper <= '0';
: A$ m! v# }+ g' P( w' ?      END IF; ; Q3 z9 J  C2 p' }: ]3 I
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
  s: w  q$ o1 N! U! s. }' P( t     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
/ X0 W( z5 _3 y8 w  BEGIN                  
8 n4 X4 n3 r( s, B/ U1 q   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
" g( T2 u% U8 j/ ^          IF counter = "1" and (PB = '1') THEN imper <= '1';  
, }8 i: K) U* o. C! b2 i                -- 如果counter = "1" 和 (PB = '1')就把  imper設為14 Q7 w$ l, R9 j" E, ~# P( [+ H

. m6 j8 b( Z" K# P! ]      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0! p% E1 n& c. a( y
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
' T% y3 c, L5 b5 a5 _- U0 _  \( I6 P- j7 \. l+ T7 Y
按鍵開關 第一次 on時,開始計時。- x5 C4 Z2 t2 S9 f+ T4 t, u1 A
                 第二次 on時,停止計時。
, P% u% F0 O2 Y- W                 第三次 on時,開始計時。4 v' ?% s1 U5 M0 @

* H/ I5 m% n1 C+ l! a這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?& `$ h! w2 W* n+ E- [5 `5 P# z
平行輸入 / 平行輸出. y4 x- x. d# p) r: s3 p9 l
平行輸入 / 串列輸出; W" D' F; Z$ V9 E: Z% h; v$ m6 B6 b! q% o
串列輸入 / 平行輸出6 `' Z$ b6 q0 H% e+ U+ c
串列輸入 / 串列輸出
" P. c& K# I0 w% Z( M哪一個啊@@...
8 f  L! ]& R& r* _我都是看書自己學% z( a8 N8 H! {: _( E: k
所以都不會咩
+ V1 |. ]' _/ o+ T0 T3 O% @+ ^拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
& n6 l5 x. ~0 d今天問老師  
& O. a+ p0 c, q9 L  Z( f* h可是老師沒說到暫存器的東西
+ h. v$ ?; ~! s, A! t4 i, W+ n; ~反而是說
* F. A' z8 X, Y. h& d3 |IF CLK'event AND CLK='1
. D9 p# P2 m: a2 E9 I; D' K9 qcounter := counter + 1 ;
, {, j: ^: n, h  e( `( a5 L% A2 {8 W' K% Y
抓counter (0)   ----第一個腳位?!+ `/ S  a5 o6 Z+ z* C" z" E
給counter位元多一點之類的
; Z; }0 x, g. K5 q  r. m% q; N/ l" a( v! l9 X
00  01   10   11
+ ?3 N  l3 u  v- t2 j. ^! k9 A# o; ~最後腳位為0   ----Run6 R! ]- A+ E& }; b, y
最後腳位為1   ----Stop
: e+ l# t5 @( `+ a7 {/ h5 ~
4 C  J% H3 z5 L可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。6 w8 c+ |$ [1 K0 k4 f$ ~! n
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂," D# \) h8 s7 H. n1 F
跟你說原理你又不去想,要用你懂的畫圖的我又不會,- n7 ?/ Q! N* K
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-7 10:21 PM , Processed in 0.141518 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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