键盘显示电路 Verilog 代码

module jp(clk100khz,din,scan,dout);
input clk100khz;//数码管扫描参数,为100khz
input [3:0] din;//按键输入
output reg [7:0] dout;//七段数码管值
output reg [5:0] scan;//数码管位码
reg[3:0] cnt,s;//数码管扫描参数
reg [7:0]temp,led1,led2,led3,led4,led5,led6;
reg flag,clk1;//flag有键按下的标志,clk1分频参数
reg[25:0] count;//分频参数
always @ (posedge clk100khz)//分频模块。Clk1=3.3hz
begin
if(count=='d15000)
begin clk1=~clk1;count<=0;end
else 
begin count<=count+1'b1;end
end

always @ (posedge clk1)//接收按键的值并译码,将数码管的值左移
begin
if(din[3:0]<4'b1111) begin flag<=0;
case (din[3:0])
4'b1110:begin temp[7:0]<=8'b00000110;end//1
4'b1101:begin temp[7:0]<=8'b01011011;end//2
4'b1011:begin temp[7:0]<=8'b01001111;end//3.
4'b0111:begin temp[7:0]<=8'b01100110;end//4
4'b1100:begin temp[7:0]<=8'b01101101;end//5
4'b1010:begin temp[7:0]<=8'b01111101;end//6
4'b0110:begin temp[7:0]<=8'b00000111;end//7
4'b1001:begin temp[7:0]<=8'b11111111;end//8
default: begin temp[7:0]<=8'b000000000;end
endcase

end


if(flag==0&led6==6'b000) begin flag<=1;
led6<=led5;led5<=led4;led4<=led3;led3<=led2;led2<=led1;led1<=temp;//滚动
end
else if(din[3:0]==4'b1111) begin flag<=1;end
end

always @ (posedge clk100khz)//数码管显示及刷新
begin 
if(cnt==3'b101)
begin cnt<=0;end
else
begin cnt<=cnt+1;end
end


always @(cnt)
begin
case(cnt)
3'b000:begin scan<=6'b000001;dout[7:0]<=led1;end
3'b001:begin scan<=6'b010;dout[7:0]<=led2;end
3'b010:begin scan<=6'b0100;dout[7:0]<=led3;end
3'b011:begin scan<=6'b01000;dout[7:0]<=led4;end
3'b100:begin scan<=6'b010000;dout[7:0]<=led5;end
3'b101:begin scan<=6'b100000;dout[7:0]<=led6;end
default:begin scan<=6'b000;end
endcase
end
endmodule

代码分析:在原来例子代码基础上修改一句flag==0&led6==6'b000,就是当led6为0时输入才有效。

你可能感兴趣的:(Verilog,HDL,Verilog,HDL)