FPGA學習筆記(二)------按鍵LED

無按鍵按下時, 全滅;
按鍵1按下時, 自右向左的流水效果;
按鍵2按下時, 自左向右的流水效果;
按鍵3按下時,閃爍;
按鍵4按下時, 全亮;

//***********Copyright (c)************//
//-------------------------------------
// File name:           my_key_led
// Last modified Date:  2020/6/10 22:30
// Last Version:        V1.1
// Descriptions:        按鍵控制LED
//	無按鍵    				全滅
//	key0    				 	右-左流水燈
//	key1      				左-右流水燈
//	key2      				全閃爍
//	key3       				全亮
//-------------------------------------
// LED流水燈引腳分配,高電平點亮
// LED0        D11
// LED1        C11
// LED2        E10
// LED3        F9
// sys_clk     E1
// sys_rst_n   M1
//	key0			E16
//	key1			E15
//	key2			M2
//	key3 			M16
//-------------------------------------
//*************************************//

module my_key_led
(
input 			sys_clk,     			//系統時鐘50MHZ
input 			sys_rst_n,  			//復位,低電平有效
input				[3:0]	key,				//4個key
output	reg	[3:0]	led      	   //4個LED燈
);

//reg define 
reg	[23:0]	counter ;		//定時200ms,需要24位。
reg	[1:0]		led_ctrl	;	//led_ctrl led控制 

//計數器對系統時鐘計數,計時0.2秒。0.2s/20ns=1000_0000(d)
always @(posedge sys_clk or negedge sys_rst_n) //時鐘上升沿,復位下降沿
begin
	if (!sys_rst_n)         		  //如果復位		   
		counter <=24'd0;				  //計數器清0,重新開始計時
	else 						           //if嵌套
		if (counter<24'd1000_0000)	  //沒有計時到0.2s
			counter<=counter+1'b1;	  //計數器加1
		else
			counter<=24'd0;			  //到0.2s,計數器清0
end

//狀態計數器[1;0] 兩位二進制,用於選擇led燈四個狀態
always @(posedge sys_clk or negedge sys_rst_n)
begin
	if(!sys_rst_n)
		led_ctrl<=2'd0;
	else
		if(counter==24'd1000_0000)
			led_ctrl<=led_ctrl+1'b1;
		else
			led_ctrl<=led_ctrl;
end

//按鍵改變LED狀態
always @(posedge sys_clk or negedge sys_rst_n)
begin
	if(!sys_rst_n)
		led<=4'b0000;
	else
		if(key[0]==1'b0)      //右-左流水燈
			case(led_ctrl)
				2'd0:	led<=4'b1000;
				2'd1:	led<=4'b0100;				
				2'd2:	led<=4'b0010;
				2'd3:	led<=4'b0001;				
			endcase
		else if(key[1]==1'b0)      //左-右流水燈
			case(led_ctrl)
				2'd0:	led<=4'b0001;
				2'd1:	led<=4'b0010;				
				2'd2:	led<=4'b0100;
				2'd3:	led<=4'b1000;				
			endcase		
		else if(key[2]==1'b0)      //全閃爍
			case(led_ctrl)
				2'd0:	led<=4'b0000;
				2'd1:	led<=4'b1111;				
				2'd2:	led<=4'b0000;
				2'd3:	led<=4'b1111;				
			endcase		
		else if(key[3]==1'b0)      //全亮
				led<=4'b1111;												
		else
				led<=4'b0000; //無按鍵按下時, LED熄滅
end
endmodule
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章