代码下载
7段数码管驱动电路(顶层文件):
版本1.1: seven_segments.vhd (5.0 KB)
新增用于配置7段数码管极性的通用参数
版本1.0: seven_segments_v1_0.vhd (4.4 KB)
首次公开发布
二进制转BCD转换器(必须包含在项目中): binary_to_bcd.vhd (5.8 KB)
二进制转BCD数字转换器(必须包含在项目中): binary_to_bcd_digit.vhd (3.2 KB)
BCD转7段码映射器(必须包含在项目中): bcd_to_7seg_display.vhd (2.0 KB)
特点
- 7段数码管驱动器的VHDL源代码
- 在7段数码管上显示多位整数
- 不显示前导零
- 可配置的7段数码管数量
- 可配置的输入整数显示范围
- 可配置的7段数码管极性
介绍
本文详述了用于CPLD和FPGA的多位数7段数码管驱动电路,采用VHDL语言编写。该模块从用户逻辑读取整数,并在所需数量的7段数码管上输出该整数。对于位数少于显示宽度的整数,不显示前导零。本模块使用Quartus II 13.1.0版本设计。资源需求取决于具体实现方式。图1展示了7段数码管驱动器集成到系统中的典型示例。
图 1. 实现示例
操作原理
图2展示了该模块在7段数码管上显示输入整数所执行的操作。
图 2. 执行操作
二进制转 BCD 转换
该模块使用此处提供的二进制转BCD转换器完成二进制到BCD的转换。
禁用前导零
该组件通过或逻辑判断每个BCD数字是否为前导零。结果作为多路复用器的地址信号,每个复用器传递原始值(非前导零)或将其设为"1111"(若为前导零)。图3展示了该电路。
图 3. 前导零消除
此方法有效,因为下节描述的BCD到7段映射在接收到非数字BCD值(即值>"1001")时会熄灭7段显示器。
BCD 至 7 段显示映射
bcd_to_7seg_display.vhd文件将BCD数字映射到7段输出,如图所示。这些输出基于共阳极7段显示配置。顶层文件seven_segments.vhd中的多路复用器选择将这些值或其反相值发送至输出端口。如下方"参数泛型"章节所述,ss_polarity 泛型决定此选择。
参数泛型
组件实体中有三个用于配置的泛型。
digits
digits 泛型设置组件控制的7段显示器数量。
bits
bits 泛型用于执行内部二进制到BCD的转换。该泛型应设置为表示输入整数二进制范围所需的最大位数。通常对应7段显示器可显示的最大数值。表示特定数字位数所需的最大比特数由公式1定义。

结果总是向上取整(例如4位数需要3.322*4=13.288,取整为14位)。
ss_polarity
ss_polarity 泛型设置驱动7段显示器的输出信号极性。对于共阳极显示器(低电平=亮,高电平=灭)设为’0’,共阴极显示器(高电平=亮,低电平=灭)设为’1’。
端口描述
表1描述了7段显示驱动器的端口。
表 1. 端口描述
数字显示
图4展示了一个时序图示例。本例中,7段数码管数量配置为3个,如digits 泛型所示。通用位宽设为10,因为需要10位二进制数才能表示三个7段数码管能显示的最大数值(参见前文"参数泛型"章节)。通用参数ss_polarity 设为’0’,表示共阳极配置。要显示数字,只需将数值输入到数值输入端口。这里输入了数字"89"进行显示。当数字完成内部转换(需要位宽+3个时钟周期)后,将如图所示输出到7段数码管。首位数字的零不显示,对应输出设置为全灭:“1111111”。第二个数字"8"所有段点亮:“0000000”,末位数字"9"仅 ‘e’ 段熄灭:“0000100”。当输入数字变为"123"时,组件再次执行转换并将结果映射到对应的7段输出。
图 4 。 时序图示例
复位
reset*_n输入端口必须保持高电平,7段数码管驱动组件才能工作。该端口的低电平将异步复位组件。复位期间,组件将使所有7段数码管熄灭。任何进行中的内部转换都将中止。复位解除后,组件立即开始转换数字*输入信号并将结果显示在7段数码管上。
结论
这款多位数7段数码管驱动是可编程逻辑组件,能在多块7段数码管上显示多位整数。前导零不显示。7段数码管数量可配置,用户可根据输入整数范围需求设置组件。7段数码管极性也可配置。
相关主题
7段数码管Pmod控制器(VHDL) - 该设计使用本页描述的多位数7段数码管驱动组件,实现FPGA与带有两个共享数据线的7段数码管外接模块板的连接。





