Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
6 F8 A. r7 s6 mUSE ieee.std_logic_1164.all;% i9 A9 U! D1 M9 ?! R) M5 C5 \) [
USE ieee.std_logic_unsigned.all;
- L1 Q* I' M- ]2 K7 R* MENTITY counter_backwards60_seg2 IS0 A& T8 `2 o5 s# W7 J( z5 \
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;' |7 l. g5 K- r
                 Ring          : OUT STD_LOGIC;                         7 r+ U; a" |% f4 T
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        7 R4 O% q2 F6 |
END counter_backwards60_seg2;- Y7 ~( Y2 S, _* l0 u4 l' I
ARCHITECTURE arc OF counter_backwards60_seg2 IS2 `" {! W3 c# L9 x& U0 o3 n
BEGIN) k/ k6 k: u: _5 M& D+ ?# A& _! [
  PROCESS (Clk), M# ]( o- c) a$ @$ Q
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
7 J' j  R) i" q" h' j2 Z) |: [     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);, t% K8 M/ w8 [: Z
  BEGIN
2 }& V5 D- K) ]8 Q5 k4 c        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";1 s" E8 s: b9 o/ u
        ELSE IF (Clk'event AND Clk='1') THEN , m6 Y7 \7 P' S0 |% m* O; [+ |* W
            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
' I& _  h# w- W4 q            ELSIF Ena='1' THEN
+ _& O' |5 u) n2 Y1 Q+ K; m               IF (imper0="1001" AND imper1="0101")THEN
( G$ x" h' s& D6 O1 B$ \/ Z                  imper0 :="1000"; 2 V5 I9 T+ z' e9 `6 P% e! S
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;8 b& |5 m& O! }
               ELSE imper0:="1001";
- T: G& R0 J: n) b8 d: D/ N                    IF  imper1 >"0000" THEN imper1 := imper1-1;
+ j% ^! H4 Y( \$ N" Y: A. k                    ELSE imper1:="0101";                      8 e, `6 {: j( d. _  Z; e1 y
                    END IF;
4 o. L+ h1 y4 y               END IF; - Z% R- C: h* ?- T; ~4 [
            END IF;
; `7 m' \/ u: a8 v4 U5 i) p        END IF;
) P5 N$ J" ~$ x) p# H/ H     END IF;               . @; r  q; y4 N7 p8 o4 L2 G
Q0 <= imper0; Q1 <= imper1; 7 j! ?& U3 |4 a" {" a9 r
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));         
1 O9 u9 Y6 S" ^   END PROCESS ;
4 f, P' Q0 z" @, sEND arc;
1 W; e1 j: h8 X. r' G' R0 i+ n) S

3 P/ k  H* `+ n; `9 m. v上面是我的倒數60秒程式* l! N4 |; R- N8 {; F
小弟不才
: f  `) \# [# N不知道怎寫停止
' }7 h9 E" ^' F4 u7 ]只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;6 X) H/ p1 i& _3 p
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,, y0 o2 O. N" M
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
6 j! A3 P2 O2 h跑一次的宣告是要放哪一行...?
& ~3 n) M/ s+ F8 C還有一個問題想請教. k! k8 Y$ P4 J
就是counter_backwards60_seg2是我的分鐘+ _% Q0 M. N# i; z
counter_backwards60_seg是我的秒
) s$ Q  Z$ q) B現在就是秒那邊 10→9秒的時候Co也會進位1 p) {3 ], u5 e/ Q, w% f, M
秒的個位數有延遲 所以導致10→9秒的Co會進位
. r% H& V, p4 G/ G9 g程式分跟秒是依樣的 (Ring就是Co)% Z2 B# j; T: z: w
另外 分鐘怎從60開始
. ^$ n9 `+ M# h' D因為現在我是00:00開始倒數
  J0 Q$ c/ X; ~) E我需要在counter_backwards60_seg2改哪邊?
  K& @! w* G( a3 h1 s
# n) {! d6 [7 P+ o$ ]  e( r4 B: R6 k+ h* a
我奇摩即時通:xt_90005 y! Z6 w, s  {% v$ k( ?
希望有好心人幫幫忙) W, g& e& S' M
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
, f  h  Y+ a4 Q  G; t3 I* h! j看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答3 O9 h5 x! S$ _3 {5 D1 j8 j
我想問說
: {) u% `8 u) o/ a6 A怎從"60"開始倒數?
6 M) e/ y" h. |* ^+ Z& }2 k' m60→59→58→57....→00
, _. a3 l: G5 `% k  i3 i! y因為我弄出來都是- [$ k+ g3 v7 y+ C& G
00→59→58→57....→00
) ~( N* ^$ c9 N8 z9 |6 ~5 E* ~
! |9 ?' a) r" a) p1 b6 q& d0 M
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
! P1 l4 U% v! v9 o- o# o: N; d/ d) W( W: j
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
% S" C' v- E) o( J8 G8 T7 X; N# e因為我要做60分鐘倒數" x0 x5 @, ~8 D0 J' c2 Z
所以要60:00 →59:59→59:58
' S: z5 D# G1 B) T: Z1 v+ g我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then( X1 D/ ^( x; r9 Z
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
, y# Q! u- K9 p我是用Quartus II 電路圖接法2 Y, \" h8 [5 g, Y
60:00(現在是00:00) →59:59→59:58
) j8 ^/ O$ N% C
/ l2 j& X1 `- ?- b: |, vIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@0 T! }# Q! y7 V5 P) q
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 6 ^, |9 |- f8 @5 A' W+ ?' ]
USE ieee.std_logic_1164.all;9 D8 D+ ?6 @; O7 b9 p- {+ w! }
USE ieee.std_logic_unsigned.all;
; }. n( q# i2 D  h2 {ENTITY counter_backwards60_seg2 IS
1 Z' |5 i+ `3 k0 X, G. C8 p        PORT(Clk        : IN  STD_LOGIC;         
+ h9 ^' h. N3 k6 V3 V2 H                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                3 I0 y# l5 ]6 W$ m; n$ K
END counter_backwards60_seg2;
/ G- F) ?; p* e0 M7 K0 e- ~ARCHITECTURE arc OF counter_backwards60_seg2 IS
0 S0 g. ~% m' L% ^5 q6 K BEGIN
$ U, f9 |# `4 I5 Y( L  PROCESS (Clk)9 |8 |2 z- s5 |+ j8 x. V/ n5 j
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);" Q* e( s) B7 k$ O! Q
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
& U- O# z6 s+ o  BEGIN          / d, }* t) m' Q: ^0 b! l: R
       
