zoukankan      html  css  js  c++  java
  • 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,接着个位和十位的段码能够点亮。但是其他位的段码没有点亮,不能显示数字。

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

  • 相关阅读:
    June. 26th 2018, Week 26th. Tuesday
    June. 25th 2018, Week 26th. Monday
    June. 24th 2018, Week 26th. Sunday
    June. 23rd 2018, Week 25th. Saturday
    June. 22 2018, Week 25th. Friday
    June. 21 2018, Week 25th. Thursday
    June. 20 2018, Week 25th. Wednesday
    【2018.10.11 C与C++基础】C Preprocessor的功能及缺陷(草稿)
    June.19 2018, Week 25th Tuesday
    June 18. 2018, Week 25th. Monday
  • 原文地址:https://www.cnblogs.com/FPGAer/p/13033155.html
Copyright © 2011-2022 走看看