2位数码管动态显示0-99,5个按键控制,功能分别是加一,减一,加二,减二,清零,用Verilog代码实现,数码管低有效
时间: 2024-05-04 15:22:03 浏览: 166
下面是Verilog代码实现:
```verilog
module digital_display (
input clk, // 时钟输入
input [4:0] key, // 按键输入
output reg [7:0] seg // 数码管输出
);
reg [5:0] cnt; // 计数器,用于记录当前显示的数字
always @ (posedge clk) begin
case (key)
5'b00001: cnt <= 0; // 按下清零键,将计数器清零
5'b00010: cnt <= cnt + 1; // 按下加一键,计数器加一
5'b00100: cnt <= cnt - 1; // 按下减一键,计数器减一
5'b01000: cnt <= cnt + 2; // 按下加二键,计数器加二
5'b10000: cnt <= cnt - 2; // 按下减二键,计数器减二
default: cnt <= cnt; // 其他情况下,计数器不变
endcase
end
// 数码管的显示采用常见的共阴极方式
// 数码管的每个段的控制信号 seg_xxx 低有效
always @ (cnt) begin
case (cnt)
0: seg = 8'b11000000; // 数字0的显示
1: seg = 8'b11111001; // 数字1的显示
2: seg = 8'b10100100; // 数字2的显示
3: seg = 8'b10110000; // 数字3的显示
4: seg = 8'b10011001; // 数字4的显示
5: seg = 8'b10010010; // 数字5的显示
6: seg = 8'b10000010; // 数字6的显示
7: seg = 8'b11111000; // 数字7的显示
8: seg = 8'b10000000; // 数字8的显示
9: seg = 8'b10010000; // 数字9的显示
10: seg = 8'b11111110; // 数字10的显示
11: seg = 8'b11111100; // 数字11的显示
12: seg = 8'b11101110; // 数字12的显示
13: seg = 8'b00111110; // 数字13的显示
14: seg = 8'b10011100; // 数字14的显示
15: seg = 8'b00011110; // 数字15的显示
16: seg = 8'b01111010; // 数字16的显示
17: seg = 8'b10000011; // 数字17的显示
18: seg = 8'b11000110; // 数字18的显示
19: seg = 8'b00001110; // 数字19的显示
default: seg = 8'b11111111; // 其他情况下,全部数码管关闭
endcase
end
endmodule
```
上述代码中,使用了一个计数器 cnt 来记录当前需要显示的数字,按键输入 key 用于控制计数器的增减和清零。在时钟上升沿时,根据按键输入更新计数器的值。在计数器的值发生变化时,数码管的输出也会相应地更新。数码管的显示采用了常见的共阴极方式,每个数码管的控制信号 seg_xxx 低有效。当计数器为 0-19 时,对应的数字将会被显示出来;当计数器为其他值时,全部的数码管将关闭。
阅读全文