1、设计一个具有8位显示的电话按键显示器;
2、能准确地反映按键数字(按键S1-S8代表数字1-8);
3、显示器显示从低位向高位前移,逐位显示按键数字,最低位为当前输入位(最低为是数码管8);
4、设置一个“重拨”键(拨码开关1),按下此键,能显示最后一次输入的电话号码;
5、挂机2秒后或按熄灭按键(拨码开关2),熄灭显示器显示。
一样的需求,文库就有
module phone_display(
input clk,
input [7:0] button,
input re_dial,
input hang_up,
output reg [7:0] display
);
reg [7:0] last_num;
reg [2:0] shift_cnt;
reg [1:0] display_cnt;
always @(posedge clk) begin
if (hang_up || (display_cnt == 2 && shift_cnt == 7)) begin
display <= 8'b00000000;
shift_cnt <= 3'b000;
display_cnt <= 2'b00;
end else if (display_cnt == 2) begin
display_cnt <= 2'b00;
shift_cnt <= shift_cnt + 1;
end else begin
display_cnt <= display_cnt + 1;
end
if (re_dial) begin
display <= last_num;
end else begin
case (button)
8'b00000001: display <= {display[6:0], 1'b1};
8'b00000010: display <= {display[6:0], 1'b0};
8'b00000100: display <= {display[6:0], 1'b0};
8'b00001000: display <= {display[6:0], 1'b0};
8'b00010000: display <= {display[6:0], 1'b0};
8'b00100000: display <= {display[6:0], 1'b0};
8'b01000000: display <= {display[6:0], 1'b0};
8'b10000000: display <= {display[6:0], 1'b0};
default: display <= display;
end
if (button != 8'b00000000) begin
last_num <= display;
end
end
end
endmodule