这次做的按键计数器,功能不复杂,比较简单。稍微花点篇幅讲解一下。首先给出设计的具体要求:
首先给出顶层的原理图设计:
比较难的功能应该算是第四点,即高位的0不予以显示。但是,原子家提供的数码管显示例程里面,已经包含了这个功能,所以我们直接拿来调用就行。具体代码我就不贴了,有需要的去原子官网下载。
另外就是按键消抖模块,关于按键消抖,我之前已经讲解过了,参考我的这篇博客:
FPGA项目(3)--按键消抖_嵌入式小李的博客-CSDN博客https://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