五、按键和LED控制实验

一、硬件设计
 

 

 二、程序设计

        我们程序设计最终实现的效果为: 无按键按下时, LED灯全灭; 按键1按下时, LED灯显示
自右向左的流水效果;按键2按下时, LED灯显示自左向右的流水效果;按键3按下时,四个LED
灯同时闪烁; 按键4按下时, LED灯全亮。
        LED在流水效果和闪烁效果在时间间隔均为0.2秒, 因此需要在程序中定义一个0.2s的计数
器, 即每隔0.2s,状态计数器加一。根据当前按键的状态选择不同的显示模式,不同的显示模
式下四个led灯的亮灭随状态计数器的值改变,从而呈现出不同的显示效果。

 

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

reg [23:0] cnt;
reg [1:0] led_control;

//用于计数0.2s的计数器
always @ (posedge sys_clk or negedge sys_rst_n) begin
	if(!sys_rst_n)
		cnt<=24'd0;
	else if(cnt<24'd 9_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 <= 2'b00;
	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<=4'b 0000;
	end
		else if(key[0]== 0) //按键1按下时,从右向左的流水灯效果
			case (led_control)
				2'b00 : led<=4'b1000;
				2'b01 : led<=4'b0100;
				2'b10 : led<=4'b0010;
				2'b11 : led<=4'b0001;
			default : led<=4'b0000;
			endcase
		else if (key[1]==0) //按键2按下时,从左向右的流水灯效果
			case (led_control)
				2'b00 : led<=4'b0001;
				2'b01 : led<=4'b0010;
				2'b10 : led<=4'b0100;
				2'b11 : led<=4'b1000;
			default : led<=4'b0000;
			endcase
		else if (key[2]==0) //按键3按下时,LED闪烁
			case (led_control)
				2'b00 : led<=4'b1111;
				2'b01 : led<=4'b0000;
				2'b10 : led<=4'b1111;
				2'b11 : led<=4'b0000;
			default : led<=4'b0000;
			endcase
		else if (key[3]==0) //按键4按下时,LED全亮
			led=4'b1111;
		else
			led<=4'b0000; //无按键按下时,LED熄灭 
		end
endmodule

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Hello Jason

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

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

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

打赏作者

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

抵扣说明:

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

余额充值