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

    关注

    1664

    文章

    22502

    浏览量

    639191
  • 单片机
    +关注

    关注

    6078

    文章

    45579

    浏览量

    673610
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9588

    浏览量

    393630
  • 数码管
    +关注

    关注

    32

    文章

    1894

    浏览量

    94420

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    方中禾 FZH100 带键盘扫描接口的 LED(发光二极显示器)驱动控制专用 IC

    MCU 数字接口、数据锁存器、LED 驱动、键盘扫描等电路。本产品质量可靠、稳定性好、抗干扰能力强。主要适用于家电设备(智能热水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、智能电表等数码管
    发表于 01-21 10:15

    数码管 选型手册2025年最新版

    数码管具有高亮度、多种颜色、宽视角、简单驱动、长寿命、抗震抗冲击、节能环保和成本低等特点。适用于电子设备、工业控制和家用电器等领域的数字显示,提供清晰、均匀的显示效果,易于集成和控制。
    发表于 12-30 11:34 0次下载

    【EASY EAI Nano-TB(RV1126B)开发板试用】+串行数码管的显示驱动

    在开发板上,为用户预留了3个GPIO引脚以便测试和使用,见图1所示。 图1预留的GPIO资源 这3个GPIO引脚的位置见图2所示,用它可驱动串行数码管显示模块来实现显示功能。 图2 引脚位置 为此
    发表于 12-24 19:03

    第6章 中断与数码管动态显示(6.1 6.2)

    中断是单片机系统重点中的重点,因为有了中断,单片机就具备了快速协调多模块工作的能力,可以完成复杂的任务。本章将首先带领大家学习一些必要的C语言基础知识,然后讲解数码管动态显示的原理,并最终借助于中断
    的头像 发表于 12-08 17:03 801次阅读

    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 1319次阅读
    第5章 定时器与<b class='flag-5'>数码管</b>基础(5.3)

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

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

    FZH182 带键盘扫描接口的LED(发光二极显示器)驱动控制专用电路

    驱动。o 显示数据通过16字节寄存器(00H-0FH)存储,数据按低位到高位写入。o 示例:共阴数码管显示“0”需向地址00H写入数据3FH。键盘扫描o 自动完成键扫描,用户需按时序读
    发表于 11-27 14:58

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

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

    FZH181 一种带键盘扫描接口的LED(发光二极显示器)驱动控制专用电路

    ,工作电压5V±10%。关键功能模块显示控制o 支持共阴/共阳数码管驱动。o 显示数据通过14字节寄存器(00H-0DH)存储,数据按低位到高位写入。o 示例:共阴数码管显示“0”需向地址00H写入
    发表于 11-26 15:46

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

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

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

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

    FZH100 带键盘扫描接口的 LED(发光二极显示器)驱动控制专用 IC 原厂技术支持

    是一种带键盘扫描接口的 LED(发光二极显示器)驱动控制专用 IC,内部集成有 MCU 数字接口、数据锁存器、LED 驱动、键盘扫描等电
    发表于 11-18 09:26

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

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

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

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