FPGA按键检测
2017-08-28 20:17
134 查看
开发板:黑金AX301
AX301/AX4010 开发板上共有 4 个白色按键,分别为 Reset 和 KEY1~KEY3,我们这里
要实验的就是这四个用户按键。 按键的电路设计如下
实现原理:
四个按键 KEY1~KEY4 分别对应的 FPGA 管脚情况如下:
Reset 键------PIN:N13
KEY1 键------PIN:M15
KEY2 键------PIN:M16
KEY3 键------PIN:E16
按键没有按下的时候,连接到 FPGA 管脚的按键信号的电平为高,当有按键按下的时候,连接到 FPGA 管脚的此按键信号的电平被拉低。
操作结果:
每 20ms 程序会检查一下按键的状态,如果这次检测为低电平而且上次检测为高电平的话,说明有按键按下,相对应的 LED 灯反转。一般按键按下时的按键抖动为低于 20ms 的脉冲信号,这些高频脉冲信号会被滤除。提高了按键的可靠性。
按一下按键 Reset,LED0 变亮, 再按一下按键 Reset,LED0 熄灭。实验结果是否跟我们
的设计的思路一样。
AX301/AX4010 开发板上共有 4 个白色按键,分别为 Reset 和 KEY1~KEY3,我们这里
要实验的就是这四个用户按键。 按键的电路设计如下
实现原理:
四个按键 KEY1~KEY4 分别对应的 FPGA 管脚情况如下:
Reset 键------PIN:N13
KEY1 键------PIN:M15
KEY2 键------PIN:M16
KEY3 键------PIN:E16
按键没有按下的时候,连接到 FPGA 管脚的按键信号的电平为高,当有按键按下的时候,连接到 FPGA 管脚的此按键信号的电平被拉低。
`timescale 1ns / 1ps module key( clk, //rst_n, key_in, led_out ); input clk; //input rst_n; input [3:0]key_in; output [3:0]led_out; wire rst_n = 1'b1; //寄存器定义 reg [19:0]count; reg [3:0] key_scan; //核心程序 always@(posedge clk or negedge rst_n) begin if(~rst_n) count <=20'd0; else//20ms为去抖时间 begin if(count == 20'd999_999) begin count <= 20'd0; key_scan <= key_in; end else count <= count + 20'd1; end end reg[3:0]key_scan_r; always@(posedge clk) key_scan_r <= key_scan; wire [3:0]flag_key = key_scan_r[3:0]&(~key_scan[3:0]); reg [3:0]temp_led; always @ (posedge clk or negedge rst_n) //检测时钟的上升沿和复位的下降沿 begin if (!rst_n) //复位信号低有效 temp_led <= 4'b1111; //LED 灯控制信号输出为低, LED 灯全灭 else begin if ( flag_key[0] ) temp_led[0] <= ~temp_led[0]; //按键 KEY1 值变化时,LED1 将做亮灭翻转 if ( flag_key[1] ) temp_led[1] <= ~temp_led[1]; //按键 KEY2 值变化时,LED2 将做亮灭翻转 if ( flag_key[2] ) temp_led[2] <= ~temp_led[2]; //按键 KEY3 值变化时,LED3 将做亮灭翻转 if ( flag_key[3] ) temp_led[3] <= ~temp_led[3]; //按键 KEY4 值变化时,LED4 将做亮灭翻转 end end assign led_out[0] = temp_led[0]; assign led_out[1] = temp_led[1]; assign led_out[2] = temp_led[2]; assign led_out[3] = temp_led[3]; endmodule
操作结果:
每 20ms 程序会检查一下按键的状态,如果这次检测为低电平而且上次检测为高电平的话,说明有按键按下,相对应的 LED 灯反转。一般按键按下时的按键抖动为低于 20ms 的脉冲信号,这些高频脉冲信号会被滤除。提高了按键的可靠性。
按一下按键 Reset,LED0 变亮, 再按一下按键 Reset,LED0 熄灭。实验结果是否跟我们
的设计的思路一样。
相关文章推荐
- 《FPGA嵌入式项目开发实战》
- 关于FPGA中的Logic Cells, Logic Slices, Configurable Logic Blocks and Gates
- DSP多网口开发板
- Utilities Zynq in a PL only configuration
- 认识多种处理芯片的特性和实战(上篇)
- ARM+FPGA核心板
- DSP+ARM+FPGA核心板
- 基于VHDL的按键扫描程序
- Xilinx FPFA中LUT4_L 元件的使用
- ISE 综合面积报告分析
- 基于FPGA的高速串行通信之GTX收发器——差分IO信号
- quartus管脚分配
- FPGA读取DRAM不成功的重要原因
- 基于FPGA的高效硬件除法器
- 杂文
- 深圳嵌入式培训 修练软硬件之功 高薪一路相伴
- FPGA点灯
- 深圳视晶无线技术有限公司 狗血经历
- 利用FPGA实现超声测距(Verilog HDL)
- [FPGA][Quartus]代码保护-生成网表文件