Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] 此VHDL程式中的TACT SW要如何加才能防止開關彈跳

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-18 22:06:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此程式為一個每按一次TACT SW就會進行累加1的程式,並且LED亮度會每累加一次
7 f, [8 M+ Q8 v7 d; @, C就會增加,共8段亮度(0~7),此程式這些功能都可以了,但是會有開關彈跳的問題,( `5 v/ f: N* S# C, W" [
希望能有高手幫我解決此問題& o- l  Z& g0 E3 p1 p

. i. v; o$ A2 ^
! K3 c; V1 R7 ]# rlibrary ieee;: t; R- Z% o6 ^  ?2 g1 e" ]& Q
use ieee.std_logic_1164.all;
( r( I6 I8 M9 ^! `9 X! cuse ieee.std_logic_arith.all;: J+ A; A, Q" e2 X$ n9 P5 z
use ieee.std_logic_unsigned.all;
6 m' }* I+ s4 e
; m) S) D4 L9 w. V1 W+ zentity pwm8 is Port (0 F0 [- P4 F/ R8 r3 b2 B
    CLK : in std_logic;--clock 1KHZ
5 P9 a2 g4 a. i0 t' y/ U) e    RST : in std_logic;--reset
4 s4 m! B  M, g( x% y7 \6 }    SW  : in std_logic;--switch in- e& A3 A, f4 t* x1 f4 C- t& f
    SEG7 : out std_logic_vector(6 downto 0));--; E6 e- t/ r: Q) R6 P# e
end pwm8;
" N1 k! E2 Z* ?7 T. k
" |% X4 A0 Q  [* t, f8 ^. xarchitecture arch of pwm8 is0 J& A: E% _! T
9 g! S6 F2 [, n3 d" r$ B* k9 S
signal  SWCNT : std_logic_vector(2 downto 0);
0 N6 Z9 B% _! ]0 G* F1 r- N- psignal  PWMCNT : std_logic_vector(2 downto 0);- y5 ]5 e1 y( u3 o8 J
signal  DISP : std_logic;
0 G% k; v8 i: S' U
  m0 A+ W0 b9 c+ l5 Nbegin$ B; ?# ]8 {0 }2 k

) j$ Y& Q  d: o" M3 F--toggle switch input counter
  Q4 o) e5 |3 R7 P1 p+ b$ Oprocess(RST,SW)
& d6 \/ c  Y. ]$ k( `; _: Bbegin
5 h+ k( K9 m0 {" w- g! ~9 |# {- R    if RST='1' then9 w  \5 P+ E  W+ d( h  O& @/ ~
        SWCNT<="000";$ U: f! u; Y% `- }- f- y0 x: E
    elsif rising_edge(SW) then7 \8 P7 k6 b; l' x- F' ?
        SWCNT<=SWCNT+'1';
8 d! w6 o3 N% y$ s    end if;
) S1 F; [& x5 g0 G  kend process;
% G+ j2 r& w% J+ h' A7 g& P( r% I- N7 B* C+ t- q( }  B
--pwm counter) k$ P  i' h& W( F$ O8 t' d! r+ E' R& ^
process(RST,CLK)
3 G2 Y7 A( o0 V$ Y2 N* U0 J/ E8 n6 `begin
! j* F' Y) u! B* j    if RST='1' then
' f+ E5 h( n3 k4 Y! A8 B        PWMCNT<="000";
7 ~0 a+ d& b0 J% V$ w        DISP<='0';: I0 u, d2 v' c9 T0 W& E% o
    elsif rising_edge(CLK) then4 `% f4 J: e. ]! J  ?0 p* U
        PWMCNT<=PWMCNT+'1';+ A6 ^% D- @' z
        if (PWMCNT="111") then/ v' I) w$ H$ e/ y" E* P
            DISP<='1';8 X% B2 m7 ~& d+ H: c3 [! K6 d
        elsif (PWMCNT=SWCNT) then
- ^1 C5 ~/ z/ i            DISP<='0';
; @! }0 T' ~$ [, [( n. b        end if;
2 u1 i6 r/ S  M" y" s) u3 R+ z    end if;
+ `; n# z- ~8 a" ^1 h/ d% [end process;
* N0 D3 f" X4 j# V4 {
7 b% M( [* O1 v--7-segment display decoder6 J3 g1 ]5 G8 [+ A2 d& V2 w$ W+ x
process(DISP,SWCNT)6 ]) m8 D" }) |% t/ w$ k
variable DISPEN : std_logic_vector(3 downto 0);6 w" Q1 L1 L. D1 {, S
begin
( s8 }/ ~1 q4 y0 N    DISPEN := DISP SWCNT;2 I1 }4 r8 e+ _- S" l0 G
    case DISPEN is --SEG7<="abcdefg"
. q* W9 l; }* `6 P        when "1000"=>SEG7<="1111110";7 Y# ?' S6 Y6 q$ ~/ e, y: c3 V
        when "1001"=>SEG7<="0110000";
3 A9 W( P( _7 i        when "1010"=>SEG7<="1101101";: K; r: O, |; V: j  a
        when "1011"=>SEG7<="1111001";6 s, W$ Z: Y* N7 `, X! n( z8 e$ S
        when "1100"=>SEG7<="0110011";
0 m: M% b8 p7 q        when "1101"=>SEG7<="1011011";
1 d: z0 ?1 ^2 h) K# N        when "1110"=>SEG7<="1011111";" O; Q0 P/ e; Q3 l6 G4 p
        when "1111"=>SEG7<="1110000";
0 b' y8 g+ ^- {' `: m2 @' l. \" s        when others=>SEG7<="0000000";
, E2 q! L+ R! A% W' ]    end case;
9 M* |7 s% H9 U5 Y% e0 \5 z5 ~. z4 `end process;
( P& T  l3 b% {end arch;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-2-2 13:02:01 | 只看該作者
process(RST,SW)& |" I" {: n, [# A
begin
; }* a9 d2 o- [0 E% P/ o+ e    if RST='1' then  C5 z$ v$ c: }' X5 {1 K' `
        SWCNT<="000";
# k; Z7 I0 n; T" B- {    elsif rising_edge(SW) then
1 a9 _- f" b. O3 z& V* Y        SWCNT<=SWCNT+'1';; ?; Q' h% u! R/ k! o4 G; M
    end if;! G% E5 j6 Q! `0 J4 ~8 L
end process;  r0 V6 ]+ |! e* L/ u1 o( O1 W
將 SW 以 數ms~數十ms 的取樣率取到穩定的 High/Low 才當成上述的 clock 信號就可以解決
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-29 02:09 AM , Processed in 0.120015 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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