紫光同创FPGA学习——按键控制LED灯

module key_led(
    input               sys_clk  ,    //50Mhz系统时钟
    input               sys_rst_n,    //系统复位,低有效
    input        [3:0]  key,          //按键输入信号
    output  reg  [7:0]  led           //LED输出信号
    );

//reg define     
reg  [23:0] cnt;
reg  [2:0]  led_control;

//用于计数0.2s的计数器
always @ (posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n)
        cnt<=24'd9_999_999;
    else if(cnt<24'd9_999_999)
        cnt<=cnt+1;
    else
        cnt<=0;
end 

//用于led灯状态的选择
always @(posedge sys_clk or negedge sys_rst_n) begin
    if (!sys_rst_n)
        led_control <= 3'b000;
    else if(cnt == 24'd9_999_999) 
        led_control <= led_control + 1'b1;
    else
        led_control <= led_control;
end

//识别按键,切换显示模式
always @(posedge sys_clk or negedge sys_rst_n) begin
    if(!sys_rst_n) begin
          led<=8'b0000_0000;
    end
    else if(key[0]==0)  //按键1按下时,从右向左的流水灯效果
        case (led_control)
            3'b000   : led<=8'b1000_0000;
            3'b001   : led<=8'b0100_0000;
            3'b010   : led<=8'b0010_0000;
            3'b011   : led<=8'b0001_0000;
            3'b100   : led<=8'b0000_1000;
            3'b101   : led<=8'b0000_0100;
            3'b110   : led<=8'b0000_0010;
            3'b111   : led<=8'b0000_0001;                       
            default  : led<=8'b0000_0000;
        endcase
    else if (key[1]==0)  //按键2按下时,从左向右的流水灯效果
        case (led_control)
            3'b000   : led<=8'b0000_0001;
            3'b001   : led<=8'b0000_0010;
            3'b010   : led<=8'b0000_0100;
            3'b011   : led<=8'b0000_1000;
            3'b100   : led<=8'b0001_0000;            
            3'b101   : led<=8'b0010_0000;            
            3'b110   : led<=8'b0100_0000;            
            3'b111   : led<=8'b1000_0000;            
            default  : led<=8'b0000_0000;
        endcase
    else if (key[2]==0)  //按键3按下时,LED闪烁
        case (led_control)
            3'b000   :led<=8'b1111_1111;
            3'b001   :led<=8'b0000_0000;
            3'b010   :led<=8'b1111_1111;
            3'b011   :led<=8'b0000_0000;
            3'b100   :led<=8'b1111_1111;
            3'b101   :led<=8'b0000_0000;
            3'b110   :led<=8'b1111_1111;
            3'b111   :led<=8'b0000_0000;                       
            default  : led<=8'b0000_0000;
        endcase
    else if (key[3]==0)  //按键4按下时,LED全亮
        led<=8'b1111_1111;
    else
        led<=8'b0000_0000;    //无按键按下时,LED熄灭     
end

endmodule 

IO连接

 

运行结果成功

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值