本次实现的功能就是利用FPGA驱动16*16点阵,在按键的配合下实现文字的滚动显示、数字的倒计时显示,以及按键控制显示等等。先上一幅实物图吧

16*16点阵的硬件结构图如下所示:

可见,只要在C端输入高电平1,在R端输入低电平0,就可以点亮一颗LED。
我选择使用列扫描的方式,也就是按照一定的频率,依次给C0,C1,C2...高电平,然后分别将字模数据输入在R0--R15上,只要列扫描的频率足够大,由于人眼的视觉暂留效应,就可以在点阵屏幕上显示出字符。
接下来就是提取字符的字模数据了,这个时候就要用到字符转字模的软件了
软件截图如下:

在R0-R15给低电平,LED就被点亮。所以在设置字模提取方式时,要选择阳码(0点亮)。其余的配置选择如图所示:

配置好后,就可以输出字模数据了

如果要显示很多字符,那么字模数据量是很庞大的。那么如何存储这些数据就成为了问题。我选择的方案是将字模数据存在ROM里面。要使用的时候直接去ROM里面读取即可。注意ROM的数据宽度要为16位。其他的ROM配置步骤我在这里就不多介绍了。(注意,使用ROM前还需要配置好mif文件。数据主要是存储在mif文件里面的)

一切准备就绪以后,就是代码的编写了。
首先要例化ROM模块,因为字模数据全部在ROM里面。

然后还需要一些不同频率的时钟信号

再接着就是根据列扫描信号,提取出对应的字模数据。由于使用了ROM,提取ROM里面的数据时,只需要给出ROM的地址就行。

动态显示(滚动显示)的关键在于,传入给ROM的地址,是以人眼可以识别的频率动态变化的。关键代码如下:


需要完整代码的,请私信
本文介绍了如何利用FPGA进行16*16点阵的驱动,结合按键功能实现文字滚动、数字倒计时及控制显示。通过列扫描方法和字符转字模软件提取数据,将字模存储在ROM中,以动态改变ROM地址实现动态显示。代码编写中涉及ROM模块例化、时钟信号生成及地址提取等步骤。
--FPGA驱动16*16点阵动态显示&spm=1001.2101.3001.5002&articleId=130660286&d=1&t=3&u=7c639ccabcb04ba4a3a6fe0d3edacfa9)
2万+

被折叠的 条评论
为什么被折叠?



