(1)共阴极数码管和共阳极数码管的七段译码驱动程序是否一致?主要差别是什么? (22分14161 级联计数的最大值是多少?在该最大值下,若利用硬件描达语言这计,计数器的输出位笕应是多少? (3)彩灯控制电路设计中,若控制16只彩灯,每1只彩灯亮2s,程序应如何设计? (4彩灯控制电路设计中,彩灯先从左到右,后从右到左,依次往返循环,程序应如何设计
时间: 2023-11-27 14:51:20 浏览: 130
max7219是七段公阴极驱动的,是最好的数码管驱动芯片。这里面有对各个寄存器的控制,和显示。
5星 · 资源好评率100%
(1) 共阴极数码管和共阳极数码管的七段译码驱动程序不一致。主要区别在于其对应的数字编码不同,共阴极数码管的数字编码为低电平有效,而共阳极数码管的数字编码为高电平有效。
(2) 14161 级联计数的最大值是 2^14 = 16384。在该最大值下,利用硬件描述语言进行计数器的输出位数应为 14 位。
(3) 程序设计如下:
```
module led_control(
input clk, // 时钟信号
output reg [15:0] led, // 彩灯控制信号
output reg start // 开始控制信号
);
reg [3:0] count = 0; // 计数器,计数范围为 0-15
reg [1:0] time = 0; // 时间计数器,计数范围为 0-1
always @(posedge clk) begin
if (start) begin
time <= time + 1; // 时间计数器加 1
if (time == 2) begin
time <= 0; // 时间计数器清零
led[count] <= 1; // 当前计数器位置的彩灯亮
if (count == 15)
count <= 0; // 如果计数器达到最大值,清零
else
count <= count + 1; // 否则计数器加 1
end
end
else begin
time <= 0;
led <= 0; // 彩灯全部熄灭
count <= 0; // 计数器清零
end
end
endmodule
```
(4) 程序设计如下:
```
module led_control(
input clk, // 时钟信号
output reg [15:0] led, // 彩灯控制信号
output reg start // 开始控制信号
);
reg [3:0] count = 0; // 计数器,计数范围为 0-15
reg [1:0] time = 0; // 时间计数器,计数范围为 0-1
reg direction = 1; // 方向标志位,初始为从左到右
always @(posedge clk) begin
if (start) begin
time <= time + 1; // 时间计数器加 1
if (time == 2) begin
time <= 0; // 时间计数器清零
led[count] <= 1; // 当前计数器位置的彩灯亮
if (count == 15)
direction <= 0; // 如果计数器达到最大值,改变方向
else if (count == 0)
direction <= 1; // 如果计数器回到起始位置,改变方向
if (direction)
count <= count + 1; // 如果方向为从左到右,计数器加 1
else
count <= count - 1; // 如果方向为从右到左,计数器减 1
end
end
else begin
time <= 0;
led <= 0; // 彩灯全部熄灭
count <= 0; // 计数器清零
direction <= 1; // 方向标志位恢复初始值
end
end
endmodule
```
阅读全文