Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2008-11-26 18:56:42 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
LIBRARY ieee;
' ]  Y& L$ p& q" i" j) G' f9 r& GUSE ieee.std_logic_1164.all;3 X# C# e4 B" y! a: A; J
USE ieee.std_logic_unsigned.all;! R9 U6 @+ o. _0 W' F5 O4 z# w9 X
ENTITY counter_backwards60_seg2 IS% p5 a% z: n( g
        PORT(Clrn,Load,Ena,Clk        : IN  STD_LOGIC;! j, n, ]/ h) D1 M/ o' i$ m
                 Ring          : OUT STD_LOGIC;                         
8 G7 A/ u/ {' r) {7 g                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                       
3 K+ e" n, W5 U" v3 O% W# oEND counter_backwards60_seg2;
- y# Z0 q5 Z$ j3 L3 [ARCHITECTURE arc OF counter_backwards60_seg2 IS# l7 U5 P! Z" c( _1 Y
BEGIN
  i% ^0 o; g. l4 t  PROCESS (Clk)1 R$ w- R# u# w. P: {9 L/ M' _
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);# g7 Z# }3 k. b6 B
     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);
; s5 c: L# E% f  ?  BEGIN
1 H. v7 J& y$ \2 e        IF Clrn='0' THEN  imper1 := "0110"; imper0 := "0000";
1 h" `* ?& A  _8 `$ g% i! ?        ELSE IF (Clk'event AND Clk='1') THEN
2 z& a, T" ^& ]0 |! m3 c8 @            IF Load='0' THEN imper1:="0110"; imper0:="0000";               
+ v( w3 H5 M3 Q  e: k            ELSIF Ena='1' THEN1 p4 g* ^. N5 t3 m0 h
               IF (imper0="1001" AND imper1="0101")THEN
0 G4 W$ j. e2 O' Q# r( v$ V  G3 @) \                  imper0 :="1000"; " q% H2 i9 M0 J. h+ {
               ELSIF imper0 >"0000" THEN imper0 := imper0-1;7 _- c/ d& H0 w* D; B5 L4 g' ?5 i7 {6 M
               ELSE imper0:="1001";+ b& `1 `  B; L% s. h
                    IF  imper1 >"0000" THEN imper1 := imper1-1;
" F% j0 D9 Z/ R% y: r. `                    ELSE imper1:="0101";                      ) }. `+ G" T1 a2 o8 ~
                    END IF;0 H8 ]6 j* {& b6 A
               END IF;
2 O$ q( t6 G. s            END IF;+ y* B: K- K! w& L4 f3 _
        END IF;, w8 P% W+ B% f; Z; _
     END IF;               
' h* b& m+ p2 _5 jQ0 <= imper0; Q1 <= imper1; 2 z! z2 @. ~2 E! `0 `' y
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));         
& a, T; o2 A. O$ e; H   END PROCESS ;
4 @0 E5 Z6 m' V. D2 N& R, \' bEND arc;
& K  ?, c3 W) Q+ i1 A
# z2 K, s* ^& B5 p+ u% ?( ]! l
上面是我的倒數60秒程式
" Q+ Q' @1 @$ R, s8 {0 F  s小弟不才& H3 e" N5 A6 |+ b0 A; r
不知道怎寫停止% ~+ X2 Y' M7 `) O0 R
只要數1次60就好
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2008-11-27 21:37:27 | 只看該作者
如果單純計數的話,宣告成整數型式比較好。 signal timer : integer range ;
- s/ c3 K% e& H2 E3 G要六十秒數一次的話,簡單點就 if timer = 0 then timer <= 0; 就好了,
% u) t  c9 |1 ^除非你有什用途 ,不然就這樣就好了。
3#
 樓主| 發表於 2008-11-28 17:05:24 | 只看該作者
我是使用QuartusII
0 B9 _7 e- `- L3 U: o跑一次的宣告是要放哪一行...?
: {8 I2 C5 l2 |0 g9 u還有一個問題想請教
+ c$ P% D6 k! l就是counter_backwards60_seg2是我的分鐘
2 F# ?0 @4 u0 k- \+ M2 hcounter_backwards60_seg是我的秒
0 l4 O3 ]0 X6 @1 H% x* }現在就是秒那邊 10→9秒的時候Co也會進位
4 c: S* z! N2 Q( p9 u秒的個位數有延遲 所以導致10→9秒的Co會進位
; t& U# e1 d$ |8 }* ^- d程式分跟秒是依樣的 (Ring就是Co)
' a% n7 r. V' c" Z另外 分鐘怎從60開始8 f# H% p4 v! P. T7 w
因為現在我是00:00開始倒數5 B; ]. D# a3 d2 g
我需要在counter_backwards60_seg2改哪邊?# c, a$ G: n! ^6 [  k

5 i% D. _* p9 F! d2 T. [8 i
# G" C7 {2 U' v) B- `我奇摩即時通:xt_9000
8 P# }1 J# w# D6 d5 o希望有好心人幫幫忙
! o* ?: N: z' ]1 g, {3 Y7 m7 t  v懵懂無知的大學生
4#
發表於 2008-11-30 01:13:51 | 只看該作者
剛學程式時寫的計數器,不過是上數的,基本上跟你要的下數差不多,只是反過來而已,0 z2 L* ?& u% S' s: M
看有沒有用可以參考一下。

