键盘显示电路 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时输入才有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值