module led_dt ( rst_n,clkin,
dataout,en
);
input rst_n,clkin;
output[7:0] dataout;
output[3:0] en;
//------------------------------------扫描频率
reg[14:0] cnt_scan;
always
@ (posedge clkin or negedge rst_n)
if(!rst_n)cnt_scan<=15'b0;
else cnt_scan<=cnt_scan+1'b1;
reg[3:0] en;
always @ (cnt_scan)
begin
case(cnt_scan[14:13])
2'b00: en<=4'b1000; //显示第一个数码管
2'b01: en<=4'b0100; //显示第二个数码管
2'b10: en<=4'b0010; //显示第三个数码管
2'b11: en<=4'b0001; //显示第四个数码管
default:en<=4'b1000; //显示第一个数码管
endcase
end
//------------------------------------输出显示的数值设置
reg[3:0] databuff; //显示输入值
reg[7:0] dataout_r;
always @ (databuff)
begin
case(databuff)
4'b0000: //显示0
dataout_r<=8'b0000_0011;
4'b0001: //显示1
dataout_r<=8'b1001_1111;
4'b0010: //显示2
dataout_r<=8'b010_01011;
4'b0011: //显示3
dataout_r<=8'b0000_1101;
4'b0100: //显示4
dataout_r<=8'b1001_1001;
4'b0101: //显示5
dataout_r<=8'b0100_1001;
4'b0110: //显示6
dataout_r<=8'b0100_0001;
4'b0111: //显示7
dataout_r<=8'b0001_1111;
4'b1000: //显示8
dataout_r<=8'b0000_0001;
4'b1001: //显示9
dataout_r<=8'b0000_1001;
4'b1010: //显示A
dataout_r<=8'b0001_0000;
4'b1011: //显示B
dataout_r<=8'b0000_0000;
4'b1100: //显示C
dataout_r<=8'b0111_0000;
4'b1101: //显示D
dataout_r<=8'b0000_0010;
4'b1110: //显示E
dataout_r<=8'b0110_0000;
4'b1111: //显示F
dataout_r<=8'b0111_0000;
default:dataout_r<=8'b0111_0000;
endcase
end
//输入需要显示的数值
always @ (en)
begin
case(en)
4'b1000:
databuff<=3;
4'b0100:
databuff<=3;
4'b0010:
databuff<=3;
4'b0001:
databuff<=3;
default:databuff<=5;
endcase
end
wire[7:0] dataout;
assign dataout=dataout_r;
endmodule
这个databuff没有变啊,你应该用always@(*)或者always@(posedge clkin)
你的代码都用一些计数器来控制块,我真没这么用过,感觉对于同步方面应该不会太好。
你的扫面时间可以长一点,用ms来扫描。
一周热门 更多>