FPGA触摸按键控制LED——拓展:按下之后LED闪烁,再次按下停止闪烁

实现触摸按键触摸后 led 灯闪烁,再次触摸时 led 灯停止闪烁。

(野火ALTERA FPGA 教程作业训练题)
基本思路是:两个part并行嘛,一个part实现LED闪烁的部分,一直运行,另一个part检测按键按下的下降沿;
由更高一级的touch_en控制LED这一级。

注意touch_en只是一个脉冲信号,所以不能用作条件赋值语句的条件,而是需要重新设置一个touch_flag变量,作为电平信号,方可使用。

代码如下,亲测可行,未写testbench。


//实现触摸按键触摸后 led 灯闪烁,再次触摸时 led 灯停止闪烁。
//基本思路是,两个模块并行嘛,设置一个LED闪烁的部分,一直运行,只是由touch_en更高一级的控制

module touch_ctrl_led_flash
#(	
	parameter CNT_MAX = 25'd24_999_999
)
(
	input   wire    sys_clk     ,  
	input   wire    sys_rst_n   ,  
	input   wire    touch_key	,  
	
	output  wire    led_out	
);
reg [24:0] 	cnt				;
reg			touch_flag		;//设置一个flag,每次touch_en有效后翻转,即为电平信号,使用此信号
reg 		led				;//这个是闪烁的led,只需要将其赋值给led_out即可。
reg 		touch_key_dly1	;//将touch_key同步到时钟下
reg 		touch_key_dly2	;//对touch_key_dly1进行打一拍的操作
	
wire 		touch_en		;
	
assign		touch_en = (~touch_key_dly1) & touch_key_dly2;

//对 touch_key 信号延迟两个时钟周期用来产生触摸按键信号
always@(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		begin
			touch_key_dly1 <= 1'b0;
			touch_key_dly2 <= 1'b0;
		end
	else
		begin
			touch_key_dly1 <= touch_key		;
			touch_key_dly2 <= touch_key_dly1;
		end
end

//assign led_out = (touch_en) ? led : 1'b1;这样写不对,因为只有很短暂的时间touch_en=1
//输出部分逻辑
always@(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		touch_flag <= 1'b1;
	else if(touch_en)
		touch_flag <= ~touch_flag;	
end
assign led_out = (touch_flag) ? led : 1'b1;

//对LED闪烁的控制部分
//计数器
always@(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		cnt <= 25'd0;
	else if(cnt == CNT_MAX)
		cnt <= 25'd0;
	else
		cnt <= cnt + 1'b1;
end
//led 闪烁部分代码
always@(posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		led <= 1'd1;			//初始不亮
	else if(cnt == CNT_MAX)
		led <= ~led;
end

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值