本帖子中包含更多資源

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

x
5#
 樓主| 發表於 2008-12-5 17:10:55 | 只看該作者
感謝大大的回答
+ ~2 }* A6 I: d我想問說
% I' A: k4 H. \; w6 @& w* l5 w怎從"60"開始倒數?+ [1 I7 q6 ~" c
60→59→58→57....→00- W4 s* O  s5 f# }) z5 j7 C$ P
因為我弄出來都是
9 p0 P9 y+ U) v1 w8 \; I/ e6 G00→59→58→57....→00
" H) Y5 n$ L+ ]. x) x8 i2 U: n' p0 _2 p9 F3 F$ n7 Z
. k5 K2 y) s" k' U9 Z
希望有高手解一下疑惑
6#
發表於 2008-12-6 03:06:55 | 只看該作者
初始值要給六十呀,也就是rst 的地方不要給他00 ,給他60。5 K5 r7 _0 |, v7 j+ m0 H( p

4 C1 [) D3 ^, d2 _不過時鐘的話應該是給59才對,沒有從60在數回來的。
7#
 樓主| 發表於 2008-12-6 20:22:54 | 只看該作者
沒有啦' }! s  s( w+ W" `
因為我要做60分鐘倒數
$ ~3 r- z! f3 y8 o  w3 E' k所以要60:00 →59:59→59:583 Y" D7 Z8 v6 \# z5 i
我現在是00:00→59:59 @@"
8#
發表於 2008-12-7 15:58:20 | 只看該作者
if reset<='0' then
: z' R7 O2 o, \9 g+ U* h; G6 `     timer<=(others=>'0');  <<<  改這 60 00
9#
 樓主| 發表於 2008-12-7 19:00:33 | 只看該作者
我沒有設定res啊@@"4 M& F) L' Q" s# E& N
我是用Quartus II 電路圖接法
+ W: c0 e3 P! O' I, |& k, A- n! I60:00(現在是00:00) →59:59→59:58
2 Z( d# S+ c: S; n4 a6 c$ ]  _6 g% `$ D1 d% |8 w
IF Clrn='0'  或者 IF Load='0'  就停止動作了啊@@
* O) x: ]* y3 z" F( p3 B3 |小弟比較笨拙~"~
10#
 樓主| 發表於 2008-12-8 01:00:37 | 只看該作者
LIBRARY ieee; ' n- R  Y+ b, U
USE ieee.std_logic_1164.all;/ i$ ^. E' |6 x' a$ C/ w+ B% R
USE ieee.std_logic_unsigned.all;
4 _1 F5 J: N$ K  u1 SENTITY counter_backwards60_seg2 IS
/ F/ j& b  A$ [5 Z7 y  z        PORT(Clk        : IN  STD_LOGIC;         & E) R- g; r# |) E7 D
                 Q0,Q1         : OUT STD_LOGIC_VECTOR(3 downto 0)) ;                8 q3 u7 g/ P9 V/ t9 z
END counter_backwards60_seg2;& I0 m' y, Z& g# z/ }) s. V7 N$ ?
ARCHITECTURE arc OF counter_backwards60_seg2 IS
' [& o5 N5 h; ?' A, e* R6 m BEGIN
" z( c2 |- C# \. Y9 O  PROCESS (Clk)! Q+ m. V% t7 Z  t! Y
     VARIABLE imper0 :STD_LOGIC_VECTOR(3 downto 0);
