- 按键时常用的控制器件,生活中也随处可见。案件一般有结构简单,成本低廉等特点,在家电 、数码产品、玩具等方面有广泛的应用。
- 本次实验实现按键控制多个LED的亮灭
module key_led ( input sys_clk, input sys_rst_n, input [3:0] key, output reg [3:0] led ); reg [23:0] time_count; reg [1:0] led_static; //0.2s计时 always @(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n) time_count<=24'd0; else if(time_count<24'd1000_0000) time_count<=time_count+1'b1; else time_count<=24'd0; end always @(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n) led_static<=2'b00; else if(time_count==24'd1000_0000) led_static<=led_static+1'b1; else led_static<=led_static; end always @(posedge sys_clk or negedge sys_rst_n)begin if(!sys_rst_n) led<=4'b1111; else if(key[0]==1'b0) case(led_static) 2'b00: led<=4'b1000; 2'b01: led<=4'b0100; 2'b10: led<=4'b0010; 2'b11: led<=4'b0001; default: led<=4'b1111; endcase else if(key[1]==1'b0) case(led_static) 2'b00: led<=4'b0001; 2'b01: led<=4'b0010; 2'b10: led<=4'b0100; 2'b11: led<=4'b1000; default: led<=4'b1111; endcase else if(key[2]==1'b0) case(led_static) 2'b00: led<=4'b1111; 2'b01: led<=4'b0000; 2'b10: led<=4'b1111; 2'b11: led<=4'b0000; default: led<=4'b1111; endcase else if(key[3]==1'b0) case(led_static) 2'b00: led<=4'b0000; 2'b01: led<=4'b0000; 2'b10: led<=4'b0000; 2'b11: led<=4'b0000; default: led<=4'b1111; endcase else led<=4'b1111; end endmodule
端口配置
-
最终实现按键控制LED的功能
- 核心思想:
- LED的状态转换
- 定时函数的熟练使用
- 按键的一般检测方式,其中这里的电路按键采用默认上拉到3.3V,当按键按下是下拉到地,则可以通过检测低电平的方式来检测按键的按下
- 系统模块设计如图所示
下载.sof 代码验证完成
代码坚持手撸!!!
话说不学习就把你sha掉!!!! ---------索大