按键控制 LED 实验

目录

1 按键简介

2 实验任务

3 硬件设计

4 程序设计

5 下载验证


1 按键简介

        按键开关是一种电子开关,属于电子元器件类。
        轻触式按键
        自锁式按键

2 实验任务

        使用底板上的 PL_KEY0 PL_KEY1 按键来控制底板上的 PL_LED0 PL_LED1 两个 LED 的闪烁方式。没有按键按下时,两个 LED 保持常亮;如果按键 0 按下,则两个 LED 交替闪烁;如果按键 1 按下,则两个 LED 同时闪烁。

3 硬件设计

按键电路原理图

         对应的 XDC 约束语句如下所示:

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 程序设计

按键控制 LED 系统框图
        计数器对 50MHz 时钟进行计数,从而达到计时的目的。计数器在每次计时到 0.5 秒的时候,就改变 LED 的显示状态,然后清零并重新开始计数。然后根据两个按键(KEY0 KEY1 )的状态,在不同的 LED 状态下,分别设置 LED 的显示模式(是同时闪烁,或者交替闪烁)。
        顶层模块代码如下:
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 下载验证

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不做拖延王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值