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

    关注

    1646

    文章

    22096

    浏览量

    620647
  • 单片机
    +关注

    关注

    6069

    文章

    45076

    浏览量

    653880
  • ARM
    ARM
    +关注

    关注

    134

    文章

    9395

    浏览量

    379797
  • 数码管
    +关注

    关注

    32

    文章

    1889

    浏览量

    92904

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

    数码管的结构与原理

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

    数码管共阴和共阳的区别

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

    基于FPGA实现数码管显示

    本文介绍数码管显示译码基本工作原理及Verilog HDL驱动代码编写,进一步熟练掌握FPGA入门基础知识。
    的头像 发表于 10-24 14:44 ?1940次阅读
    基于<b class='flag-5'>FPGA</b>实现<b class='flag-5'>数码管</b>显示

    数码管的使用方法和接线步骤

    数码管的基本单元是发光二极(LED),通过控制不同LED的亮灭来显示数字和字符。根据段数,数码管可分为七段和八段,其中八段数码管比七段多一个小数点显示。按发光二极
    的头像 发表于 08-29 18:22 ?7406次阅读

    共阳极数码管的结构和功能

    共阳极数码管是一种广泛应用的显示器件,主要用于显示数字和字母。以下是对共阳极数码管的结构和功能的详细解析,旨在满足对深入了解该器件的需求。
    的头像 发表于 08-29 18:18 ?4292次阅读

    简述led数码管的类型和显示原理

    LED数码管是一种常见的显示设备,广泛应用于各种电子设备和系统中。本文将介绍LED数码管的类型和显示原理,以帮助读者更好地了解这种设备。 LED数码管的类型 LED数码管主要分为以下几
    的头像 发表于 08-29 09:11 ?2535次阅读

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

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

    数码管显示屏的作用和功能是什么

    数码管显示屏是一种广泛应用于各种电子设备中的显示技术,它具有多种作用和功能。 一、数码管显示屏的基本概念 1.1 数码管的定义 数码管,又称为七段显示器或LED
    的头像 发表于 08-28 17:11 ?2925次阅读

    驱动数码管显示不良原因

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

    什么是共阳极数码管怎么判断

    共阳极数码管是一种常见的七段显示器,用于显示数字和字母。它由七个发光二极(LED)组成,分别代表数字0-9的每个段。共阳极数码管的特点是所有LED的阳极连接在一起,形成公共阳极。以下是对共阳极
    的头像 发表于 08-28 16:10 ?2914次阅读

    数码管驱动芯片引脚功能

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

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

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

    数码管驱动芯片有哪几种

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

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

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