Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-1-18 22:06:27 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
此程式為一個每按一次TACT SW就會進行累加1的程式,並且LED亮度會每累加一次, K, ], u7 M, L8 Z7 H% u
就會增加,共8段亮度(0~7),此程式這些功能都可以了,但是會有開關彈跳的問題,- G/ R+ J: t; @
希望能有高手幫我解決此問題
- v: [' A& \3 w0 Z( y
5 a0 C8 d% B7 T2 J( H! w% O, w, g* m2 F3 Y4 e  Z* T3 U
library ieee;
' U; Y5 A! f8 z6 |+ i7 i/ m2 }. T0 w$ Kuse ieee.std_logic_1164.all;$ {* J6 q! u8 e
use ieee.std_logic_arith.all;$ s5 z* ]$ n$ M" D- x
use ieee.std_logic_unsigned.all;
- `; H) F; _9 Q# t7 T$ C9 K" r4 A
entity pwm8 is Port (
1 l; Q  a' A" x! l* O    CLK : in std_logic;--clock 1KHZ
: t& N7 I; f7 Z+ b4 I- D0 X    RST : in std_logic;--reset. d- V# ]/ F0 C( t
    SW  : in std_logic;--switch in4 r- G9 Q3 N( p2 O* k
    SEG7 : out std_logic_vector(6 downto 0));--
( V  o' j3 V3 ^+ ]end pwm8;
7 U$ b) z6 e" t" x- e6 H! r0 o% t+ w8 d
architecture arch of pwm8 is  P# Q4 z5 h% A$ ^3 b

+ B# v( n/ p' A5 v( @! X# [+ isignal  SWCNT : std_logic_vector(2 downto 0);: `' l- W9 a; d6 L% v3 C5 y
signal  PWMCNT : std_logic_vector(2 downto 0);- B6 g7 L3 r; p6 x& K" h
signal  DISP : std_logic;! P7 D  q' H' w9 X! h
* m9 g8 |( ]$ g4 p
begin8 u' z: U( p2 o6 P  B4 H7 b
! g6 e( {8 V! }0 m% c/ H  g+ {
--toggle switch input counter5 F& j3 y$ i1 [& O3 r( V/ C6 A
process(RST,SW)
) b3 A2 w( |+ x) K% A% i( z2 {1 Ubegin" ]% A3 ]% s6 u' B3 E; O
    if RST='1' then+ _4 B; t6 s& T) m/ I# z1 Y9 g+ }
        SWCNT<="000";& W8 c7 q, _) d6 m6 z' k
    elsif rising_edge(SW) then( l) h6 v2 I" E  `! S7 b
        SWCNT<=SWCNT+'1';
# B, S/ s9 @! A# R1 H    end if;* l+ l- {1 e4 ?# T6 }# k1 c7 X
end process;# y7 H) \" f) ~" @
* J0 p# W% K# g4 T
--pwm counter
0 _( _. H0 c, j7 R$ \+ _process(RST,CLK)+ q& X1 g" u$ x# v" _/ l
begin
: i3 y. [# j' m+ d* V    if RST='1' then' k" f5 k5 ]1 F
        PWMCNT<="000";
9 ]: E; y1 ^1 T# A% f, ~        DISP<='0';7 ~$ X9 t, Z* H; b. _- ^: R) g+ {/ b
    elsif rising_edge(CLK) then
/ K! t& V7 m$ o  ~* u" B        PWMCNT<=PWMCNT+'1';) I* E. B: W( V
        if (PWMCNT="111") then
# I2 E" C/ h5 d4 ~            DISP<='1';
/ l4 \3 E8 ~) ?# B+ A8 K4 P$ {        elsif (PWMCNT=SWCNT) then* a1 B, _1 C0 o; V0 [# K8 @! I
            DISP<='0';
7 J! ^! h$ A) [; B4 C        end if;% ^6 N; H, g& O- \- [$ ?4 ]2 _% U; C
    end if;
- S; t7 B- g( A  {$ S. Tend process;5 j) h9 O5 ^, l. @1 r, o

. ], D  t4 S2 b1 [6 N: u--7-segment display decoder! K. [& R3 ^) [: D! a: e
process(DISP,SWCNT); {. H# h/ O3 @4 H3 O+ {
variable DISPEN : std_logic_vector(3 downto 0);# t0 q9 X3 ~6 {6 f6 N+ D
begin
. L* f0 h) d3 o4 c    DISPEN := DISP SWCNT;1 V- T. m: m9 b
    case DISPEN is --SEG7<="abcdefg"4 {1 c) E# M: c& S0 G4 ]7 x+ L' t
        when "1000"=>SEG7<="1111110";1 W- f1 P0 N9 r, B# `' M1 E' I
        when "1001"=>SEG7<="0110000";5 G- m0 x6 s2 g2 ~7 L9 M2 P/ K% r1 e* |
        when "1010"=>SEG7<="1101101";
5 c& x0 [) w9 O7 v! X        when "1011"=>SEG7<="1111001";
- A7 p: D6 _7 R, ^/ h        when "1100"=>SEG7<="0110011";
6 F5 W+ V1 n+ E/ a5 d        when "1101"=>SEG7<="1011011";' ]1 H3 ~( G8 U  |2 @3 b& \, z
        when "1110"=>SEG7<="1011111";% }( m: h5 w: l5 Q+ u5 c$ O
        when "1111"=>SEG7<="1110000";
+ {* Z# m- O9 i. U        when others=>SEG7<="0000000";1 \+ Y+ l) s1 A/ Z" P) F% u" O2 a; a
    end case;# R3 C, C6 Z8 ]  @9 ^
end process;7 f; Y; N% q' K
end arch;
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-2-2 13:02:01 | 只看該作者
process(RST,SW)6 o( K: ?9 n" E5 X' Y% n4 r
begin
1 P( l8 H0 t2 B# {    if RST='1' then
, N3 p1 i# D* y- j8 d6 W6 X! A        SWCNT<="000";
1 T4 G' `" i' W    elsif rising_edge(SW) then: N% s! P0 f! S5 S) {2 }
        SWCNT<=SWCNT+'1';
$ Z" O$ v* u0 G$ v; T    end if;3 M4 y8 P& o1 J, h2 u/ o
end process;
9 z2 e7 y( ^9 ]( t+ ~9 R- H將 SW 以 數ms~數十ms 的取樣率取到穩定的 High/Low 才當成上述的 clock 信號就可以解決
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-24 03:45 PM , Processed in 0.156009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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