目录
1 按键简介
2 实验任务
3 硬件设计
4 程序设计
5 下载验证文章来源:https://www.toymoban.com/news/detail-500499.html
1 按键简介
2 实验任务
3 硬件设计
对应的 XDC 约束语句如下所示:文章来源地址https://www.toymoban.com/news/detail-500499.html
set_property -dict {PACKAGE_PIN U18 IOSTANDARD LVCMOS33} [get_ports sys_clk]set_property -dict {PACKAGE_PIN N16 IOSTANDARD LVCMOS33} [get_ports sys_rst_n]set_property -dict {PACKAGE_PIN L14 IOSTANDARD LVCMOS33} [get_ports key[0]]set_property -dict {PACKAGE_PIN K16 IOSTANDARD LVCMOS33} [get_ports key[1]]set_property -dict {PACKAGE_PIN H15 IOSTANDARD LVCMOS33} [get_ports {led[0]}]set_property -dict {PACKAGE_PIN L15 IOSTANDARD LVCMOS33} [get_ports {led[1]}]
4 程序设计
module key_led(
input sys_clk ,
input sys_rst_n ,
input [1:0] key ,
output reg [1:0] led
);
//reg define
reg [24:0] cnt;
reg led_ctrl;
//*****************************************************
//** main code
//*****************************************************
//计数器
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
cnt <= 25'd0;
else if(cnt < 25'd2500_0000) //计数 500ms
cnt <= cnt + 1'b1;
else
cnt <= 25'd0;
end
//每隔 500ms 就更改 LED 的闪烁状态
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
led_ctrl <= 1'b0;
else if(cnt == 25'd2500_0000)
led_ctrl <= ~led_ctrl;
end
//根据按键的状态以及 LED 的闪烁状态来赋值 LED
always @ (posedge sys_clk or negedge sys_rst_n) begin
if(!sys_rst_n)
led <= 2'b11;
else case(key)
2'b10 : //如果按键 0 按下,则两个 LED 交替闪烁
if(led_ctrl == 1'b0)
led <= 2'b01;
else
led <= 2'b10;
2'b01 : //如果按键 1 按下,则两个 LED 同时闪烁
if(led_ctrl == 1'b0)
led <= 2'b11;
else
led <= 2'b00;
2'b11 : //如果两个按键都未按下,则两个 LED 都保持点亮
led <= 2'b11;
default: ;
endcase
end
endmodule
5 下载验证
到了这里,关于按键控制 LED 实验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!