标签:data 没有 相同 pos idt bsp int 一个 块代码
实战任务:在6位数码管上计数,循环计数0到999999,数字是每隔100ms增加1。
动态数码管显示原理:
如下图所示,6个数码管的八位段码都连接在一起,如果6个数码管都点亮,段码一定显示相同的数字。但是又想6个数码管显示不同的数字,那么只能动态地显示数码管,如何动态显示呢?需要利用人眼的视觉暂留,假设如果a数码管点亮数字1,接着a数码管熄灭,b数码管点亮数字2。但是在人眼看来,有12数字出现,从而达到不同数码管有不同的数字。
所以代码中顶层模块包括计数、显示模块。
计数模块代码如下:
每隔0.1s数字加1,实现data从0加到999999。
always @ (posedge clk or negedge rst_n) begin
if (!rst_n) begin
cnt <= 23‘b0;
flag<= 1‘b0;
end
else if (cnt < 5000000 - 1‘b1) begin
cnt <= cnt + 1‘b1;
flag<= 1‘b0;
end
else begin
cnt <= 23‘b0;
flag <= 1‘b1;
end
end
always @ (posedge clk or negedge rst_n) begin
if (!rst_n)begin
data <= 20‘b0;
point <=6‘b000000;
en <= 1‘b0;
sign <= 1‘b0;
end
else begin
point <= 6‘b000000;
en <= 1‘b1;
sign <= 1‘b0;
if (flag) begin
if(data < 20‘d999999)
data <= data +1‘b1;
else
data <= 20‘b0;
end
end
end
显示模块:
数码管的工作时钟在5MHZ,所以要时钟分频。
设置一个24位的寄存器把六位数码管的值存下来。
(关键部分)设置一个1ms的时钟,使得六位数码管依次显示,但是人眼看不出来的。
上一步的很快显示附带有传数值给每一位的段码,比如数字12,尽管其他位的数码管会点亮,但是只有个位、十位被给予了1和2,接着个位和十位的段码能够点亮。但是其他位的段码没有点亮,不能显示数字。
段码点亮是共阳极低电平点亮。
标签:data 没有 相同 pos idt bsp int 一个 块代码
原文地址:https://www.cnblogs.com/FPGAer/p/13033155.html