0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入学习基于FPGA的数码管动态扫描驱动设计

电子工程师 来源:FPGA设计论坛 作者:FPGA设计论坛 2021-03-14 09:45 次阅读

基于 FPGA数码管动态扫描驱动设计

1. 实验引言

电子系统中,通常都需要有输出设备来输出或显示一定的信息,以指示当前系统运行的状态。在以单片机和 ARM 为主的电子系统中,液晶屏是理想的输出设备。而 FPGA 则因为其独特的硬件结构,如果用 RTL 级电路来驱动彩色液晶屏来显示一定的数据,势必是非常不划算的选择,而且驱动也极为复杂。数码管作为一种能够直观显示一定数据信息的输出设备,具有驱动简单、显示直观的特点,尤其适合作为 FPGA 系统的输出设备。本节,我们就将和大家一起进行数码管驱动的开发。

2. 实验目的

实现 6 位 7 段数码管的驱动,待显示数据以 BCD 格式输入。数码管刷新时钟为 1KHz。实验使用了 4 个独立按键作为输入,通过按键来改变需要数码管显示的数据,以验证数码管驱动的正确性,同时也可检验独立按键消抖模块的可靠性。

3. 实验内容

本实验的内容是数码管动态扫描驱动的设计,通过外部四位按键的不同操作来驱动数码管显示不同的值。

4. 实验原理

数码管所谓的动态扫描,就是利用人眼的视觉暂留特性,在人眼能分辨的变化速度以外,快速分时的点亮各个数码管及其对应的段。因为分别点亮所有数码管一次所用时间小于人眼的视觉暂留,因此,在人们眼里看来,这些数码管都是同时持续点亮的,并不会有闪烁的感觉。

图 1 为 3 位 7 段数码管的等效电路图,在这个图中,可以明显的看到 24个发光二极管被分为了三组,每一组的 8 个发光二极管正极被接在了一起,通过一个三极管与 VCC 相连。三极管的基极连接到了 FPGA 的 IO 上,因此,只需要 FPGA 对应的 IO 上给出低电平,三极管便会导通。而三组 LED 中所有的相同编号的 LED 的负极被连接在了一起,并接到了 FPGA 的 IO 上。如果我们希望将最左边一组的 led0、led5、led7 三个编号的 led 灯点亮,其它 led 不亮,则只需要给 Q0 的基极(sel0)连接上低电平,并将 led0、led5、led7 的负极(a、f、h)连接上低电平,其它所有端口都输出高电平,则最左边一组的对应的三个 led 灯就会被点亮,而其它 led 则会处于熄灭状态。 假如我们需要在三秒时间内,完成以下三次操作:第一次操作,点亮最左边一组 led 灯的 led0、led5、led7;第二次操作,点亮中间一组 led 灯的 led1、led2、led3;第三次操作,点亮最右边一组 led 灯的 led2、led4、led6;那么我们只需要按照如下表格中列出的真值表操作即可:

ee02c720-8433-11eb-8b86-12bb97331649.png

按照以上表格,我们就能知道该如何操作了,只需要在不同的时间给各个 IO 不同的电平,便能实现我们想要的亮灭组合。以上我们是以 1 秒为单位进行 led 组的切换的,假如我们将切换速度加快,变为 1 毫秒一切换,会是什么情况呢?在 1 毫秒一切换的速度下,完成所有操作所需时间为 3ms,远远超出了我们人眼所能辨识的变化速度范围。如果我们让以上三个操作永远循环的进行下去,那么我们将看见三组 led 灯中,我们点亮的那几个 led 是同时且一直处于亮着的状态的,这便是动态扫描的原理,假如我们把每个 led做成一个长条型的,并按照如下形状摆放,便就是我们常见的数码管了。

5. 硬件设计

在这个图中,共有 6 位数码管,每个数码管的正极被接在一个驱动三极管上,三极管的基极连接到三八译码器的 Y 端,则 FPGA 只需要三个引脚就可最多控制 8 个数码管的位选。数码管的段选在串接了 470 欧姆的电阻后与FPGA 的 IO 相连。这里 470 欧姆的电阻主要起到限流的作用,保证流过数码管的电流在正常范围内。

6. 系统结构框图

eecb25d0-8433-11eb-8b86-12bb97331649.png