: L8 m% X) O6 E& Y5 X& Z8 D6 [       IF (Clk'event AND Clk='1') THEN           , k/ }; Q6 b; v/ ?) @. F
            
) p7 A$ O0 [$ Q% @0 S/ p               IF imper0 >"0000" THEN imper0 := imper0-1;
; b. R% u' z1 V               ELSE imper0:="1001";5 ~. a9 c- X' i! h: F: O
               IF  imper1 >"0000" THEN imper1 := imper1-1;+ e/ F6 L* L# E$ z5 @2 ]# M* {0 b: N
               ELSE imper1:="0101";
                                  8 p: b. D$ {) D" m8 }1 L" b
                    END IF;
- e, o, F% n4 y" N5 n               END IF;
) B, @/ D% {4 f* R1 e             END IF;  & `9 j1 k0 M; u& Z8 X
         Q0 <= imper0; Q1 <= imper1;  
& I& y! v6 \: l2 I7 T  I   END PROCESS ;
  r0 F& K2 @: qEND arc;. c& @; p$ j9 z9 e0 d8 Q! D
以上我精簡了一些 也能跑模擬圖
% P' n; f& f3 ~4 ^但現在重點是我該怎寫60→59→58...
6 C5 h, w; z+ P, ]( q初始值60要怎寫...7 F$ T! w5 @5 b6 ^+ \- w
是要多2個input 然後給他一開始的值?# K+ A; @0 A5 s; Q
但要怎寫啊@@...
2 m1 ]/ A+ w! o# X' n4 d  d) N
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@": G7 r: n1 s0 r; t3 K2 d; ]
但請問 我需要一個另外程式
1 d) z, K" B( A# m2 v1 ?6 d/ m去控制暫停開始和暫停6 D: r4 r% A$ f7 d0 D
LIBRARY ieee; ) m. r6 I5 |4 D& z
USE ieee.std_logic_1164.all;3 }! j1 G3 |; M& t, d1 E- k
USE ieee.std_logic_unsigned.all;7 U( V& a9 u7 {2 S9 G% O( o
ENTITY debounce_v IS0 i* g  X9 d/ O& R0 J8 L, M
        PORT(CLK,PB        : IN  STD_LOGIC;+ s0 D' I, ^% p- y8 s$ U
                 PULSE        : OUT  STD_LOGIC
  H" C7 q0 x; |- u$ N                );
) A. H5 c# ^. p% ZEND debounce_v;
4 {. Q6 j( M/ X! R! H/ tARCHITECTURE arc OF debounce_v IS6 w0 t$ J+ K$ A# f
SIGNAL imper : STD_LOGIC;
* j4 I5 ]  K$ s- C BEGIN; E$ q, T+ l9 `1 `: c/ g/ t5 ]
  PROCESS (CLK)& t0 a; ~0 G5 ?$ K* ~/ N0 W3 F
     VARIABLE counter : integer range 0 to 49;  d3 A) n% l( r) m: Z9 x
  BEGIN* w# F/ u3 q& U9 }* `" H5 n
   IF (CLK'event AND CLK='1') THEN
5 a8 S% ^6 U' I" j! s) k8 C          IF counter = "1" and (PB = '1') THEN imper <= '1';
2 m! e) O8 m$ A2 q      ELSE counter := counter-1; imper <= '0';  c7 N: z$ V2 l, t
      END IF; ( i. B7 `  s, t: k0 A' _. @
   END IF;3 i6 ^( r" W; F6 z- T" u  H; X+ y
         PULSE <= imper;   
' j) Q! h4 d0 ?   END PROCESS ;
; G7 ^- w! v" {3 hEND arc;. n$ A2 s& N( n+ G2 i4 H% B$ Y

8 A9 a3 p3 }' X$ b2 ]/ z4 t- i( Q& ^! S這是按一次減一次, Y' u! C+ `: `2 n, y! w9 C
想要按一下開始 按一下暫停  T. |0 q6 H( }- a3 T
6 J' ?2 i- k, X1 @4 O8 I
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
+ x  N: E9 Z$ R6 o" E5 z9 F- g5 ]3 g6 k6 ]( ]& R5 {# h; z
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"2 q4 L) c" \: u2 ~' p8 S* S
有需要暫存器??
# O) _  M6 ~$ ]0 z4 V那是震盪器→先接到開關→接到暫存器→計數器
$ A( _5 W! Z& Y% x7 }8 B; T這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)5 C1 X/ t5 w  C* x; x$ ~  F
     VARIABLE counter : integer range 0 to 49;( D0 [% R( {1 i1 ~8 M% ^# D' n
  BEGIN
2 ]" ^' j# y- v% u   IF (CLK'event AND CLK='1') THEN
8 o  a. z5 t) F; e$ G( \          IF counter = "1" and (PB = '1') THEN imper <= '1';
8 N4 B* r2 a6 R( }% T" \5 P      ELSE counter := counter-1; imper <= '0';
+ y- T2 U. Y1 W, A: ?7 [; b& \9 a$ l      END IF;
) D% F; g3 `; ]3 d: _能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
+ x$ p) O* V$ k9 j4 L% ^8 _     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數' S# ^% _) c: K
  BEGIN                     M4 o2 F. b# T# G2 K
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
2 `6 B( K; j+ l; e0 q          IF counter = "1" and (PB = '1') THEN imper <= '1';  " A5 c9 @  v/ o4 m' F
                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1& i% I8 w9 s0 v+ U- n* H1 C
: z! C  B2 f5 O# e; J9 `6 p
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
& ~) q# \' a! M2 }      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您3 T8 a: A  y8 O7 K5 M$ `' l6 ^$ u
8 n; f2 c+ T: L& \5 ]0 V
按鍵開關 第一次 on時,開始計時。, L, g2 Q# m# p; i: B
                 第二次 on時,停止計時。
