Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
* C/ f$ {) `! l) S6 j2 m4 c  PUSE ieee.std_logic_1164.all;
. {- r; `7 Z1 S. {3 {+ P( @% V7 \USE ieee.std_logic_unsigned.all;
$ i& G$ i2 B  |" P% Q' uENTITY counter_backwards60_seg2 IS$ ^* f3 \- F* N2 ~: k, ]
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;: t5 W) p1 t4 Z0 i
                 Ring          : OUT STD_LOGIC;                         7 _4 Y# ~2 b) O1 S) ]9 `
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
- w7 j, I7 {- w, qEND counter_backwards60_seg2;
. ~+ F, F+ L& `- p0 Y' z- UARCHITECTURE arc OF counter_backwards60_seg2 IS
- K& z4 c, F8 }4 X7 Y; ^ BEGIN
! R/ f' B+ m6 M) {; }  PROCESS (Clk)0 t0 \# O- m* N3 z
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
$ a* h1 a( q( h3 l* J* Q     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
2 e$ V9 i. I+ [% F2 |! B  BEGIN& X9 S9 @4 Z. P! `
        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";7 P0 F0 R+ O' E. e4 B. x
        ELSE IF (Clk'event AND Clk='1') THEN
; h* x& u! i9 E1 \4 q            IF Load='0' THEN imper1:="0110"; imper0:="0000";                8 P% A& f, w7 E7 h* W) Z: E
            ELSIF Ena='1' THEN
6 S! u9 L6 S; |( ?               IF (imper0="1001" AND imper1="0101")THEN
) r: \6 M: N: v, A5 f                  imper0 :="1000"; - a8 K8 i) ^% r) y% l
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
1 S  `/ W# E9 m& B3 ^               ELSE imper0:="1001";
& L: G8 W4 }, k+ e- l; }# \- n- N6 ]                    IF  imper1 >"0000" THEN imper1 := imper1-1;! D8 z+ K' l1 h0 q, m; g
                    ELSE imper1:="0101";                      1 D4 [& h# {8 g9 g
                    END IF;
* e! t' Z+ O, L# S3 d3 q6 T               END IF;
1 p6 E2 t( X1 L5 f3 ^  n            END IF;
, P' e/ }; K# `        END IF;( d- p/ B9 I) A7 Z* b$ T4 t7 H6 s/ M6 F
     END IF;               ! J7 f8 E  M; X1 i
Q0 <= imper0; Q1 <= imper1;
; z( q8 A0 v) D: aRing <= not(imper0(0) or imper0(1) or imper0(2) or imper0(3) or imper1(0) or imper1(1) or imper1(2) or imper1(3));         
% r: \+ |; K/ K0 V- A# H   END PROCESS ;2 f% r6 _* X+ t) `, k
END arc;
5 h# w, Z0 z& P2 }( d

2 E! m& m* _$ J0 R上面是我的倒數60秒程式% y) W7 ]" j1 o! n" n% r
小弟不才
4 T: y$ b3 ]6 S6 L5 v! K- x不知道怎寫停止
* R, ]5 d+ f( A. `/ R只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;; ^5 `, J8 o: j, ~
要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
) |$ c- d) A1 Q7 ~  b, W" ^除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
, \2 H% B+ [8 f" D5 ?跑一次的宣告是要放哪一行...?$ o# s6 @( X; N
還有一個問題想請教% b3 Q: _6 S. a; \+ s6 G  Y
就是counter_backwards60_seg2是我的分鐘! b2 g) ?6 Y3 v
counter_backwards60_seg是我的秒
# _  A# Y8 M- I. |3 k現在就是秒那邊 10→9秒的時候Co也會進位8 P5 l+ j2 i% p) p* D
秒的個位數有延遲 所以導致10→9秒的Co會進位# c& F% g( I  w6 U
程式分跟秒是依樣的 (Ring就是Co)4 r7 L, R" V0 D6 C# C# l
另外 分鐘怎從60開始! C' Z6 g: t" q. {
因為現在我是00:00開始倒數
6 o2 r7 J* t7 V$ U* d  h我需要在counter_backwards60_seg2改哪邊?& ?1 `) I: s0 \  f8 j
; K, B4 v( p* x' J2 H5 `3 o' j# z# ]
4 Y9 t1 u' }2 b: z0 i
我奇摩即時通:xt_9000  p% X' Y' s1 D0 u/ f; D1 B7 Q4 Q
希望有好心人幫幫忙2 `% h% |1 q4 F" U& G* f! n
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,
/ A( `4 @; V! P看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答% N' @1 G9 h, A+ |* Q* K9 R
我想問說. u5 t# |: E* L# b/ w
怎從"60"開始倒數?. A3 M6 y; V' Y  q
60→59→58→57....→00
  y+ w+ B/ w7 _1 x9 u' y* i; K2 K因為我弄出來都是- A2 O5 f: R  r6 q& P
