• FPGAer:动态数码管显示实战


    实战任务:在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,接着个位和十位的段码能够点亮。但是其他位的段码没有点亮,不能显示数字。

    段码点亮是共阳极低电平点亮。

  • 相关阅读:
    excel
    POJ 1149--PIGS
    A
    强大的sscanf
    hdu 5754 Life Winner Bo(威佐夫博弈)
    hdu 5723 Abandoned country(最小生成树,dfs)
    hdu 5734 Acperience
    The Monocycle,UVa 10047(状态记录广搜)
    Fire!(两次bfs)
    NP-Hard Problemd(二分图判定着色)
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13033155.html
Copyright © 2020-2023  润新知