系统端口及其意义如下:

ef097f2e-8433-11eb-8b86-12bb97331649.png

内部信号及其意义如下:

ef429d86-8433-11eb-8b86-12bb97331649.png

ef83c644-8433-11eb-8b86-12bb97331649.png

7. 代码解释

因为数码管属于低速设备,其正常的扫描频率为 500~10KHz,扫描频率太快,会导致系统功耗增加,显示效果变暗。扫描频率太慢,会有明显的闪烁感。本实验通过调试观察,选择以 1KHz 作为扫描频率,实际显示效果非常好。 因此本实验首先就需要产生一个 1KHz 的扫描时钟,该时钟由系统时钟分频得到。产生 1KHz 扫描时钟的代码如下:

efc0cd78-8433-11eb-8b86-12bb97331649.png

其中,定义了一个全局参数 system_clk,该参数为 Clk 的频率,不同的时钟频率,只需要更改该参数,就可改变分频计数器的最大计数值,以保证 1KHz分频的精准性。 在驱动中,数码管的位选以扫描时钟的速率进行切换,因为只有 6 位数码管,因此当位选计数到 6-1 后必须清零从头开始计数。相关代码如下:

f029c9c2-8433-11eb-8b86-12bb97331649.png

每个数码管需要显示的内容都不相同,由 Data 中相应的位指定,Data中各位与数码管的位对应关系如下:

因此需要从 Data 中将每个数码管被选中时需要显示的数据提取出来,提取数据的代码如下所示:

f09ceccc-8433-11eb-8b86-12bb97331649.png

因为提取出来的数据还是 BCD 码的形式,还需要将 BCD 码对应的数据翻译成为数码管显示对应字符时应该点亮或熄灭的对应的 LED 的控制信号,因此必须还有一个 BCD 码译码的过程,该过程代码如下所示:

f0c01058-8433-11eb-8b86-12bb97331649.png

控制部分相对简单,只需要根据对应的 按键信息,给待显示的数据加上一个对应的值,该部分代码如下所示:

f0f95624-8433-11eb-8b86-12bb97331649.png

f1399c48-8433-11eb-8b86-12bb97331649.png

8. 程序清单

(1)工程顶层模块(文件名 top.v) 该模块为工程顶层模块,负责将按键检测模块(normal_keys_detect.v)、显示控制模块(ctrl.v)、数码管驱动模块(DIG_LED_DRIVE.v)按照逻辑关系级联。

f1848014-8433-11eb-8b86-12bb97331649.png

f1cacaba-8433-11eb-8b86-12bb97331649.png

(2) 按键检测模块(文件名 normal_keys_detect.v) 该模块为按键检测模块,负责检测外部按键值,并完成按键消抖,输出按键检测标志。

f1fd9990-8433-11eb-8b86-12bb97331649.png

f2388dac-8433-11eb-8b86-12bb97331649.png

f2b533f2-8433-11eb-8b86-12bb97331649.png

f2fdbc08-8433-11eb-8b86-12bb97331649.png

(3) 控制模块(文件名 ctrl.v) 该模块为数码管显示控制模块,通过检测到的键值驱动数码管显示出不同的值。

f34f9578-8433-11eb-8b86-12bb97331649.png

(4) 数码管显示驱动模块(文件名 DIG_LED_DRIVE.v) 该模块为数码管显示驱动模块,负责将输入的数据正确显示到数码管对应位。

f39bed7e-8433-11eb-8b86-12bb97331649.png

f3d76e76-8433-11eb-8b86-12bb97331649.png

f429022c-8433-11eb-8b86-12bb97331649.png

f45c50d2-8433-11eb-8b86-12bb97331649.png

f4ace6dc-8433-11eb-8b86-12bb97331649.png

f4e2cd74-8433-11eb-8b86-12bb97331649.png

(5) 测试仿真模块(文件名 DIG_LED_DRIVE_tb.v) 该模块为数码管显示驱动测试模块,用于仿真查看数码管驱动逻辑是否正确。

f51d2988-8433-11eb-8b86-12bb97331649.png

f5721bf0-8433-11eb-8b86-12bb97331649.png

