当前位置:首页 > 新闻资讯 > FPGA之家动态 >

基于黑金开发板的数码管控制实验,自己做个秒表很简单!

时间:2024-07-25      来源:网络搜集 关于我们 0

今天给大家分享的是FPGA开发实战之数码管驱动,具体内容是教大家如何通过RTL编程驱动点亮开发板上的数码管,并实现秒表计数的功能。下面一步步为大家讲解具体过程!

新建工程

打开quartus软件后点击File->New Project Wizard,然后根据提示完成工程的建立。如下图所示是我新建立的工程:

顶层文件为tikck_tock,因此后面我需要新建一个tick_tock.v文件作为顶层文件进行编程。工程建好后,下一步要做的就是搭建数字电路了。

确定工作时钟

数字电路当中,第一需要确认的是工作时钟,因为数字电路就是靠时钟节拍才能动起来的。根据之前的介绍,我目前使用的黑金开发板的外部晶振是52MHz的,这也是整块开发板唯一的时钟源头。但是,考虑到我们当前的设计没有必要工作在52MHz这么高的频率下,因此我首先会创建一个PLL的IP核,让它输出12MHz的频率作为工作时钟。如果大家不清楚如何建立IP核,可以参考我的上一篇文章。

如上图所示就是我创建的PLL 核,我们只需要在顶层文件中调用其.v文件就能使用。

调用IP核点亮数码管

做秒表的第一步,首先要点亮数码管。如下图所示是我在顶层文件里的编程。先是定义顶层module为tick_tock,然后再信号列表中定义输入信号为osc_52m和rst_。其中osc_52m是外部晶振,作为PLL的时钟源,rst_为复位信号,连接外部的一个机械按键。输出信号为com和seg,对应6位8段数码管。

由上图可以看到,我已经利用PLL 核产生了一个12MHz的时钟信号,后面的逻辑电路就用这个作为时钟。接下来就要尝试把6位数码管点亮,6位数码管的COM口是独立的,而SEG口是共用的,因此我们只能使用动态扫描的方式驱动。下面先看看数码管的硬件电路连接关系:

由上图可见,6个FPGA过来的com口是各经过一个电阻连接到三极管上,然后再利用三极管连接到数码管对应的引脚上。而seg口只有8个,经过电阻后直接连接到数码管对应的PIN。

下面RTL中的com对应这里的SEL0~SEL5,seg对应DIG0~DIG7.

由于工作时钟是PLL输出的12MHz,因此这里设置了一个counter,从0数到11999为一个周期就切换到点亮下一个com口,也就是每个com点亮1ms就切到下一个com.由于这里是先尝试点亮数码管,所以seg口恒定输出显示0对应的数值。实际开发板上也是6位数码管都是显示数字“0”:

实现秒表计时功能

上面的步骤已经达到了点亮6位数码管的效果,接下来继续实现秒表计数功能。下面是我编写好实现秒表功能的RTL代码:

上面的RTL是完整的实现数码管扫描并实现秒表功能代码,总体思路如下:先用计数器定时计算1ms,然后再用另外一个计数器计数定时1s。每个com口点亮1ms,轮流点亮。同时,seg口要根据每个com口点亮时,实时切换对应的数值,以此达到共用seg口又可以使得每个数码管显示不同数值的目的。

上图是把RTL编译好之后烧进FPGA开发板上的实际显示效果,用FPGA实现秒表功能的实验到此就完成了。如果大家还有什么疑问,欢迎在评论区交流。感兴趣的伙伴也可以自己动手实现这个功能,甚至玩出更多的显示花式。

感谢您的关注和分享,后面继续分享更多开发技术给大家!


注明:本内容来源网络,不用于商业使用,禁止转载,如有侵权,请来信到邮箱:429562386ⓐqq.com 或联系本站客服处理,感谢配合!

用户登陆

    未注册用户登录后会自动为您创建账号

提交留言