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
    +关注

    关注

    1655

    文章

    22283

    浏览量

    630194
  • 单片机
    +关注

    关注

    6074

    文章

    45340

    浏览量

    663459
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9499

    浏览量

    388668
  • 数码管
    +关注

    关注

    32

    文章

    1891

    浏览量

    93707

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FZH217 带键盘扫描接口的大笔段 LED 驱动控制专用电路 原厂技术支持

    应用LED数码管驱动o 通过配置寄存器数据控制各段/位的亮灭,如图(6)和图(7)所示,共阴数码管显示“0”需写入数据3FH到地址00H。按键扫描电路o 如图(10)所示,连接按键矩阵
    发表于 12-03 11:01

    第5章 定时器与数码管基础(5.3)

    5.3 数码管学习 LED小灯是一种简单的LED,只能通过亮和灭来表达简单的信息。这节课学习一种能表达更复杂信息的器件——LED数码管。 5.3.1
    的头像 发表于 12-02 15:57 145次阅读
    第5章 定时器与<b class='flag-5'>数码管</b>基础(5.3)

    FZH183 带键盘扫描接口的LED(发光二极显示器)驱动控制专用电路--方中禾科技

    、STB、DIO),内置450KHz±5% RC振荡器。其他特性:内置上电复位电路,工作电压5V±10%。关键功能模块显示控制支持共阴/共阳数码管驱动。显示数据通过16字节寄存器(00H-0FH)存储
    发表于 11-28 09:31

    【瑞萨RA6E2】ADC数据采集与数码管显示

    ); } /** * @brief 数码管动态扫描显示 * @note 采用动态扫描方式,每次显示一位数字 */ void seg_
    发表于 11-27 00:52

    原厂 FZH114C  一款LED(发光二极数码管、点阵屏)驱动控制专用芯片

    FZH114C通过灵活的亮度调节、单线通讯和动态扫描设计,显著简化了多位数码管或LED点阵屏的驱动电路设计。其独特的引脚排列(如VDD位于引脚13)和SOP16封装,使其在紧凑型设计中
    发表于 11-19 14:43

    FZH114  LED(发光二极数码管、点阵屏)驱动控制专用芯片,集成数字通讯电路、 解码电路、数据锁存器、震荡器

    )FZH114 是一款LED(发光二极数码管、点阵屏)驱动控制专用芯片,内部集成了数字通讯电路、解码电路、数据锁存器、震荡器、LED驱动电路。通讯方式采用异步串口通信(UART)协
    发表于 11-19 11:13

    级联动态扫描显示数码管问题

    GD32F103C8T6 硬件SPI连接移位寄存器74HC595级联,动态扫描显示五位数码管 是否需要电平转换芯片TXB0104 数码管选择共阴极和共阳极区别是什么 若使用TXB010
    发表于 10-07 20:36

    【应用】工业现场的“智能显示管家”:亿佰特EID051-1xx系列 Modbus数码管解析

    数码管。亿佰特新推出的EID051-1xx系列Modbus数码管,以多种核心优势,成为工业现场的一大助力。一.什么是Modbus数码管?Modbus数码管是一种通过R
    的头像 发表于 07-17 19:34 385次阅读
    【应用】工业现场的“智能显示管家”:亿佰特EID051-1xx系列 Modbus<b class='flag-5'>数码管</b>解析

    防干扰数码管驱动LED数码管驱动芯片VK1668

    产品型号:VK1668 产品品牌:永嘉微电/VINKA 封装形式:SOP24 概述 VK1668是一种带键盘扫描接口的数码管或点阵LED驱动控制专用芯片,内部集成有3线串行接口、数据锁存器、LED
    发表于 03-25 17:13

    数码管和单片机的连接方式

    在电子技术飞速发展的今天,数码管和单片机作为电子系统中的基础组件,被广泛应用于各种电子产品之中。数码管为人们提供直观的数字显示,而单片机则如同电子产品的 “大脑”,掌控着整个系统的运行逻辑。深入了解数码管
    的头像 发表于 02-05 17:44 2230次阅读

    如何利用万用表检测数码管

    数码管,作为一种广泛应用于电子设备中的显示器件,其稳定性和可靠性对于设备的正常运行至关重要。为了确保数码管的质量,使用万用表进行检测是电子工程师和维修人员的常用手段。本文将详细介绍如何利用万用表检测数码管,包括准备工作、检测步骤
    的头像 发表于 02-05 17:39 2821次阅读

    数码管的结构与原理

    数码管,也被称作辉光或LED数码管,是一种能够显示数字、字母、符号等信息的电子设备。它广泛应用于各种电子设备中,如计算器、电子钟表、电子秤、数码相机、通信设备、车载收音机、导航仪、仪
    的头像 发表于 02-05 17:32 4056次阅读

    数码管共阴和共阳的区别

    在电子设备的众多显示元件中,数码管以其简单直观、成本低廉等特点,广泛应用于各类电子仪器仪表、数码时钟、电子秤等设备上,承担着数字和简单字符的显示任务。对于电子工程师和电子爱好者而言,深入了解数码管
    的头像 发表于 02-05 17:29 7722次阅读

    四位数码管12个引脚怎么分配

    对于实现稳定的显示功能和高效的电路设计至关重要。本文将深入探讨四位数码管12个引脚的分配原则、具体分配方式以及在实际应用中的注意事项。
    的头像 发表于 01-30 15:00 5w次阅读

    要求为为供电电压的范围在2.7V-5V之间,用于驱动五位七段共阴极数码管,求推荐一款数码管驱动芯片?

    推荐一款TI的数码管驱动芯片,要求为为供电电压的范围在2.7V-5V之间,用于驱动五位七段共阴极数码管,最好能给出建议原理图。谢谢!
    发表于 12-16 08:35