; N# l" k  ?' L' B8 Q8 ^     VARIABLE imper1 :STD_LOGIC_VECTOR(3 downto 0);   
/ N. ?& u3 w& M2 X  BEGIN         
! |2 i7 h( y' _0 q1 P       0 G- n; K; D; O( Z$ }; l- @1 C
       IF (Clk'event AND Clk='1') THEN           6 t+ F" F0 @0 o; d
             ) \8 {9 b9 B7 t8 o
               IF imper0 >"0000" THEN imper0 := imper0-1;
& [. G! {  p( K: t0 B+ L5 k               ELSE imper0:="1001";3 |; {# V' s* g6 v! X% ?
               IF  imper1 >"0000" THEN imper1 := imper1-1;
: r# j3 Z$ e1 h) i! N               ELSE imper1:="0101";
                                  4 F0 K" Z8 _' \3 @) i$ E  M
                    END IF;  }0 C: P) K1 P) K2 H& l$ j4 J
               END IF; / e& y+ o. d. x( F% v' V) _4 d
             END IF;  : L* w) b( P9 R. P* g
         Q0 <= imper0; Q1 <= imper1;  & }3 g- o! ~5 v( H8 N! G8 I
   END PROCESS ;
: |7 M$ V0 h- L7 r. `END arc;& U1 o) {8 G6 z! n5 N+ J
以上我精簡了一些 也能跑模擬圖- V2 y; \. t2 i# D* Q
但現在重點是我該怎寫60→59→58...
4 j$ l1 Q7 W" l2 t% a6 N8 [初始值60要怎寫...
- _3 C. S9 u8 d" }是要多2個input 然後給他一開始的值?
* U  C' N; R1 S/ O8 E但要怎寫啊@@...
7 @. Q( [" g' m. x  Q& s
11#
 樓主| 發表於 2008-12-8 21:32:32 | 只看該作者
以上問題已經解決@@"- _# p% i! U+ o
但請問 我需要一個另外程式
3 [6 J( o3 x) a+ Y去控制暫停開始和暫停
# c" Y- m1 c$ K3 }LIBRARY ieee;
7 p% U! v0 B# U$ RUSE ieee.std_logic_1164.all;7 e, `9 s2 I# ]" ?2 `8 R0 V& y
USE ieee.std_logic_unsigned.all;
" n, e( F2 s5 k% `  [ENTITY debounce_v IS
0 U& n4 |9 d0 `  D( \; C        PORT(CLK,PB        : IN  STD_LOGIC;
4 F9 @2 s% C3 Q5 Q8 x                 PULSE        : OUT  STD_LOGIC
2 \! {, _& o. L, R                );. X' O3 A$ ~1 {' J, }8 X
END debounce_v;1 T. c2 c5 k  J  R& y0 e" R5 m6 F
ARCHITECTURE arc OF debounce_v IS4 ^3 G8 u( z4 p7 d! r
SIGNAL imper : STD_LOGIC;
8 ^4 I, n) v  E, V9 s# f BEGIN
9 _  h& [/ d2 {  ]+ t  PROCESS (CLK)7 ?& h6 O* _9 p, y9 @
     VARIABLE counter : integer range 0 to 49;- G6 W3 F5 \* b
  BEGIN
  D/ |: T/ C: P% J   IF (CLK'event AND CLK='1') THEN
  G$ i6 b2 N* \- l# u. }) `) p          IF counter = "1" and (PB = '1') THEN imper <= '1';' ^, o! a( ^; G: K; v+ C3 Y
      ELSE counter := counter-1; imper <= '0';' S- {; g3 R+ A4 R
      END IF;
, L" O# j8 s0 k# ~+ b9 o( N/ V   END IF;8 N; Q# i; U6 f% ^, q8 v
         PULSE <= imper;   ! F: `" c7 m" I$ ^
   END PROCESS ;
$ [0 E# s& J1 L# I6 s2 w* A# jEND arc;& d7 |: g$ q/ {

+ V, l1 J. X' D' ^" L這是按一次減一次% w9 F2 _" ^* G1 _) m7 Y6 I
想要按一下開始 按一下暫停' |) u# p9 @3 l: i; ~
- i, r, O' p* [
ps.轉自全華圖書
12#
發表於 2008-12-9 09:39:00 | 只看該作者
Quartus II 電路圖接法 我不會也,程式寫法就懂。
9 O/ m: `  s* }7 ]/ G$ ^
3 _# K7 f# x' S3 F2 i你就建一個按鍵 跟上面的一樣,只是還要做一個暫存器,=0 就跑,= 1就停。
13#
 樓主| 發表於 2008-12-11 20:38:03 | 只看該作者
@@"
9 y* I2 d/ a4 \) k有需要暫存器??- W  O0 O$ L, z6 Q
那是震盪器→先接到開關→接到暫存器→計數器
7 }  |9 J' {  H$ @& A# w這是樣嗎?
14#
 樓主| 發表於 2008-12-12 22:23:39 | 只看該作者
