基于BASYS2的VHDL程序与烧写——按键消抖程序
请尊重作者版权,转载请注明源地址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程序与烧写——按键消抖程序的更多相关文章
- 基于FPGA的key button等开关消抖,按键消抖电路设计
最近要用上一个key消抖的功能.于是找到了之前写的并放入博客的程序,发现居然全部有问题.http://www.cnblogs.com/sepeng/p/3477215.html —— 有问题,包括很多 ...
- 基于BASYS2的VHDL程序——交通灯
请尊重作者版权,转载请注明原地址: http://www.cnblogs.com/connorzx/p/3676746.html 数电实验交通灯VHDL版,程序写的扩展性很差,待以后有时间进行优化. ...
- 基于BASYS2的VHDL程序——分频和数码管静态显示程序
转载请注明出处:http://www.cnblogs.com/connorzx/p/3633860.html 分频是基于计数器程序.由于FPGA的并行处理能力,根本不需要单片机式的中断指令,用起来很方 ...
- 基于BASYS2的VHDL程序与仿真——50%占空比8分频器
转帖请注明转自http://www.cnblogs.com/connorzx/p/3547673.html 一.新建工程 1.点击File->New Project, 2.点击Next 注:此处 ...
- 基于BASYS2的VHDL程序——数字钟
在编电子表时发现FPGA求余,取模只能针对2的次方.毕竟是数字的嘛! 时钟用到了动态刷新数码管.以一个大于50Hz的速度刷新每一个数码管. 因为数码管只有四个,只写了分针和秒针. 代码如下: libr ...
- 基于BASYS2的VHDL程序——交通灯(状态机版)
请尊重作者版权,转载注明源地址:http://www.cnblogs.com/connorzx/p/3694618.html 使用了状态机,增加了可读性和用户体验. library IEEE; use ...
- 基于BASYS2的VHDL程序——数字钟(最终版)
转载请注明原地址:http://www.cnblogs.com/connorzx/p/3674178.html 调时电路正常工作.一切正常.发现做FPGA还是得从数电的思路思考,设置一个预置使能端,预 ...
- 基于BASYS2的VHDL程序——数字钟(改进版)
扩展到时分秒.加了入调时电路,但不知道为什么有两个按键不好使.而且不知道以何种方式假如按键消抖电路,因为加入后会多个时钟控制一个信号,物理不可实现.调试电路待解决.还有,四个数目管中间的那两个圆点怎么 ...
- debian下烧写stm32f429I discovery裸机程序
需要安装openocd软件.如果已安装默认的openocd,需要先卸载系统默认的openocd(默认版本是0.5.0,版本太低),然后再安装. 在安装前需要安装libusb库文件: -dev libu ...
随机推荐
- mysql 设置默认id自增开始下标
alter table 表名 AUTO_INCREMENT 此处写你想让id从几开始增长的数字:
- iOS- Exception Type: 00000020:什么是看门狗机制(转)
1.前言 前几天我们项目闪退之后遇到的一个Crash,之后逛了许多论坛,博客都没有找到满意的回复 在自己做了深入的研究之后,对iOS的看门狗机制有了一个基本的了解 而有很多奇怪的Crash可 ...
- SilverLight:基础控件使用(4)-日期显示和选择类控件
ylbtech-SilverLight-Basic-Control:基础控件使用(4)-日期显示和选择类控件 Calendar,DatePicker 1.A,返回顶部 Calendar控件(日期控件) ...
- 基于ACCESS和ASP的SQL多个表查询与计算统计代码(一)
近期在写几个关于"Project - Subitem - Task"的管理系统,说是系统还是有点夸大了,基本就是一个多表查询调用和insert.update的数据库操作.仅仅是出现 ...
- LinearLayout具体解释三:LayoutInflater创建View过程分析
上次讲到以下这么一段代码,这段代码的作用就是解析xml文件成为view并显示到屏幕上的. @Override //设置contentview,也就是activity或fragment载入视图,即vie ...
- 手把手教你将本地项目文件上传至github
相信大家都听过Git(分布式版本号控制系统)和github吧.没听过也没关系(Google一下),反正以后要去公司肯定会听过. 我是在今年年初才接触Git.之后就一发不可收拾.仅仅要有比較好的项目就G ...
- orcad元件属性批量修改(通过excel表格)
本文适合于没有使用CIS的情况下,提高元件属性修改的效率和BOM生成. 第一步:编号 首先给元件编好号: 如果是沿用旧工程,用这个编号.如果是创建的新工程,使用第二项,强制从头开始编号.因为编号与PC ...
- grep man 有删减 百科
NAME grep, egrep, fgrep, rgrep - print lines matching a pattern SYNOPSIS grep [OPTIONS] PATTERN [FIL ...
- 后台运行命令:&和nohup command & 以及关闭、查看后台任务
当我们在终端或控制台工作时.可能不希望由于执行一个作业而占住了屏幕,由于可能还有更重要的事情要做,比方阅读电子邮件. 对于密集訪问磁盘的进程,我们更希望它可以在每天的非负荷高峰时间段执行(比如凌晨). ...
- how to run a continuous background task on OpenShift
https://stackoverflow.com/questions/27152438/best-way-to-run-rails-background-jobs-with-openshift ht ...