文档库 最新最全的文档下载
当前位置:文档库 › 使用JK触发器构成一个十三进制计数器

使用JK触发器构成一个十三进制计数器

1. 使用JK触发器构成一个十三进制计数器。由按键提供计数脉冲,每按一下按键,计数器的数值加1;计数器的数值在1位数码管上以十六进制的形式显示。
//////////去抖动模块///////////////
module JN_cp(clk,out);//分频24Mhz——50hz
input clk;
output out;
reg out;
reg[17:0]q;
always @(negedge clk)
begin
if(q==18'd240000)
begin
q=18'd0000000;
out=~out;
end
else
q=q+1'b1;

end
endmodule

module JN_d(cp,key,q);//D触发器
input cp;
input key;
output q;
reg q;
always @(negedge cp)
begin
q=key;
end
endmodule

module JN_delay(clk24M,key,q);//去抖动
input clk24M;
input key;
output q;
wire m;
JN_cp JN_cp1(clk24M,m);
JN_d JN_d2(m,key,q);
endmodule


//////////////计数器模块////////////////////
module JN_JK(cp,j,k,q);//JK触发器
input j,k,cp;
output q;
reg q;
always @(negedge cp)
q=j&~q|~k&q;
endmodule

module JN_count13(cp,q4,q3,q2,q1);//由JK触发器构成的十三进制计数器
input cp;
output q4,q3,q2,q1;
wire j1,j2,j3,k1,k2;
assign j1=~q4|(~q3);
assign j2=q2&q1;
assign j3=q3&q2&q1;
assign k1=~(q3&q2&q1)&q3;
assign k2=(~q2|q1)&(q4|q2);
JN_JK jk1(cp,j1,1'b1,q1);
JN_JK jk2(cp,q1,q1,q2);
JN_JK jk3(cp,j2,k2,q3);
JN_JK jk4(cp,j3,k1,q4);
endmodule


/////////////显示模块////////


module JN_show(sw,seg);//显示译码器
input[3:0] sw;
output[7:0] seg;
reg[7:0] seg_reg;
always @(sw)
case(sw)
4'b0000:seg_reg=8'hc0;
4'b0001:seg_reg=8'hf9;
4'b0010:seg_reg=8'ha4;
4'b0011:seg_reg=8'hb0;
4'b0100:seg_reg=8'h99;
4'b0101:seg_reg=8'h92;
4'b0110:seg_reg=8'h82;
4'b0111:seg_reg=8'hf8;
4'b1000:seg_reg=8'h80;
4'b1001:seg_reg=8'h90;
4'b1010:seg_reg=8'h88;
4'b1011:seg_reg=8'h83;
4'b1100:seg_reg=8'hc6;
4'b1101:seg_reg=8'ha1;
default:seg_reg=8'hc0;

endcase
assign seg=~seg_reg;
endmodule
module JN_main(clk24M,key,led);
input clk24M;
input key;
output[7:0]led;
wire cp;
wire [3:0]q;
JN_delay j1(clk24M,key,cp);//去抖动
JN_count13 j2(cp,q[3],q[2],q[1],q[0]);//由JK触发器构成的十三进制计数器
JN_show j3(q,led);//显示译码器
endmodule

















相关文档