共阳极数码管显示0~9_FPGA入门系列11数码管

文章

简介

本系列文章主要针对FPGA初学者编写,包括FPGA的模块书写、基础语法、状态机、RAM、UART、SPI、VGA、以及功能验证等。将每一个知识点作为一个章节进行讲解,旨在更快速的提升初学者在FPGA开发方面的能力,每一个章节中都有针对性的代码书写以及代码的讲解,可作为读者参考。

23eea0b73fc4983555d3844c247291ba.gif

12

第十二章:数码管

23eea0b73fc4983555d3844c247291ba.gif

        在很多初级开发板上面, 数码管属于标配的外设, 其基本的单元是发光二极管, 一般是由八个发光二极管组成“8”字形的结构,使用七段点亮的线段来拼成常见的数字和某些字母,这种显示方式我们在数字电路中非常容易见到。再加上右下角显示的小数点,实际上一个显示单元包括了 8 根信号线。如图 1 所示。

共阳极数码管显示0~9_FPGA入门系列11数码管_第1张图片

图 1 数码管二极管结构

        八个发光二极管中的一端会连接一起, 若是阳极(正极)连到一起称为数码管共阳极,阴极(负极) 连到一起称为共阴极, 没有连接到一起的一端分别连接到 FPGA 芯片的八个引脚上。当我们想在数码管上显示所需的数字时,只需要导通对应的发光二极管即可。

        一般来说在一个开发板上面可能会有多个数码管, 每一个数码管需要占用FPGA 芯片的八个引脚,如此 FPGA 芯片的引脚会被数码管占用很多,一个芯片的引脚资源是比较紧缺且重要的, 为了解决这个问题,可以在硬件上将8个数码管连接 FPGA 芯片的一端连接到一起,然后使用一个三八译码器来选通我们所要显示数字的数码管, 当我们需要在所需的数码管上显示数字时,只需要先控制三八译码器选通对应的数码管,然后再选择性的导通八个发光二极管即可。如图 2 所示为三八译码器选择六个数码管。

共阳极数码管显示0~9_FPGA入门系列11数码管_第2张图片

图 2 3-8 译码器控制六个数码管

        三八译码器的真值表如下:

共阳极数码管显示0~9_FPGA入门系列11数码管_第3张图片

        假设我们想在第一个数码管上面显示一个数据,该数据在复位的时候为0, 不复位的时候为 1。为了能在第一个数码管上面显示数据,首先我们应该通过 3-8 译码器选通第一个数码管,然后再选通对应的发光二极管即可。
        代码示例 1:

共阳极数码管显示0~9_FPGA入门系列11数码管_第4张图片

        代码解析 1:
        ① 第 5、 6 行分别定义了数码管的位选和段选,通过控制 sel 来选择选通哪一个数码管,通过控制 seg 来控制在对应的数码管显示什么数据;
        ② 第 9、 10 行定义了两个参数,分别是 0 和 1 在数码管上的译码数据;
        ③ 第 13 行的 always 控制了 sel 的赋值,无论是否复位均选择第一个数码管;
        ④ 第 19 行的 always 控制了 seg 的赋值,当复位时给出 0 的译码值, 不复位时给出 1 的译码值。

        以上给出了在一个数码管上面显示数据的代码及解析,但是在大部分的情况下, 多个数码管同时使用的概率更大,在此讨论一下如何在固定的两个数码管上显示固定的数值。
        假设在前两个数码管上显示数据 10,由于需要在两个数码管上显示数值,因此我们需要选通两个数码管,但是由于 3-8 译码器每个时刻只能选通一个子路,因此同时选通两个数码管是不可行的, 所以我们需要一些其他方法解决该问题,我们可以利用人眼的识别能力, 在两个数码管之间快速的选择, 当选择的频率(一般为 60Hz)超过人眼暂留效应后,即可在两个数码管上同时显示数据。首先我们需要通过 sel 选通一个数码管,并给出需要在该数码管上显示的 seg 的值,当 sel 选通另外一个数码管时,我们给出另外一个 seg 的值即可。
代码示例 2:

共阳极数码管显示0~9_FPGA入门系列11数码管_第5张图片 共阳极数码管显示0~9_FPGA入门系列11数码管_第6张图片

代码解析 2:

        ①第 22 行的 always 产生了一个 1ms 的计数器,主要作用是控制选择每一个数码管的频率;
        ②第 31 行的 always 是根据前面的计数器产生的标志位;
        ③第 40 行的 always 产生了 sel 的变化,每隔 1ms 变化一次;
        ④第 49 行的 always 是在选择不同的数码管时,对变量 num 赋不同的值;
        ⑤第 59 行的 always 是对 num 进行相应的译码。

        通过对数码管的学习,可以更好地掌握 Verilog HDL 的编程思想和风格。若是有兴趣, 读者可以根据入门系列10按键消抖,设定一个按键为暂停键、 一个按键为复位键。试着完成一个秒表, 对应数码管上显示毫秒数、秒数及分数,通过按键进行时间调整。

在第十四章中将对Verilog HDL 中串口通信进行讲解。

未完待续共阳极数码管显示0~9_FPGA入门系列11数码管_第7张图片

23eea0b73fc4983555d3844c247291ba.gif

共阳极数码管显示0~9_FPGA入门系列11数码管_第8张图片 关注我们了解更多资讯

共阳极数码管显示0~9_FPGA入门系列11数码管_第9张图片 共阳极数码管显示0~9_FPGA入门系列11数码管_第10张图片

你可能感兴趣的:(共阳极数码管显示0~9,共阳极数码管编码表,共阴极数码管编码表,数码管显示数字0到7)