Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
* Z/ r1 D. J, JUSE ieee.std_logic_1164.all;" r5 @! j. ?" N' w
USE ieee.std_logic_unsigned.all;
7 u$ ?/ F! C- a9 A; C9 k! d& YENTITY counter_backwards60_seg2 IS
% c, X' d1 }! s# y' o* V* g        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;8 d0 X+ G$ F) h' W! S0 Y
                 Ring          : OUT STD_LOGIC;                         
" Q1 j# q5 T& O+ R                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                        * q$ }3 l2 E. g# x
END counter_backwards60_seg2;
/ j. W7 O$ D: o4 ~! w9 wARCHITECTURE arc OF counter_backwards60_seg2 IS
. {3 I8 A( t, F; v0 x9 i5 S/ m BEGIN1 v8 |2 a' t$ G9 F7 k
  PROCESS (Clk), s4 V: J- t) I" l3 T
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);# W2 M6 B+ s2 J
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
; `% ~) ]7 q  H  BEGIN
+ o9 z6 e! s% H, v        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
8 z+ k( ]8 N$ M. t% D; A1 \) C        ELSE IF (Clk'event AND Clk='1') THEN 3 F* n, p& W- `3 Q: t
            IF Load='0' THEN imper1:="0110"; imper0:="0000";                - H: R3 g/ `7 e
            ELSIF Ena='1' THEN
6 M" ~% U0 [# q' X               IF (imper0="1001" AND imper1="0101")THEN
. @6 f" G+ N( L7 F; [                  imper0 :="1000";
9 f1 \7 A( z4 U( E: T: R8 d- o               ELSIF imper0 >"0000" THEN imper0 := imper0-1;
& Z. x8 l2 F  e               ELSE imper0:="1001";
. t2 @' s, V9 |                    IF  imper1 >"0000" THEN imper1 := imper1-1;
! [7 K* _. ~" i! ^                    ELSE imper1:="0101";                     
  \1 s' f1 s% K                    END IF;& U- r$ K8 x  ?4 y" l
               END IF; 1 p, ]- v, r& M; S6 Z
            END IF;4 W+ a1 P, L' J  f3 t" G6 x
        END IF;
; M# D1 X# H. h8 n     END IF;               ' T' ^8 l+ j" v& W. I; \
Q0 <= imper0; Q1 <= imper1; ' e4 j( \( U5 q; b! T1 r+ D
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));         2 R5 X0 {7 F8 D) c/ G
   END PROCESS ;
+ X' Q9 f+ g$ X( t+ R+ V% fEND arc;

; w/ M& W" E8 ~: z& u
1 ]; o. e7 T3 N( j上面是我的倒數60秒程式
$ M0 m# h5 h/ C小弟不才
2 a3 u* ~5 L* I+ U不知道怎寫停止# b: Z1 d% t; Z# S: c
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
/ }  J6 D, f1 W+ ]要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,9 f7 \# G4 u* {; f& a& H
除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII# ]; l" M  P' ~5 y: B9 I+ u: ?
跑一次的宣告是要放哪一行...?
7 n8 X  }" i0 K( ^1 R6 E還有一個問題想請教) @3 \( F$ t1 u  J. |! \' K4 l* h# @
就是counter_backwards60_seg2是我的分鐘
2 T. a0 C* U; n) J* s! b1 t; |counter_backwards60_seg是我的秒
( J3 r3 {9 j. ^4 W現在就是秒那邊 10→9秒的時候Co也會進位2 E& h7 k9 M+ B5 D* W3 U' X
秒的個位數有延遲 所以導致10→9秒的Co會進位
) T) _+ b4 s! B# o& c0 e" `程式分跟秒是依樣的 (Ring就是Co)
" F8 n7 u& k$ Y! v4 b7 w另外 分鐘怎從60開始
6 m- c; [# z4 N- H( Z4 N因為現在我是00:00開始倒數
  `! g7 e9 ^8 s( J我需要在counter_backwards60_seg2改哪邊?0 X3 N; N# a% u& Q2 o

0 e+ ]) [2 G7 U( F( c4 d6 R; b9 a3 L& Q2 P
我奇摩即時通:xt_9000: P8 G9 c3 P  a2 p, Z4 d/ H
希望有好心人幫幫忙& S5 z; J1 V4 e
懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已," X0 j: t- Y$ J
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
) f/ L( D7 t/ U" F8 y- Y) r; ]我想問說
2 i3 m. t. Q% ?6 v怎從"60"開始倒數?! J# W# O$ D5 @
60→59→58→57....→00) d/ E9 ?4 M7 w6 Z. C1 I: v
因為我弄出來都是
  ~. G' S2 d( J6 V( C- D8 c00→59→58→57....→00
$ K( H" g: P/ N5 N# v2 F; D% b  x/ f! W4 C' [/ j
  `8 O( |1 i# s2 H( j+ h" H# O( A7 o
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。
; t  [) o' b5 _6 v; n% S5 J0 A' o, A. E+ M
/ f3 |% W2 [6 V9 l# z' D不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦
  v0 ^& d$ |9 E' Q1 |& l# Y因為我要做60分鐘倒數( \( s! O* S# Q+ f# E% e! c$ L
所以要60:00 →59:59→59:58
, G, H/ ?* E- u7 r5 c1 Y& y4 C7 \我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
6 V- T$ O/ j( L8 i1 p/ }     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"$ s2 D# E: E/ A5 Q* g& `
我是用Quartus II 電路圖接法
( N! q7 e8 B9 J6 A# L1 ]% m2 v60:00(現在是00:00) →59:59→59:588 x: z" c5 u  x% S; Y1 a

+ U$ E1 K. l4 \' n7 n2 HIF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@. Q/ i/ E% H% o. D1 n6 D
小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; 0 x' |7 I9 V- p* Y) ^
USE ieee.std_logic_1164.all;
; X& l$ R5 N  b$ ^7 u9 MUSE ieee.std_logic_unsigned.all;
: k8 `6 t. j' QENTITY counter_backwards60_seg2 IS
% u2 Y  ~6 ~. f- p& I! h        PORT(Clk        : IN  STD_LOGIC;         + i/ G$ z2 `. H
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;               
/ t8 d- J. `- R& f6 G0 h. FEND counter_backwards60_seg2;# N& w- n, H& K; e) s
ARCHITECTURE arc OF counter_backwards60_seg2 IS; h$ ]$ S! P% ]/ ~
BEGIN; B6 ~" m( f( X  v6 j6 F7 x6 z6 Q
  PROCESS (Clk)
0 W5 X9 C- Y. Q' `; P! J     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);% [! ^& n" x, P7 R# q
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
8 h2 X% [& ^8 i" W  BEGIN         
% |+ j" D+ h" k$ J2 m. d       
1 b# a( m# Q, S- p+ r$ ?) j       IF (Clk'event AND Clk='1') THEN           3 A) N# `9 H' E! {
            
- G* @) G$ E( g* N4 q7 J5 T* J3 s               IF imper0 >"0000" THEN imper0 := imper0-1;
! I- K, l$ j  _$ v               ELSE imper0:="1001";
- f* m! ^0 B) |4 c               IF  imper1 >"0000" THEN imper1 := imper1-1;
) a' @( t4 R& w# |! e3 ?# a9 C               ELSE imper1:="0101";
                                  ! M/ T" S6 G: n5 b& C
                    END IF;6 |( |  o; P+ R; ]% o9 h% [% H* }
               END IF;
, ~% e8 X0 p4 o$ W$ H             END IF;  
# ~) d8 b! U; r/ ]7 F& M( A  r8 B         Q0 <= imper0; Q1 <= imper1;  # ~0 E4 z( A6 I+ ?& Y
   END PROCESS ;( E2 o: g1 B0 H( p! X6 `7 f+ c
END arc;1 c# R9 E" |; q$ f/ g4 _  {
以上我精簡了一些 也能跑模擬圖1 p$ M8 t4 h/ K1 `: \
但現在重點是我該怎寫60→59→58...& _, O. T1 I8 ^3 W, }
初始值60要怎寫.... \( L2 [, w$ G( i- K) y: q
是要多2個input 然後給他一開始的值?" Q3 |  b! i& S. ^
但要怎寫啊@@...* N/ P) e( ~' z" }: h
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@": M8 m$ k! W4 T! r) j
但請問 我需要一個另外程式2 A8 w  @# y8 t; B) u- w, x: D: \
去控制暫停開始和暫停1 Y" l3 w* Y/ _# l9 v
LIBRARY ieee; 7 {4 x  u$ Y. d' j
USE ieee.std_logic_1164.all;" m2 g( b6 v7 Y/ g- _6 x
USE ieee.std_logic_unsigned.all;
4 M5 q8 U* e/ H) ~ENTITY debounce_v IS4 G* [9 w6 d8 t# \
        PORT(CLK,PB        : IN  STD_LOGIC;) q) I- R3 a2 W( d5 t
                 PULSE        : OUT  STD_LOGIC 3 S5 C9 X; d  Z5 T7 j8 m4 w& B
                );' ~, n1 [. R' o( b7 _" `
END debounce_v;
3 n& t3 e: j# u" WARCHITECTURE arc OF debounce_v IS( s9 _3 S: Q, a
SIGNAL imper : STD_LOGIC;
5 a% K& t1 _8 l5 \* c BEGIN& Q# S- @& ?+ a- p6 V$ {" U
  PROCESS (CLK)1 L( W/ e: C  c9 ~# ^" Y. |$ A- w
     VARIABLE counter : integer range 0 to 49;; u3 r1 E/ ~$ p" i; v
  BEGIN) M' D# e" Z" h2 `6 G
   IF (CLK'event AND CLK='1') THEN
3 G) y, w0 l- b) L          IF counter = "1" and (PB = '1') THEN imper <= '1';1 G* `6 O" v9 w
      ELSE counter := counter-1; imper <= '0';4 k7 N: `4 ~; Z0 X$ K
      END IF;
" q0 e7 ]* T3 F/ d7 r( u   END IF;: @- V1 v' U2 D' W: t
         PULSE <= imper;   8 a# s% H$ m$ l) e
   END PROCESS ;8 `! H. Q" ^! {- @  O$ L& S
END arc;& w! h- v" d3 @, Z2 V4 @9 [

; S3 U/ \$ f* F' I# p這是按一次減一次
- L" x# c% u. ~! G' k想要按一下開始 按一下暫停0 I  V6 ?% @& _0 g/ c& N

3 G* r' V( t7 p$ zps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。# G+ }/ b" G" e+ G
0 @+ q& i: ?9 \# P6 \
你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@". w- h3 \0 X; i% e9 B1 Y7 H) \* O
有需要暫存器??
  q- P5 D. k( `那是震盪器→先接到開關→接到暫存器→計數器
7 q4 }% R# w1 Z5 d這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)5 M, \, t% t# f- H  {$ {1 u
     VARIABLE counter : integer range 0 to 49;
9 n1 |" T6 B" |) v  BEGIN
+ I5 V- A* F4 @- O7 d8 E/ M" M   IF (CLK'event AND CLK='1') THEN  m. o4 i% N1 C
          IF counter = "1" and (PB = '1') THEN imper <= '1';, H. h* N: B: K9 K  M/ T  _
      ELSE counter := counter-1; imper <= '0';8 |+ m$ e- C% W, a2 v5 g/ C
      END IF; ! [  f$ m/ Y$ f. B
能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作( ^) k6 R6 V% u! L: a
     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數5 D6 o( }9 V0 i& ]8 q# ~
  BEGIN                  
  J  ]8 _2 f0 E* x& Y& a   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發) _( L9 D+ f: z5 g$ x0 Z) x6 @
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
2 m, J$ J# O( S                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
) L3 j3 o" O3 C4 \- Z   t$ ?' |$ L: n
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0
: u9 s/ W. I& Z% Q) l      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您* {- J% v2 J# |2 |) _4 h

, b! v5 u4 M" w+ [' ^0 H3 M) [按鍵開關 第一次 on時,開始計時。
2 n8 H) @4 E+ X! Z# X- \                 第二次 on時,停止計時。3 V  m5 a9 N3 G$ C- j
                 第三次 on時,開始計時。+ g( c% P; o+ j2 P& s6 ?( q" J

1 P& E) n$ s5 c' z這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
+ A9 b1 M; J' o$ I平行輸入 / 平行輸出
, q% M# ^% f' g2 F+ Q1 i. n平行輸入 / 串列輸出
) Y  P; V* l+ T' P9 z" r* |串列輸入 / 平行輸出# o; M' z# y. [, ]8 A
串列輸入 / 串列輸出- V8 c6 k8 k. I' H1 f( v9 j7 u+ j
哪一個啊@@...  `  F% @3 |$ U9 L2 T1 d/ a
我都是看書自己學
* j2 ^7 n3 H0 @# p$ @7 H1 z所以都不會咩  d3 A  b! j. b# A: C/ J2 C
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!
/ N: w: l, k" N& e& B今天問老師  
+ a. c! a0 N# U( B, Y( F8 l' `0 y8 ^可是老師沒說到暫存器的東西
5 e, c$ e/ u; Z2 C$ `- [7 Q反而是說 - O/ d2 B: F! G8 d9 c0 W
IF CLK'event AND CLK='11 x* R9 V" H4 `, K0 ~" K
counter := counter + 1 ; 6 Z) t% O$ T0 q3 x3 [" m$ N

: A1 t( l( [# A+ Z& n3 }抓counter (0)   ----第一個腳位?!7 {0 q- d3 j7 q* [/ _# K
給counter位元多一點之類的! P  A. t. Y9 v2 H5 ^& [( K" f
2 j9 n8 l$ S0 v8 m
00  01   10   117 |9 W5 k! v. b9 {
最後腳位為0   ----Run
1 X. J. Q# p5 |最後腳位為1   ----Stop+ y; M" y; Y0 Y

7 b- Y- g+ Q6 K+ t0 \1 w# C" u6 k可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
! G, j2 Y" B$ H5 ^至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,! t$ ~% B. {0 v! L3 S
跟你說原理你又不去想,要用你懂的畫圖的我又不會,# L# V, }- v5 w9 J1 \
難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 02:06 AM , Processed in 0.161520 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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