[FPGA教程] Basys 3 FPGA上的七段LED显示

此项目是[FPGA教程] Basys 3 FPGA上的七段LED显示。该FPGA教程将指导您如何控制Basys 3 FPGA板上的4位七段显示器。 将在Verilog中设计一个显示控制器,以在Basys 3 FPGA的4位7段LED显示屏上显示数字。 还将提供七段式LED显示控制器的完整Verilog代码。了解的更多请下载附件。

应用介绍

此项目是[FPGA教程] Basys 3 FPGA上的七段LED显示。

该FPGA教程将指导您如何控制Basys 3 FPGA板上的4位七段显示器。 将在Verilog中设计一个显示控制器,以在Basys 3 FPGA的4位7段LED显示屏上显示数字。 还将提供七段式LED显示控制器的完整Verilog代码。

Basys 3 FPGA具有一个共阳极4位7段LED显示屏,如下图所示。

FPGA_Tutorial_7_segment_LED.png

单个LED的七个段中的七个阳极连接到一个公共阳极节点,而其阴极则分开,如下图所示。

7_segment_LED_FPGA_Tutorial.png

为了照亮诸如A-G之类的LED段,这些段的阳极需要处于“高”逻辑电平,而阴极应处于“低”逻辑电平。 因此,公共阳极节点应较高以激活单个七段LED显示器。 阴极的逻辑电平可以从低(发光)到高(未发光)变化,以在单个7段LED显示屏上显示不同的十进制值,如下所示。

Seven_segment_Display_FPGA_tutorial.png

如上图所示,我们可以通过打开和关闭单个七段式LED显示屏的七个段,在七段式LED显示屏上显示从零到九的数字。 例如,要在LED上显示数字“ 1”,段A,F,G,E和D不亮,或者它们的阴极应该高,而B-C段要亮,或者它们的阴极应该低。 同样,我们可以获得以下解码器表,用于在七段LED显示屏上显示十个数字:

Seven_segment_display_table.png

该表显示了所需的阴极图形,用于在Basys 3 FPGA板的单个7段LED显示屏上显示相应的数字。

目前,我们知道如何在Basys 3 FPGA板上的单个七段LED显示屏上显示数字。 但是,Basys 3上的四个七段LED的阴极不是分开的,而是连接在一起,如下图所示。

Seven_segment_LED_display_Basys3.png

因此,要在4位七段LED显示器上显示4个不同的数字,我们必须通过在不同时间激活四个七段LED来分别控制四个七段LED的阴极(CA-CG)。 例如,当我们通过将A1驱动为高电平来激活LED 1,而其他三个LED(LED 2,LED 3,LED 4)被停用(未驱动A2,A3和A4)时,阴极图案(CA-CG)将变为 用于在LED 1上显示数字。类似地,LED 2-LED 4可以在不同的时间使用相同的方式显示。 如上图所示,我们可以使用4个PNP晶体管AN0-AN3来控制激活四个7段LED。 当晶体管导通或基极端子(W4,U4,V4或U2)为低电平时,相应的阳极被驱动为高电平,以激活或启用相应的七段式LED。

点亮后禁用LED时,它会变暗。 为避免人眼感知到的显示不连续性,四个七段式LED应以大约1KHz至60Hz的频率连续刷新,或者应每1ms至16ms的频率刷新一次。

在该项目中,设计了一个7段LED显示控制器,用于在Basys 3 FPGA板的4位7段LED显示屏上显示数字。 以下是Basys 3 FPGA上的七段LED显示控制器的时序图:

Timing_diagram_seven_segmend_LED.png

下面是一个示例时序图,用于在Basys 3 FPGA板的4位7段LED显示屏上以60Hz的刷新率或16ms的周期显示“ 1234”:

FPGA_tutorial_7segment_LED_Basys3.png

Basys 3 FPGA的时钟源为100MHz,我们需要1ms-16ms的刷新周期或1KHz-60Hz的刷新率。 我将选择10.5ms的刷新周期(数字周期= 2.6ms),以便我们可以使用20位计数器创建刷新周期,而计数器的前2个MSB位用于创建LED激活信号(数字周期为 2.6ms),如上面的时序图所示。

本人在下方展示了用于创建刷新信号和LED激活信号的示例Verilog代码:如想了解的更多请下载附件。

reg [19:0] refresh_counter; 
// the first 18-bit for creating 2.6ms digit period
// the other 2-bit for creating 4 LED-activating signals
wire [1:0] LED_activating_counter; 
// count        0    ->  1  ->  2  ->  3
// activates    LED1    LED2   LED3   LED4
// and repeat
always @(posedge clock_100Mhz or posedge reset)
begin 
 if(reset==1)
  refresh_counter <= 0;
 else
  refresh_counter <= refresh_counter + 1;
end 
assign LED_activating_counter = refresh_counter[19:18];

文件列表(部分)

名称 大小 修改日期
[FPGA教程] Basys 3 FPGA上的七段LED显示(附件).txt1.73 KB2020-04-08
7_segment_LED_FPGA_Tutorial.png7.83 KB2020-04-08
FPGA_tutorial_7segment_LED_Basys3.png49.72 KB2020-04-08
FPGA_Tutorial_7_segment_LED.png501.40 KB2020-04-08
Seven_segment_Display_FPGA_tutorial.png67.13 KB2020-04-08
Seven_segment_display_table.png15.36 KB2020-04-08
Seven_segment_LED_display_Basys3.png82.67 KB2020-04-08
Timing_diagram_seven_segmend_LED.png42.34 KB2020-04-08
image0.00 KB2020-04-08

立即下载

相关下载

[[FPGA教程] Basys 3 FPGA上的七段LED显示] 此项目是[FPGA教程] Basys 3 FPGA上的七段LED显示。该FPGA教程将指导您如何控制Basys 3 FPGA板上的4位七段显示器。 将在Verilog中设计一个显示控制器,以在Basys 3 FPGA的4位7段LED显示屏上显示数字。 还将提供七段式LED显示控制器的完整Verilog代码。了解的更多请下载附件。

评论列表 共有 0 条评论

暂无评论

微信捐赠

微信扫一扫体验

立即
上传
发表
评论
返回
顶部