【发布时间】:2017-03-02 20:10:07
【问题描述】:
我想在 7 段显示器上显示 0.0 到 99.5 范围内的数字,步长 0.5。 我有 3 个可用的七段显示器,它们连接在一个 MUX 中,所以我有 7 个用于段的引脚和 3 个 选择用于选择数字的引脚。 在随附的 Verilog 代码中,我显示了特定数字,问题是我不知道如何制作 一个循环,它将为特定数字设置选择引脚。 有人可以帮助我轻松实现这一目标吗? 当前代码仅显示零。 我注意到选择引脚设置和选择寄存器移位,但数字没有改变。 它总是按我希望显示的顺序显示最后一位数字。
module LED_7seg(
input clk,
output segA, segB, segC, segD, segE, segF, segG, segDP,
output dig0, dig1, dig2
);
// cnt is used as a prescaler - fbrd / prescaler
reg [23:0] cnt;
always @(posedge clk) cnt <= cnt+24'h1;
wire cntovf = &cnt;
// BCD is a counter that counts from 0 to 9
reg [3 : 0] BCD;
wire [15 : 0] BCD16;
// set of number
assign BCD16 = 'h350;
reg [2 : 0] Digit;
always @(posedge clk)
begin
if(Digit == 3'h4) begin
Digit <= 3'h1;
end else begin
Digit <= Digit + 3'h2;
end
case(Digit)
3'h1: BCD = BCD16[3 : 0];
3'h2: BCD = BCD16[7 : 4];
3'h4: BCD = BCD16[11 : 8];
default: BCD = BCD16[3 : 0];
endcase
end
reg [7:0] SevenSeg;
always @(*)
case(BCD)
4'h0: SevenSeg = 8'b11111100;
4'h1: SevenSeg = 8'b01100000;
4'h2: SevenSeg = 8'b11011010;
4'h3: SevenSeg = 8'b11110010;
4'h4: SevenSeg = 8'b01100110;
4'h5: SevenSeg = 8'b10110110;
4'h6: SevenSeg = 8'b10111110;
4'h7: SevenSeg = 8'b11100000;
4'h8: SevenSeg = 8'b11111110;
4'h9: SevenSeg = 8'b11110110;
default: SevenSeg = 8'b00000000;
endcase
assign {dig0, dig1, dig2} = Digit;
assign {segA, segB, segC, segD, segE, segF, segG, segDP} = ~SevenSeg;
endmodule
【问题讨论】:
-
查看
Digit的模式:0,2,4,1,3,5,1,3,5,1,3,5,... 想要的模式是1, 2,4,1,2,4,1,2,4,... 怎样才能实现?提示:无需添加,只需一行代码即可完成。