3 f9 M2 |  s% \  ^                 第三次 on時,開始計時。
# o0 L; k- m& r1 g
, F' c: s1 _& W1 N: `( X  _( L這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?3 Q5 j! r8 Y6 R' B3 p: L* A
平行輸入 / 平行輸出# O" \: B" m1 C, t( A
平行輸入 / 串列輸出
. W, s! s( t1 F0 T4 l3 k6 i, d. d串列輸入 / 平行輸出& k* s' V! m/ ^8 T
串列輸入 / 串列輸出
, h2 D2 ~% X0 n" T0 U6 X  t" j( Q哪一個啊@@...0 E+ X1 e$ L8 @0 t
我都是看書自己學
& n* R" P% I6 t/ U7 B所以都不會咩
  r. s5 m1 A2 N- m  [拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
5 y7 u5 X2 N. I4 [9 W, M: ^今天問老師  / K" j% E* q2 P
可是老師沒說到暫存器的東西' ]! ]* X4 w0 ^0 h
反而是說 $ I( G5 `5 Y# Y7 C
IF CLK'event AND CLK='13 g" ~1 `- [) ~5 ?- f
counter := counter + 1 ; * {9 s+ y) |1 _9 I+ ^1 D

% U: C. C" Q* ]- A2 b9 W( [抓counter (0)   ----第一個腳位?!' n9 ^4 z" P" Z9 i% O& c7 w& h; }' F
給counter位元多一點之類的' [& g0 v* D( g/ E7 U7 j; p

2 c9 d7 J9 l) m; _% Q- D00  01   10   11
9 n* [3 \$ O. m. n5 M- W8 {' v最後腳位為0   ----Run
# K9 N  {5 A: \! c; C1 A最後腳位為1   ----Stop
! v8 l8 ]& I5 z9 H+ J$ M! L2 }# [' M# z" _5 \" w( n0 C% R
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。( A8 c/ D' P& X" C, D( B
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,5 ^: z! w& t: B* C+ w' e% t( t
跟你說原理你又不去想,要用你懂的畫圖的我又不會,/ k/ h4 `4 n% F7 \: }1 h6 P' O
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 04:18 PM , Processed in 0.162021 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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