Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-18 22:06:27 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
此程式為一個每按一次TACT SW就會進行累加1的程式,並且LED亮度會每累加一次
2 L) ]9 J, l0 ~+ b, ]$ J  K就會增加,共8段亮度(0~7),此程式這些功能都可以了,但是會有開關彈跳的問題,
0 o& h  I7 W7 X* V' {希望能有高手幫我解決此問題/ b& Y6 N( ]' x" G% I5 z1 u
8 W' A# E6 c2 I7 x* S, e, @

' [* V; [: L) H" X4 @6 J- |4 flibrary ieee;2 Y0 Y4 {; O# t3 H# C* m0 W
use ieee.std_logic_1164.all;. \4 ^8 H( K, ^
use ieee.std_logic_arith.all;+ X+ t+ z# L* p. l$ X& p
use ieee.std_logic_unsigned.all;
2 g3 ]8 |3 d( U6 x
3 s' \8 L7 s9 ~& R- q# m8 Dentity pwm8 is Port (4 u3 m, m& J1 Y
    CLK : in std_logic;--clock 1KHZ
: N0 }8 _8 I( }- [* C    RST : in std_logic;--reset
& i  b( B4 i( z' D    SW  : in std_logic;--switch in
" ~: ]. J9 l4 l) i" \1 k    SEG7 : out std_logic_vector(6 downto 0));--8 r! o& G: ?9 l5 C9 J+ Q6 z; Y8 F
end pwm8;( I+ N) h9 o; x7 Y2 K5 p
+ B* w" Z& @/ K
architecture arch of pwm8 is
0 T$ ~) A1 H) T' j. p  d) D% a. {
signal  SWCNT : std_logic_vector(2 downto 0);
& A% n# V# z7 N" A. usignal  PWMCNT : std_logic_vector(2 downto 0);+ |1 w  b$ Q3 `! A$ s) }! n2 W; g: i9 ^
signal  DISP : std_logic;+ N- i7 @, x% p- P- l0 Q! a

. P( B& B# |  M. hbegin
; ]- A; e) B5 |# f# K) ]# O- N3 Q0 }! w$ |9 q& @
--toggle switch input counter5 \+ c  C" C8 y1 A4 U* M1 t
process(RST,SW). r; f# M' w. T% e2 O- _0 B
begin
7 ]; l6 S1 C/ ?! e& z3 `    if RST='1' then
- |1 y2 E6 {9 Z+ @# ~: l        SWCNT<="000";! X6 T5 K' W$ ^8 q8 C& `) |
    elsif rising_edge(SW) then' R, A+ l; N& M' @2 E
        SWCNT<=SWCNT+'1';
8 F# J' x3 a9 ~    end if;  ?8 y0 ~4 P. x! B$ \
end process;# D8 m- d4 |+ y% H. K
  S$ P# z- I6 g: }, r7 Z$ m
--pwm counter1 f2 P7 r1 @" ]) V( S
process(RST,CLK)
+ ?5 e& |# X" `2 u  N7 i- p- Tbegin: y) K3 Y. a# q/ F+ }: X& m: f1 t
    if RST='1' then
) D- Z$ \" U0 M$ b! h9 `7 R        PWMCNT<="000";. [$ i8 F) X6 T) o& y4 p( j4 A
        DISP<='0';
% x6 }2 K; q& k; u" W    elsif rising_edge(CLK) then
. ?) s# u- h  P5 I; z4 D        PWMCNT<=PWMCNT+'1';1 i3 x5 t. u& z" b+ P
        if (PWMCNT="111") then$ }: @, k7 v0 z
            DISP<='1';+ `1 ]! t, a1 E& }
        elsif (PWMCNT=SWCNT) then
  ]: u3 G8 X8 |8 v5 [* C            DISP<='0';. G! s- J, _: `* X9 W& H8 }
        end if;
1 i! |8 w( A: W$ |    end if;+ {! D9 O( T  H! }
end process;
& K: ?* k$ p1 C5 v; Y! d) ?0 [% }; i) g/ m& C# J
--7-segment display decoder
+ p% J% `7 R8 Y5 t+ G( fprocess(DISP,SWCNT)
3 J! r! n4 v) B4 q$ r3 J! Xvariable DISPEN : std_logic_vector(3 downto 0);
( N8 y4 l2 |4 G! o7 v- z( s3 Ibegin; k7 d4 r+ T" j9 b
    DISPEN := DISP SWCNT;  G  K$ I+ e; l+ \
    case DISPEN is --SEG7<="abcdefg") A2 H6 e" }# ~2 p- O% Y3 T8 x
        when "1000"=>SEG7<="1111110";
5 k6 K# ?# q/ ]6 m0 N! z        when "1001"=>SEG7<="0110000";
! t7 @& H  y4 q. H9 j$ {        when "1010"=>SEG7<="1101101";
$ ]4 L; k$ |3 M2 ~/ j8 Z        when "1011"=>SEG7<="1111001";: |. f; i4 I( u( L. M
        when "1100"=>SEG7<="0110011";
, a# t& [. C4 L% o' {# B        when "1101"=>SEG7<="1011011";2 O& v; l: j* m: O- p: O
        when "1110"=>SEG7<="1011111";
1 B8 G2 A7 Z5 q& u; W% D8 j# ]        when "1111"=>SEG7<="1110000";
# F5 e+ I4 `+ s) X. E7 H        when others=>SEG7<="0000000";
) t4 Y) f' w  w    end case;
, \. R% K9 f+ d" ^# iend process;
7 v7 k% q! p# e, Pend arch;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 08:15 PM , Processed in 0.112514 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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