请尊重作者版权,转载请注明源地址http://www.cnblogs.com/connorzx/p/3548364.html

按键在按下的过程中通常会产生一段时间的抖动,为了消除这种抖动,一般采取两种方法。一种为硬件消抖,另一种为软件消抖。

硬件消抖是利用了RS锁存器的相关原理。如下图所示,开关在B处时,5处为低电平,1处为高电平。根据与非门“有零出一”的特点,6处为高电平,即2处为高电平。所以此时3处为低电平。当开关从B拨到A时,5处变为高电平,一旦1处出现低电平,输出将一直为高电平。(读者不妨自己假设一下)。开关在A处时,情况类似。

软件消抖主要是通过延时跳过按键抖动的阶段,检测稳定阶段的情况。

下面是代码。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL; entity sw_debounce_module is
Port ( clk: in STD_LOGIC;
rst: in STD_LOGIC;
switch : in STD_LOGIC_VECTOR ( downto );
led : out STD_LOGIC_VECTOR ( downto ));
end sw_debounce_module; architecture Behavioral of sw_debounce_module is
signal tmp : STD_LOGIC_VECTOR ( downto );
signal cnt : INTEGER range to ;
constant max : INTEGER :=;
begin
process(clk,rst,switch(),switch())
begin
if(rst = '') then
tmp( downto )<="";
cnt <= ;
else
if(switch()='')then
if(cnt <max and clk='')then
cnt <=cnt+;
elsif(cnt = max) then
cnt <= ;
end if;
if(switch()='')then
tmp()<=not tmp();
end if;
end if;
if(switch()='')then
if(cnt < max and clk='') then
cnt<=cnt+;
elsif(cnt = max) then
cnt <= ;
end if;
if(switch()='')then
tmp()<=not tmp();
end if;
end if;
end if;
end process;
led( downto )<=tmp( downto );
end Behavioral;

由于时钟频率为50MHZ,延时500000周期即为10ms。

为了将程序中的管脚映射到BASYS2开发板上,我们需要建立一个UCF约束文件

下面是约束文件

NET "rst" LOC = "P11";
NET "clk" LOC = "B8";
NET "switch<0>" LOC = "A7";
NET "switch<1>" LOC = "M4";
NET "led<0>" LOC = "G1";
NET "led<1>" LOC = "P4";

依次运行Synthesize -XST,Implement Design和Genetate Programming File。生成可烧录文件。

打开Digilent Adept,有两个选项,第一个为掉电即清除;第二个掉电不清除。选第一个的同时,JP3管脚应选PC模式,选第二个的同时JP3管脚应选ROM模式。

载入程序文件中的.bit文件,点击program即可。

基于BASYS2的VHDL程序与烧写——按键消抖程序的更多相关文章

  1. 基于FPGA的key button等开关消抖,按键消抖电路设计

    最近要用上一个key消抖的功能.于是找到了之前写的并放入博客的程序,发现居然全部有问题.http://www.cnblogs.com/sepeng/p/3477215.html —— 有问题,包括很多 ...

  2. 基于BASYS2的VHDL程序——交通灯

    请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...

  3. 基于BASYS2的VHDL程序——分频和数码管静态显示程序

    转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...

  4. 基于BASYS2的VHDL程序与仿真——50%占空比8分频器

    转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...

  5. 基于BASYS2的VHDL程序——数字钟

    在编电子表时发现FPGA求余,取模只能针对2的次方.毕竟是数字的嘛! 时钟用到了动态刷新数码管.以一个大于50Hz的速度刷新每一个数码管. 因为数码管只有四个,只写了分针和秒针. 代码如下: libr ...

  6. 基于BASYS2的VHDL程序——交通灯(状态机版)

    请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...

  7. 基于BASYS2的VHDL程序——数字钟(最终版)

    转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...

  8. 基于BASYS2的VHDL程序——数字钟(改进版)

    扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...

  9. debian下烧写stm32f429I discovery裸机程序

    需要安装openocd软件.如果已安装默认的openocd,需要先卸载系统默认的openocd(默认版本是0.5.0,版本太低),然后再安装. 在安装前需要安装libusb库文件: -dev libu ...

随机推荐

  1. Codeforces Gym 100338H High Speed Trains 组合数学+dp+高精度

    原题链接:http://codeforces.com/gym/100338/attachments/download/2136/20062007-winter-petrozavodsk-camp-an ...

  2. 我的VIM

    我的vim 压缩包地址:https://pan.baidu.com/s/1bo1kt8j

  3. kettle变量使用

    公司项目使用kettle重构之前的取数,先研究下日常的使用. 一.建立数据转换,表数据到表输出,其中表输入数据来自其他业务数据库,通过输入sql执行得到数据. 表输入: 表输出: 设置并行4个线程. ...

  4. 1005 Spell It Right

    1005 Spell It Right   Given a non-negative integer N, your task is to compute the sum of all the dig ...

  5. 邁向IT專家成功之路的三十則鐵律 鐵律二十九 IT人富足之道-信仰

    天地自然的循環法則,讓每一個人都必須經歷生.老.病.死.喜.怒.哀.樂,然而至始至終無盡的煩惱總是遠多於快樂,因此筆者深信每一個人在一生當中,都必須要有適合自己的正確信仰,他可以在你無法以物質力量來解 ...

  6. 零基础学python-3.7 还有一个程序 python读写文本

    今天我们引入另外一个程序,文件的读写 我们先把简单的程序代码贴上.然后通过我们多次的改进.希望最后可以变成一个简单的文本编辑器 以下是我们最简单的代码: 'crudfile--读写文件' def re ...

  7. 笔记04 WPF的Binding

    oneWay:使用 OneWay 绑定时,每当源发生变化,数据就会从源流向目标. OneTime: 绑定也会将数据从源发送到目标:但是,仅当启动了应用程序或 DataContext 发生更改时才会如此 ...

  8. Ubuntu 登陆异常-输入正确的密码后还会返回到登陆界面的问题

    问题表现: 启动到了登陆界面,输入对应的密码,发现一闪黑屏有返回到登陆界面,如此往复. 解决方法: 开机后在登陆界面按下shift + ctrl + F1进入tty命令行终端登陆,可以查看用户主目录下 ...

  9. iOS开发 - UIViewController控制器管理

    创建一个控制器 控制器常见的创建方式有下面几种 //通过storyboard创建 //直接创建 ViewController *vc = [[ViewController alloc] init]; ...

  10. Nginx详细的安装教程(linux)

    转:https://blog.csdn.net/u013641234/article/details/73838472 Nginx作为一个web服务器,目前使用最多的就利用其负载均衡,本篇着重讲解的是 ...