Verilog中的七段数码管分频显示问题

先说一下七段数码管的原理:
动态数码管显示的原理是: 每次选通其中一位, 送出这位要显示的内
容, 然后一段时间后选通下一位送出对应数据,4 个数码管这样依次选通并送出相应的数据,结束后再重复进行。这样只要选通时间选取的合适,由于人眼的视觉暂留,数码管看起来就是连续显示的。
这里面涉及到七段数码管的分频问题(决定多久从这个数码管换到下一个数码管显示)

下面仅展示并说明七段数码管的分频问题

(所用的板子为basys3,本身的clk为100MHZ)
当时看到数码管的显示分频如下, 400HZ换一个数码管显示,也即四个数码管都显示所需的时间为(1/400) *4 = 0.01s;
//分频
integer clk_cnt;
reg clk_400Hz;
always @(posedge clk)
if(clk_cnt==30’d125000)
begin clk_cnt <= 1’b0; clk_400Hz <= ~clk_400Hz;end
else
clk_cnt <= clk_cnt + 1’b1;
//----------------------------------------------------------
当然上面的分频没问题,我就想为什么是这样,然后改了上面的代码,将频率改为40HZ,如下。
//分频
reg clk_40hz = 0;
integer clk_cnt = 1’b0;
always @(posedge clk)
if(clk_cnt == 30’d1250000)
begin
clk_cnt <= 1’b0;
clk_40hz <= ~clk_40hz;
end
else
clk_cnt = clk_cnt + 1’b1;

频率太慢了,看起来闪眼睛。就是你能感觉到每个数码管都在明暗之间切换。
频率改为40000HZ,如下。
//分频
reg clk_40000hz = 0;
integer clk_cnt = 1’b0;
always @(posedge clk)
if(clk_cnt == 30’d1250)
begin
clk_cnt <= 1’b0;
clk_40000hz <= ~clk_40000hz;
end
else
clk_cnt = clk_cnt + 1’b1;

感觉和400hz的一样,正常。

然后我干脆用了板子自己的频率,即不要这个分频模块了。然后下板之后数码管的显示很暗,不知道他在显示什么。
下面是一个百度的解释

先废话一下:扫描频率太低数码管会出现闪烁的现象,频率太高则亮度不够甚至无法看清,所以一般扫描间隔多为几毫秒。
一般间隔1ms就差不多了,如果不够亮可以适当地增大间隔时间,不会有影响。但是,有一点需要注意,从点亮第一支数码管到最后一只数码管被点亮,整个过程最好不要超过20ms,一旦超过则会出现闪烁的现象。
另外,点亮一只数码管后,在点亮第二支数码管之前需要先关断第一支数码管,否则会出现显示混乱的情况。

引用链接:https://zhidao.baidu.com/question/420791577.html
可以看出,如果说整个过程不要超过0.02s,则间隔时间t = 0.02 / 4 = 0.005s,则频率clk_out的频率最小为1/0.005 = 200hz.

  • 11
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值