zynq实战篇2-led_key

该模块描述了一个基于50MHz时钟的LED和按键控制系统。当按键未按下时,其管脚连接到高电平;按下后,连接到低电平。系统包含一个计数器生成0.5秒的时钟信号,控制LED的状态在0.5秒间隔内切换。根据按键组合,LED会有不同的亮灯模式。
摘要由CSDN通过智能技术生成

在这里插入图片描述

如图所示,底板(ps+pl)上面有五个按键,
				按键没有按下时,按键为悬空状态,管脚与高电平相连
				按键按下后,管脚与低电平相连

本节目标

在这里插入图片描述

module led_key(
	input				clk			,//clk = 50mhz
	input				rst_n		,
	input		[1:0]	key			,//two key
	
	output	reg	[1:0]	led			//two led,reg are because use in always block
    );
 reg 	[24:0]		cnt;   //50mhz=50_000_000,1s=50mhz/50mhz,0.5s=50mhz/50mhz/2
 reg				led_ctrl; //led control are two mode,because only need 0/1

//the block generate 0.5s colck singal  
always @ (posedge clk or negedge rst_n) begin
 	if(!rst_n)
 		cnt <= 25'b0;
 	else if(cnt < 25'd2500_0000)
 		cnt <= cnt + 25'b1;
 	else
 		cnt <= 25'd0;
 end 
    
//the block every 0.5s negate led_ctrl mode
always @ (posedge clk or negedge rst_n) begin
 	if(!rst_n)
 		led_ctrl <= 1'b0;
 	else if(cnt == 25'd2500_0000)//到达0.5s
 		led_ctrl <= ~led_ctrl;//negate
 end

//上面块使得led_ctrl每0.5s值变换一次,所以只需led_ctrl=0时亮一个或几个(0.5s),=1时亮一个或几个(0.5s) 
always @ (posedge clk or negedge rst_n) begin
 	if(!rst_n)
 		led <= 2'b11;
 	else case (key)
 				2'b10: //key0
 					if(led_ctrl == 1'b0)
 						led <= 2'b01;//led0
 					else
 						led <= 2'b10;//led1
 				2'b01://key1
 					if(led_ctrl == 1'b0)
 						led <= 2'b11;//led0 and led1
 					else
 						led <= 2'b00;
 				2'b11: //key0 and key1
 						led <= 2'b11;
 				default:	;	
 		 endcase	
 end
 
endmodule

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值