- 0
- 0
- 约2.47千字
- 约 4页
- 2026-02-04 发布于北京
- 举报
FPGA系列实验——按键消抖控制LED亮灭
1.实验任务
实现按键控制LED亮灭。通过这个实验,掌握采用VerilogHDL语言编程实
现按键控制LED亮灭及按键消抖方法。
2.实验环境
硬件实验环境为电子型号EP2C8Q208C8增强版开发套件。
软件实验环境为QuartusII8.1开发软件。
3.实验原理
当独立按键key1按下后,相应的LED被点亮;再次按下后,LED做翻
转输出,即LED熄灭,从而实现按键控制LED亮灭。本实验对按键进行了
消抖处理。
作为机械开关的按键,操作时,机械触点的弹性及电压突跳等,在
触点闭合或开启的瞬间会出现电压抖动,实际应用中如果不进行处理将会造
成误触发。按键去抖动的关键在于提取稳定的低电平状态,滤除前沿、后沿
抖动毛刺。按键消抖处理一般有硬件和软件两种方法。软件消抖是检测到有
触发后,延时一段时间后再检测触发状态,如果与之前检测到的状态相同,
则认为有按键按下;如果没有则认为是误触发。硬件就是加去抖电路。
4.实验程序
modulekey_debounce(rst_n,clk,key,led);
inputrst_n;
inputclk;
inputkey;
outputled;
//通过降采样对key的输入做低通滤波,将其高频分量滤除,得到low_sw值
reg[17:0]cnt;
always@(posedgeclk)
if(!rst_n)
cnt=18d0;
else
cnt=cnt+1b1;
wiresample_pulse=cnt18h3ffff;
reglow_sw;
always@(posedgeclk)
if(!rst_n)
low_sw=1b1;
elseif(sample_pulse)
low_sw=key;
//在整个low_sw(active_low)有效过程中取一个控制量作为led的控制信号
//本实例中使用low_sw的下降沿
reglow_sw_r;//将low_sw信号锁存一个时钟周期,延时不是真的“锁存”
always@(posedgeclk)
low_sw_r=low_sw;
wireled_ctrl=low_sw_r(!low_sw);
regled;
always@(posedgeclkornegedgerst_n)
if(!rst_n)
led=1b0;
elseif(led_ctrl)
led=~led;
endmodule
5.实验步骤
(1)建立新工程项目:
打开QuartusII软件,进入集成开发环境,点击File→Newproject
wizard建立一个工程项目key_debounce。
(2)建立文本编辑文件:
点击File→New..在该项目下新建VerilogHDL源程序文件
key_debounce.v,输入试验程序中的源程序代码保存后选择中的
按钮启动编译,若在编译中发现错误,则找出并更正错误,直到编
译成功为止。
(3)选择器件型号及引脚的其他设置:
选择所用的FPGA器件EP2C8Q208C8,以及进行一些配置。选择配置
器件EPCS4,设置不需要使用的IO功能为Asinputs,tri-stated。点击两
次ok,回到主界面。
(4)配置FPGA引脚:
在QuartusII软件主页面下,选择Assignments→Pins或选择上
按钮,配置rst_n,,key,led以及clk的引脚。
(5)编译工程项目:
在QuartusII主页面下,选择Processin
原创力文档

文档评论(0)