• 【两周学会FPGA】从0到1学习紫光同创FPGA开发|盘古PGL22G开发板学习之数码管动态显示(五)


    本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处

    适用于板卡型号:

    紫光同创PGL22G开发平台(盘古22K)

    一:盘古22K开发板(紫光同创PGL22G开发平台)简介

    盘古22K开发板是基于紫光同创Logos系列PGL22G芯片设计的一款FPGA开发板,全面实现国产化方案,板载资源丰富,高容量、高带宽,外围接口丰富,不仅适用于高校教学,还可以用于实验项目、项目开发,一板多用,满足多方位的开发需求。

    二:实验目的

    在数码管静态显示的基础上让数码管各个位显示不同的数字,即学会以动态驱动的方式驱动四位八段数码管。

    三:实验要求

    使用4个按键分别控制4个数码管显示0~9的数字,按键每次按下后显示的数字自加1。

    四:实验原理

    由于一般的静态驱动操作虽然方便,但占用的 I/0 口较多,例如要驱动4 位 8 段数码管,以静态驱动方式让数码管各个位显示不同的数值,如“123456”,需要占用4 × 8 =32个I/O 口,虽然对于 FPGA 这种 I/O 口较多的芯片而言,在资源允许的情况下可以使用,但一般不建议浪费宝贵的 I/O 口资源,尤其在 I/O 口资源紧张的情况下,所以对于多位数码管一般采用动态驱动方式使数码管显示数字。为了更好的理解数码管动态驱动,我们首先了解下市面上常见的多位数码管的内部连接。以两位数码管为例,其内部连接如下图。由此图可知,两位 8 段数码管共 10 个引脚,每位数码管的阳极连接在一起,为共阳极数码管,每位数码管相同段的 led 的阴极连接在一起,这样当给第 10 和第 5 脚高电平,给第 3 脚低电平时,两个数码管的发光二极管 A 都点亮,对于此种数码管以静态方式驱动显然不可能显示像“18”这种个位与十位不同的数字。

    既然同时给第 10 和第 5 脚高电平不可行,那么是不是可以先给第 5 脚高电平,第 10 脚低电平,此时,让其显示数字“8”时,左边的数码管不显示,右边的数码管显示数字“8”;然后给第 10 脚高电平,第 5脚低电平,此时,让其显示数字“1”时,左边的数码管显示数字“1”,右边的数码管不显示,这样就可以显示数字“18”了。但有一个问题,多长时间切换显示的数码管呢,时间如果太长就只能看到数字“8”或数字“1”了,时间太短呢,结果是显示不清晰而且显示亮度不够。由于人眼的视觉暂留(人眼在观察景物时,光信号传递到人大脑神经后,会有一段短暂的时间停留,即光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”)及发光二极管的余辉效应(当停止向发光二极管供电时,发光二极管亮度仍能维持一段时间),每位数码管的点亮时间为 1~2ms 时,显示效果能满足使用需要。数码管的这种驱动方式称为数码管的动态驱动,实际上就是分时轮流控制不同数码管的显示。

    五:实验源码设计

    首先定义模块的输入输出。

    然后使用一个1ms的计数器来控制状态机的切换。

    因为要用四个按键控制四个数码管显示不同的数字,所以要将按键消抖模块和数码管数字显示模块都例化四次。

    四个按键都能分别控制数字的自加,所以需要四个数字计数器,可以将一个数字技术器例化四次,也可以写四个计数器,本次通过写四个计数器的方式实现。

    通过状态机,每隔1ms切换一次状态,使得四个数码管可以轮流循环显示,最终人眼中看到的效果便为四个数码管在四个按键的控制下同时显示不同的数字。

    盘古PGL22G开发板

  • 相关阅读:
    Python 进程和线程详解(multiprocessing、threading)
    【leetcode】【2022/9/6】828. 统计子串中的唯一字符
    Java如何并行多个if语句呢?
    如何做好文献阅读及笔记整理
    【Timm】timm.data 数据集全面详实概念理解
    Python学习笔记(九)——常用内置函数
    【Linux】基础:进程控制
    入行测试已经4年了 ,进阿里后迷茫了3个月,做完这个项目我决定离职....
    vue中渲染器原理
    c++ LRU(最近最少使用)缓存机制
  • 原文地址:https://blog.csdn.net/MYMINIEYE/article/details/132598224