图2:共阴极数码管显示数字“1”
其他数字的演示就不做了,根据这个原理可以整理出0~9这10个数字的编码方式(适用共阳极,共阴极只要将编码取反即可):
图3:共阳极数码管编码表
这里涉及到两个概念:
- 段选:单个数码管的二极管控制信号(a~g),控制段选可以实现数码管显示不同的数字
- 位选:单个数码管的“电源开关”信号,只有在位选有效的情况下(有电情况下),控制数码管的段选才有意义
也就是说通过控制位选可以控制数码管是否上电工作,通过控制段选可以控制数码管显示具体的内容。
在通常的设计中,只用一个数码管显然是不太方便的,一般都需要4个、6个或者多个(这个看自身,我们这里用6个举例)。假设我们需要用6个数码管来显示数字,那么岂不是需要控制8个*6=48个信号,也就是需要48个IO口来进行控制?虽然我们知道FPGA的IO资源比较丰富,但是也架不住这么造不是?
所以一般在FPGA开发板中,基本都是将6个数码管的8个二极管的控制信号(段选)连接到了一起来统一控制,而将数码管的位选信号分开控制。
3、静态显示
我们可以通过位选信号去控制数码管点亮,而在同一时刻,位选选通的数码管上显示的字形是一样的,因为我们将 6 个数码管相对应的段选连在了一起,数码管的显示自然就相同了,数码管的这种显示方式即为静态显示。
接下来我以某Cyclone IVE的开发板为例,编写静态显示的驱动代码进行验证。该开发板有6个共阳极数码管(低电平控制亮),数码管位选控制信号(低电平有效)。
3.1、端口
驱动模块输入输出端口如下:
图4:数码管静态显示模块框图
各信号含义如下:
- 输入端:
- sys_clk:系统时钟,我的开发板是50M,周期20ns
- sys_rst_n:低电平有效