FPGA项目(11)——基于FPGA的按键计数器

        这次做的按键计数器,功能不复杂,比较简单。稍微花点篇幅讲解一下。首先给出设计的具体要求:

        首先给出顶层的原理图设计:

 

         比较难的功能应该算是第四点,即高位的0不予以显示。但是,原子家提供的数码管显示例程里面,已经包含了这个功能,所以我们直接拿来调用就行。具体代码我就不贴了,有需要的去原子官网下载。

        另外就是按键消抖模块,关于按键消抖,我之前已经讲解过了,参考我的这篇博客:

       FPGA项目(3)--按键消抖_嵌入式小李的博客-CSDN博客icon-default.png?t=N4P3https://blog.csdn.net/guangali/article/details/130674206?spm=1001.2014.3001.5501        接下来就是按键计数器的逻辑设计了。这个也不难。定义三个按键和一个数据,不同按键按下,数据对应加不同数值就行:

        

         最后,给出逻辑控制模块的具体代码:

        

module counter(
input	clk,
input	rst,
input	k1,							//按下+1
input	k2,							//按下+10
input	k3,							//按下+100			这里的按键信号都经过了消抖处理

output					en,			//数码管使能位
output					sign,		//符号控制位
output		 [5:0]		point,
output   reg [19:0]     data        // 6个数码管要显示的数值
);


always @(posedge clk or negedge rst) begin
	if(!rst)
		data<=20'd0;				//按下复位键  结果清0
	else if(k1==1'b0)
		data<=data+20'd1;
	else if(k2==1'b0)
		data<=data+20'd10;
	else if(k3==1'b0)
		data<=data+20'd100;
	else
		data<=data;
		
end	
assign	en=1'b1;			//数码管一直使能
assign	sign=1'b0;			//不显示负号
assign  point=6'b000000;	//不显示小数点

endmodule