按键计数将结果通过8段数码管显示FPGA设计Verilog逻辑源码Quartus11.0工程文件,FPGA型号为CYCLONE4E系列中的EP4CE6E22C8,可以做为你的学习设计参考。
module key_counter(clk,key,reset,seg_duan,seg_wei);
input clk,key,reset;
output [7:0] seg_duan;
output [2:0] seg_wei;
wire clk,key,reset;
reg [7:0] seg_duan;//数码管段选
reg [2:0] seg_wei;//数码管位选
reg key_out;
parameter s0=2'b00,s1=2'b01,s2=2'b10,s3=2'b11;
reg [1:0] state;
reg [3:0] key_counter_ge;//按键计数个位
reg [3:0] key_counter_shi;//按键计数十位
reg [3:0] key_counter_bai;//按键计数百位
reg [9:0] div_count;//数码管扫描时钟分频计数
reg clk_scan;//位选时钟
reg [1:0] wei_select;//位选信号
/****************************按键消抖**********************************/
always @(posedge clk)
begin
case (state)
s0:
begin
key_out<=1'b1;
if(key==1'b0)
state<=s1;
else
state<=s0;
end
s1:
begin
if(key==1'b0)
state<=s2;
else
state<=s0;
end
s2:
begin
if(key==1'b0)
state<=s3;
else
state<=s0;
end
s3:
begin
if(key==1'b0)
begin
key_out<=1'b0;
state<=s3;
end
else
begin
key_out<=1'b1;
state<=s0;
end
end
default:
state<=s0;
endcase
end
/****************************按键计数**********************************/
always @(negedge key_out or negedge reset)
begin
if(!reset)
begin
key_counter_ge <=4'd0;
key_counter_shi<=4'd0;
key_counter_bai<=4'd0;
end
else
begin
if(!key_out)//判断按键是否按下
begin
key_counter_ge<=key_counter_ge+1'b1;//按键计数个位加一
if(key_counter_ge==4'd9)
begin
key_counter_ge<=4'd0;//个位清零
key_counter_shi<=key_counter_shi+1'b1;//按键计数十位加一
if(key_counter_shi==4'd9)
begin
key_counter_shi<=4'd0;//十位清零