00→59→58→57....→007 [; m# U0 y  F6 R6 w, L

; k3 y+ A9 T) w0 k1 O" {  ~+ f# ^4 V, B& C" K" F) h
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。- R2 ]6 T. Y+ p. a
  x- ], u" ^/ |3 B7 ~" I6 U
不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
6 S, A% L  P+ t( O  Z4 l因為我要做60分鐘倒數9 n' N, S- |5 I& U! G  Y: [$ ]
所以要60:00 →59:59→59:58
$ g+ C& @% Y8 [, N7 r: f我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then" ], J: T# e/ L( a
     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"
4 Y( o" v/ e3 l' t0 f! N我是用Quartus II 電路圖接法
8 N* T9 L5 \" D9 F! q5 c60:00(現在是00:00) →59:59→59:58
4 s4 P% _$ p* e5 J( L0 H
: G7 h: p0 O" Q4 ~& ?  oIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
6 m- L* m4 i- D% M5 ^小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee;
7 i0 E# M9 L' w1 ?. AUSE ieee.std_logic_1164.all;, N$ d5 b4 [/ j7 N
USE ieee.std_logic_unsigned.all;
+ s+ J- f$ g8 m2 ?9 uENTITY counter_backwards60_seg2 IS
4 K, ]8 J: R' u0 S) \        PORT(Clk        : IN  STD_LOGIC;           w$ e# k9 a: s
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
0 p. X# |1 E* d. i9 d0 fEND counter_backwards60_seg2;
+ w1 Y( B) Y, c3 ?9 G: Y# J9 KARCHITECTURE arc OF counter_backwards60_seg2 IS
. L; T) I4 y+ k- N0 P BEGIN, T) ^2 J" i+ `5 z
  PROCESS (Clk)( A' z& v* M" {( `  |  w- k
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);8 O/ w4 G! b( }' d
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   ) T( `7 o0 m+ h: F
  BEGIN          + e; e3 B0 V, {! X2 b: m
       
4 `$ x$ k( X4 D  N       IF (Clk'event AND Clk='1') THEN           
8 ?; s; i  M6 ~/ n            
, t! s5 O2 W/ Z0 I& L               IF imper0 >"0000" THEN imper0 := imper0-1;& c. v/ a2 d0 r
               ELSE imper0:="1001";
; ^7 }& o, @3 V' e' T( U               IF  imper1 >"0000" THEN imper1 := imper1-1;' |: T, u! ^0 T# \: d9 I' {+ N
               ELSE imper1:="0101";
                                  0 s0 l) }; q, @: z
                    END IF;, v& E  n+ R- Q# i2 L$ J5 R
               END IF; 2 r% W# c( [( b* m: c% ?
             END IF;  + Q- |3 c7 l/ b
         Q0 <= imper0; Q1 <= imper1;  5 w6 Z0 ^) f& L0 {) I; U1 a; t
   END PROCESS ;0 l% A8 {+ z+ n; s3 @4 Y5 `
END arc;/ X4 U/ A; H( k! P. _4 \+ h
以上我精簡了一些 也能跑模擬圖; x* m3 u6 {3 h- X1 R4 s
但現在重點是我該怎寫60→59→58...
2 E2 b2 M$ F% D' b9 i( q/ g初始值60要怎寫...
3 `  Y7 n- @4 d: J3 ~是要多2個input 然後給他一開始的值?7 _# c' r/ y8 ]
但要怎寫啊@@...: h4 o* l9 }- t7 ~* K7 {0 k( t% v
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"- g2 K; R" w1 W' I- }! p
但請問 我需要一個另外程式& T- i2 V8 J1 k& I
去控制暫停開始和暫停
/ I; o& M; a) S4 i9 qLIBRARY ieee; / @' a$ I  F. F* K, F
USE ieee.std_logic_1164.all;
% Z* b7 ]8 Z" HUSE ieee.std_logic_unsigned.all;, b! y' w0 \- V# J: a
ENTITY debounce_v IS& ]# G2 o# V$ z: \* ?1 z$ c# R, d
        PORT(CLK,PB        : IN  STD_LOGIC;9 ?3 D+ O7 d3 K$ b+ w4 @
                 PULSE        : OUT  STD_LOGIC : a# X+ d3 `6 }" ~
                );; R! \! b! [3 V7 Q  f. q" Z
END debounce_v;
* f1 c, K% ~. N2 ~: XARCHITECTURE arc OF debounce_v IS( B& q0 w) a5 f
SIGNAL imper : STD_LOGIC;- J( k6 ^$ \5 h) G" i6 i
BEGIN/ ~6 O! w; @/ n5 P
  PROCESS (CLK)
2 k& h) R; \/ {. k+ M     VARIABLE counter : integer range 0 to 49;
( ]1 v( c9 ?2 y  BEGIN
0 M0 S5 ^$ F6 F8 X* r3 G# a& F   IF (CLK'event AND CLK='1') THEN
, r5 n* A$ Q( d+ O9 b7 O          IF counter = "1" and (PB = '1') THEN imper <= '1';
* K& k7 {$ V1 s8 x% F. _7 l      ELSE counter := counter-1; imper <= '0';' M& \# D& C0 S
      END IF; 3 R# H; O- n. r  `) S
   END IF;
7 L9 q: H  p0 D5 L         PULSE <= imper;   4 A' [! P1 v1 i9 B8 a; G. J3 V6 L
   END PROCESS ;; M0 C3 V  P# D" J. I
END arc;- J' u5 T' R4 a

: A: ~: l4 I; I( `) O  w這是按一次減一次
/ P& p$ V3 E/ ^; e$ P想要按一下開始 按一下暫停
) b; l7 |( w& K2 e2 @+ q3 e1 V0 \; W; o
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。0 v4 P, R; Y2 b5 ]
4 A$ D7 A/ A! Z9 Q$ m! }. `
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"& d; a/ N$ F+ t6 `* D
有需要暫存器??  Q, ^! |9 E$ G/ e4 o! Y% s  y5 J  d
那是震盪器→先接到開關→接到暫存器→計數器
" j8 ~2 j( U7 U3 \2 Z這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)) ~& |, R$ Z8 K- R
     VARIABLE counter : integer range 0 to 49;
3 d+ R; B* O7 A" M: H& O  m  BEGIN
8 m2 r) c+ ~% d% B" j. A/ a   IF (CLK'event AND CLK='1') THEN
: w0 u; M' M8 ^. W' C8 e. W) x. c          IF counter = "1" and (PB = '1') THEN imper <= '1';# n: G; y* b( m- S* z& H
      ELSE counter := counter-1; imper <= '0';& n0 C/ o+ j1 K: M: z4 |
      END IF; ( N8 j, w; z* _7 @* O
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作+ J* B6 e8 t3 c8 ?  Y5 i
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數
6 m2 ]  a) T# t8 |; a  BEGIN                   + Y$ D! t- S- C9 g  a
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發
- `/ L+ @! i. E* P          IF counter = "1" and (PB = '1') THEN imper <= '1';  
) E% _! p/ T3 r( r) c6 ^& i3 ]1 y                -- 如果counter = "1" 和 (PB = '1')就把  imper設為16 v1 n, O) r: x0 D8 u
4 X: B+ d: M; y; ^! d% B
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
/ y6 f# M5 ^! [! p; s      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您7 X/ S  F9 }; z* w

: x: P0 Y2 s, U  }9 A9 W2 s% e按鍵開關 第一次 on時,開始計時。
7 S" B" S( m6 u/ d# i( }5 {; M  w1 d                 第二次 on時,停止計時。
9 Y/ c* j4 U6 `& P1 a: U  Q8 _                 第三次 on時,開始計時。
2 V2 y% B) `, u6 f& I; S/ D# i# ]5 ?
- c* |4 e5 m/ t$ V' C! K+ u這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
) l$ U3 s5 O( g* f平行輸入 / 平行輸出
4 \& N  N' K: ?" B1 B  o平行輸入 / 串列輸出8 k, `8 ^1 g; T8 q5 x
串列輸入 / 平行輸出: D# L3 G# U" W" `: C. d
串列輸入 / 串列輸出* ^$ T1 b5 J; M( s$ }
哪一個啊@@...6 o2 }8 N' }4 `& M" f
我都是看書自己學
4 A! B; \5 u- Y/ V1 ~所以都不會咩
5 o( P  b" X* k$ S. w  r8 D拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!" o" z9 o* C0 Q2 f0 o; T, }- X6 A, k
今天問老師  " J6 q8 p' p8 c: ]- A3 `3 X
可是老師沒說到暫存器的東西1 D0 k/ a6 ^- O
反而是說 3 Q! ]$ k* C. g
IF CLK'event AND CLK='1
: }  ?, V: r  Tcounter := counter + 1 ; - _5 m- s4 t$ O6 C0 N2 M( A4 P

8 i& f$ n7 n+ a9 t* h抓counter (0)   ----第一個腳位?!% m  U" p; c" P" L3 p9 C' V$ n
給counter位元多一點之類的& [: _* s0 O% P+ ]
3 I( x/ _+ T% x4 A/ H8 n: k
00  01   10   11
' Q! U! T$ I6 Z) L- E8 O最後腳位為0   ----Run: `! y  e' b  ~! k+ ^3 y( D9 o  a
最後腳位為1   ----Stop% g0 R1 ^- }9 }. A3 K# P' v
$ {6 Q; f: U8 _/ L' ^
可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。, ^- t8 e+ \3 I# j: o
至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
/ t- p; L7 \2 i; y. r0 R跟你說原理你又不去想,要用你懂的畫圖的我又不會,3 h8 g) Y. Y* _4 t" Q
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 12:04 PM , Processed in 0.147519 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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