您的位置 首页 数字

根据FPGA的按键操控LED灯亮灭

基于FPGA的按键控制LED灯亮灭-按键是常用的一种控制器件。生活中我们可以见到各种形式的按键,由于其结构简单,成本低廉等特点,在家电、数码产品、玩具等方面有广泛的应用。

按键是常用的一种操控器材。日子中咱们能够见到各种形式的按键,因为其结构简略,本钱低价等特色,在家电、数码产品、玩具等方面有广泛的运用。

本试验咱们将介绍怎么运用按键操控多个LED的亮灭。

1. 按键简介

按键开关是一种电子开关,归于电子元器材类。

咱们的开发板上有两种按键开关:

第一种是本试验所运用的轻触式按键开关(如下图1),简称轻触开关

运用时以向开关的操作方向施加压力使内部电路闭合接通,当吊销压力时开关断开,其内部结构是靠金属弹片受力后产生形变来完成通断的;

第二种是自按键(如下图2),自锁按键第一次按下后坚持接通,即自锁,第2次按下后,开关断开,一起开关按钮弹出来。

开发板上的电源键便是第一种开关。

根据FPGA的按键操控LED灯亮灭

图1 轻触式按键

根据FPGA的按键操控LED灯亮灭

图2 自锁式按键

2. 试验使命

运用开发板上的四个按键操控四个LED灯。不同按键按下时,四个LED灯显现不同作用。(因为按键1被复位键占用,故本试验中运用按键2、按键3、按键4操控LED灯显现四种状况)

当按下按键2时,4个LED灯显现从右向左流水灯作用。

当按下按键3时,4个LED灯显现从左向右流水灯作用。

当按下按键4时,4个LED灯闪耀

3. 硬件规划

本试验中,体系时钟、复位按键、按键和LED灯的管脚如下表所示。

根据FPGA的按键操控LED灯亮灭

按键操控LED管脚分配图

4. 程序规划

根据FPGA的按键操控LED灯亮灭

体系框图

运转代码:
 

/***********************************************************************
Filename     : key_led.v
Author       : 
Company      : 
Mail         : 
Device       : Altera
Enviroment   : Win10,Quartus16.1,modelsim 10.4
Created date : 
Version      : V1.0
Description  : 
Sim          :
Modified by  :
Modified date:
Version      :
DescripTIon  :
************************************************************************/
module key_led (
  input i_sys_clk,/* 体系时钟信号50MHz */
  input i_sys_rst_n,/* 体系复位信号,低有用 */
  input [2:0] i_key,/* 按键输入信号 */
  output [3:0] o_led/* LED输出信号 */
);
/* 界说0.2s计数寄存器 */
parameter p_0_2s_counter = 10_000_000;
reg [23:0] r_0_2s_counter = 24'd0;
always @ (posedge i_sys_clk or negedge i_sys_rst_n)
begin
  if (~i_sys_rst_n)
    r_0_2s_counter <= 24'd0;
  else if (r_0_2s_counter == (p_0_2s_counter - 1'b1))
    r_0_2s_counter <= 24'd0;
  else
    r_0_2s_counter <= r_0_2s_counter + 1'b1;
end
/* 界说LED状况转化寄存器 */
reg [1:0] r_led_state_switch = 2'd0;
always @ (posedge i_sys_clk or negedge i_sys_rst_n)
begin
  if (~i_sys_rst_n)
    r_led_state_switch <= 2'b00;
  else if (r_0_2s_counter == (p_0_2s_counter - 1'b1))
    r_led_state_switch <= r_led_state_switch + 1'b1;
  else
    r_led_state_switch <= r_led_state_switch;
end
/* 辨认按键,切换显现形式 */
reg [3:0] r_led;
always @ (posedge i_sys_clk or negedge i_sys_rst_n)
begin
  if (~i_sys_rst_n)
    r_led <= 4'b0000;
  /* 按键2按下时,从右向左流水灯作用 */
  else if (i_key[0] == 1'b0)
    case (r_led_state_switch)
      2'b00 : r_led <= 4'b1000;
      2'b01 : r_led <= 4'b0100;
      2'b10 : r_led <= 4'b0010;
      2'b11 : r_led <= 4'b0001;
      default : r_led <= 4'b0000;
    endcase
  /* 按键3按下时,从左向右流水灯作用 */
  else if (i_key[1] == 1'b0)
  case (r_led_state_switch)
    2'b00 : r_led <= 4'b0001;
    2'b01 : r_led <= 4'b0010;
    2'b10 : r_led <= 4'b0100;
    2'b11 : r_led <= 4'b1000;
    default : r_led <= 4'b0000;
  endcase
  /* 按键4按下时,LED闪耀 */
  else if (i_key[2] == 1'b0)
  case (r_led_state_switch)
    2'b00 : r_led <= 4'b1111;
    2'b01 : r_led <= 4'b0000;
    2'b10 : r_led <= 4'b1111;
    2'b11 : r_led <= 4'b0000;
    default : r_led <= 4'b0000;
  endcase
  /* 无按键按下时,LED平息 */
  else
    r_led <= 4'b0000;
end
assign o_led = r_led;
endmodule

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/340865.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部