PROCESS (CLK)! U" t1 K; L. E: K% `6 D$ p
     VARIABLE counter : integer range 0 to 49;+ A+ L/ ^7 }' w8 O, x( J
  BEGIN! X8 |. x1 Z* W7 D
   IF (CLK'event AND CLK='1') THEN
! w" [% [7 i  e          IF counter = "1" and (PB = '1') THEN imper <= '1';0 Q3 c, B( X* h: Y
      ELSE counter := counter-1; imper <= '0';% Q$ x' ^4 [% g5 X+ W$ @( L: A
      END IF;
4 v' e. @+ M6 G/ E$ G7 R; G9 a! Z能幫我解釋一下這幾行是什麼意思嗎?
15#
發表於 2008-12-14 21:56:42 | 只看該作者
PROCESS (CLK) -- 有些書翻成敏感列,如果clk 的狀態有改變的話就重做以下動作
% Z0 ]2 {" m7 f  X" ~     VARIABLE counter : integer range 0 to 49;  -- 把counter設成 0 到49 的整數- n& \$ ^# n9 x# z
  BEGIN                   8 @, e* i' r9 A  u# ^  P6 L* C
   IF (CLK'event AND CLK='1') THEN  -- 如果clk 正緣觸發% B  y" g5 F$ S+ ?& C) w$ M+ f- D
          IF counter = "1" and (PB = '1') THEN imper <= '1';  
( `, }1 I1 @! a0 b0 \9 S. @+ Y1 z                -- 如果counter = "1" 和 (PB = '1')就把  imper設為1
( l* s2 W" i% o0 _# p* \ ; A+ B, D% p  X6 J, H3 G
      ELSE counter := counter-1; imper <= '0'; --不然的話counter := counter-1; imper 為0) p  ?4 U2 V6 E6 R' z6 i
      END IF;
16#
 樓主| 發表於 2008-12-18 19:44:48 | 只看該作者
spring69393 大大感謝您
6 \9 O! q7 [; R( E
6 y, `; W8 f- F* ?7 j* w按鍵開關 第一次 on時,開始計時。4 c% _: b) Z1 _  O% J& B- y! ~3 F; i
                 第二次 on時,停止計時。2 _* m0 {8 o- c- R9 [
                 第三次 on時,開始計時。
& m1 Q  p: E- ~2 M$ p6 b6 X" X- B
: V2 ]( j9 d; U5 Y. u這有哪位大大能幫忙@@
17#
發表於 2008-12-21 12:53:11 | 只看該作者
你就判斷暫存器是 高電位還低電位不就好了,一個計數一個停止呀,不是很簡單嗎@"@
18#
 樓主| 發表於 2008-12-22 21:21:19 | 只看該作者
是移位暫存器嗎?
6 o- I, S8 h  K$ p" V平行輸入 / 平行輸出2 Y' V9 Q! M& x! P0 u
平行輸入 / 串列輸出0 M4 g7 _+ H& Y6 C9 e8 v+ i6 t
串列輸入 / 平行輸出
& c5 U- ]4 K% G: E% K" q串列輸入 / 串列輸出
; C5 Z5 h5 J$ C+ B3 r# B5 ^哪一個啊@@...
5 A% M. {, _+ w$ n5 s: @: l我都是看書自己學
: w; C% w1 j5 I+ c2 t. l: e所以都不會咩# h: T/ P2 S, h# }. v, Z2 w6 o; s
拜託 幫幫忙
19#
 樓主| 發表於 2008-12-24 20:18:04 | 只看該作者
真的有要用到暫存器?!& a0 Y- j: M6 U# h6 v; b5 l
今天問老師  
) k0 d5 A, m6 \0 J可是老師沒說到暫存器的東西
! V4 F2 Y0 |& r7 G反而是說
  X8 [; c/ Z" H3 D# O, X- O* d) vIF CLK'event AND CLK='1
( u# w2 m7 r( X, m; Mcounter := counter + 1 ;
( I) M. d1 I4 A8 o& E" T- R% i
( H7 q; X! `% o6 u- q5 D抓counter (0)   ----第一個腳位?!
" G9 I6 A+ l1 ^, ]( t, Q給counter位元多一點之類的
% x/ Y2 n3 C/ A; _- A0 a" [# u- X% ^9 t  f7 Z* E5 U
00  01   10   11: O4 ~! C1 y) Q+ R1 }) q+ V9 Z
最後腳位為0   ----Run
1 k' q1 R5 A5 O$ m7 R3 ?1 f: z! W最後腳位為1   ----Stop, v' h* @9 \% f( t# L0 D

3 o  z4 V1 e( D# y# J可是要怎弄勒@@
20#
發表於 2008-12-25 20:12:58 | 只看該作者
你說的是自動變速,跟你的要求的開關功能根本不一樣。
7 ~, z& c" l& e; I  E! `至於怎麼做我也不知怎樣跟你說,給你程式你又看不懂,
( z' X2 G% b5 F3 n+ w跟你說原理你又不去想,要用你懂的畫圖的我又不會,
8 e' z+ m, _* t3 x: H* D) Q- K$ D難解了!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 04:33 PM , Processed in 0.146019 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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