责任编辑:lq6

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1622

    文章

    21522

    浏览量

    599649
  • 单片机
    +关注

    关注

    6024

    文章

    44392

    浏览量

    629467
  • ARM
    ARM
    +关注

    关注

    134

    文章

    8977

    浏览量

    365505
  • 数码管
    +关注

    关注

    32

    文章

    1869

    浏览量

    90580

原文标题:至芯入门实验| 基于 FPGA 的数码管动态扫描驱动设计

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数码管显示屏的静态显示编程是什么

    ,要么全部熄灭不显示任何内容,而不涉及到动态扫描或快速切换来模拟多个数码管同时显示的效果。 在静态显示中,每个数码管都需要一个独立的驱动电路
    的头像 发表于 08-28 17:14 252次阅读

    驱动数码管显示不良原因

    驱动数码管显示不良的原因可能有很多,涉及到硬件、软件、环境等多个方面。 一、引言 驱动数码管是一种广泛应用于工业自动化、电子设备等领域的显示设备。它具有显示清晰、亮度高、寿命长等优
    的头像 发表于 08-28 16:38 244次阅读

    数码管驱动芯片引脚功能

    数码管驱动芯片是一种用于驱动数码管显示数字或字符的集成电路。数码管驱动芯片的引脚功能是实现
    的头像 发表于 08-28 16:08 390次阅读

    数码管驱动芯片原理是什么

    数码管驱动芯片是一种广泛应用于数字显示领域的电子元件,它能够将数字信号转换为可视的数字显示。 一、数码管驱动芯片概述 1.1 数码管
    的头像 发表于 08-28 16:07 346次阅读

    数码管驱动芯片有哪几种

    数码管驱动芯片是用于驱动数码管显示数字和字符的电子元件。数码管是一种常见的显示设备,广泛应用于各种电子产品中,如电子钟、计算器、电子秤等。
    的头像 发表于 08-28 15:59 389次阅读

    数码管驱动芯片好坏判断方法

    数码管驱动芯片是数字显示设备中的核心部件,其性能好坏直接影响到数码管的显示效果和使用寿命。 一、数码管驱动芯片的工作原理
    的头像 发表于 08-28 15:57 385次阅读

    【每周一练】盘古1K开发板 练习三:动态数码管显示

    ,按一下数字加 1,显示从 0 到 9, 类似的,按键 K3 控制第三个数码管,按键 K4 控制第四个数码管 学习心得 学习数码管
    发表于 12-10 16:45

    数码管驱动芯片的使用方法

    数码管驱动芯片(也称为LED驱动芯片)是一种用于控制数码管显示的集成电路。它可以将微控制器产生的数字信号转换为适合数码管显示的电流和电压。本
    的头像 发表于 12-08 16:24 9095次阅读

    动态数码管显示原理详解

    动态显示的特点是将所有数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描
    的头像 发表于 11-10 11:38 4195次阅读
    <b class='flag-5'>动态</b><b class='flag-5'>数码管</b>显示原理详解

    使用普中的仿真器操作动态数码管数码管会闪烁的厉害怎么解决?

    使用普中的仿真器操作动态数码管数码管会闪烁的厉害,但是直接插上单片机就很正常的显示,这是怎么回事,有没有解决方法?
    发表于 11-10 06:16

    单片机数码管驱动学习笔记

    51单片机数码管驱动笔记
    发表于 11-06 17:23 1次下载

    数码管笔记

    1.共阴极/共阳极数码管的内部组成结构2..共阴极/共阳极数码管驱动电路3.数码管显示的字符/段选/位选
    发表于 11-06 17:18 3次下载

    数码管驱动学习笔记

    电子发烧友网站提供《数码管驱动学习笔记.pdf》资料免费下载
    发表于 11-05 17:28 0次下载

    数码管驱动电路讲解

    根据项目需求可以用I/O外部上拉,用来驱动数码管;也可以74HC138(38译码器)+74HC245(8路信号收发器)驱动数码管。本文会以后者为数码
    的头像 发表于 11-01 17:34 2921次阅读
    <b class='flag-5'>数码管</b><b class='flag-5'>驱动</b>电路讲解

    基于单片机的数码管静态及动态显示

    上图是独立共阳数码管,用于演示数码管显示原理
    的头像 发表于 10-31 15:51 1409次阅读
    基于单片机的<b class='flag-5'>数码管</b>静态及<b class='flag-5'>动态</b>显示