一、按键开关
1、按键开关(轻触开关):主要是指轻触式按键开关,属于电子元器件类,使用时以满足操作力的条件向开关操作方向施压开关功能闭合接通,当撤销压力时开关即断开,其内部结构是靠金属弹片受力变化来实现通断的。
2、自锁按键:在开关按钮第一次按时,开关接通并保持,即自锁,在开关按钮第二次按时,开关断开,同时开关按钮弹出来。 自锁开关一般是指开关自带机械锁定功能,按下去,松手后按钮是不会完全跳起来的,处于锁定状态,需要再按一次,才解锁完全跳起来。
二、硬件设计
1、 按键模块原理图如下:
对于管脚分配,可查看对应的FPGA原理图。
2、实验目的
使用开发板上的四个按键控制四个LED灯,没有按键按下时,四个灯全灭;当按下KWEY0时,实现自右向左的流水灯;当按下KWEY1时,实现自左向右的流水灯;当按下KWEY2时,实现四个灯同时闪烁;当按下KWEY3时,实现四个灯全亮。
3、系统框图如下:
50Hhz时钟:由开发板上的晶振提供;
rst复位信号:由开发板上的复位按键提供;文章来源:https://www.toymoban.com/news/detail-478615.html
三、程序代码
module key_led(
input clk,
input rst_n, //(_n表示复位信号低电平有效)
input [3:0] key, //key的位宽为4
output reg [3:0] led //led的位宽为4
);
//定义计数器
reg [23:0] cnt;
//定义状态计数器,4个状态,所以计数器位宽是2
reg [1:0] led_ctrl;
//always模块定义一个0.2s的计数器
always @ (posedge clk or negedge rst_n) begin //用一个上升沿或者下降沿触发always模块
if(!rst_n)
cnt <= 24'd0; //清零
else
if(cnt < 24'd10000000)
cnt <= cnt + 1'b1; //累加
else
cnt <= 24'd0; //清零
end
//每隔0.2s改变计数器状态
always @ (posedge clk or negedge rst_n) begin //用一个上升沿或者下降沿触发always模块
if(!rst_n) //复位
led_ctrl <= 2'd0; //状态计数器清零,led_ctrl位宽为2,所以是2'd0;
else
if(cnt == 24'd1000_0000) //0.2s时,计数器加1
led_ctrl <= led_ctrl + 1'b1; //累加
else
led_ctrl <= led_ctrl;
end
//根据按键改变led状态
always @ (posedge clk or negedge rst_n) begin //用一个上升沿或者下降沿触发always模块
if(!rst_n) //复位
led <= 4'b0000; //状态计数器清零,led为4种状态,所以是4'b0000;
else
if(key[0] == 1'b0)
case(led_ctrl) //从右向左的流水灯
2'd0: led <= 4'b1000;
2'd1: led <= 4'b0100;
2'd2: led <= 4'b0010;
2'd3: led <= 4'b0001;
endcase
else
if(key[1] == 1'b0)
case(led_ctrl) //从左向右的流水灯
2'd0: led <= 4'b0001;
2'd1: led <= 4'b0010;
2'd2: led <= 4'b0100;
2'd3: led <= 4'b1000;
endcase
else
if(key[2] == 1'b0)
case(led_ctrl) //四个灯同时闪烁
2'd0: led <= 4'b1111;
2'd1: led <= 4'b0000;
2'd2: led <= 4'b1111;
2'd3: led <= 4'b0000;
endcase
else if(key[3] == 1'b0) //四个灯全亮
led <= 4'b1111;
else //无按键按下时,灯全灭
led <= 4'b0000;
end
endmodule
四、演示视频
FPGA学习笔记之按键控制LED演示效果文章来源地址https://www.toymoban.com/news/detail-478615.html
到了这里,关于FPGA之按键控制LED的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!