zoukankan      html  css  js  c++  java
  • 《FPGA全程进阶---实战演练》第十章 数码管实验

    1基础理论部分

      led数码管是由多个发光二极管封装在一起组合的“8”字型的器件,引线内部已经完成,如下图10.1所示,图10.2为实物图。

    wpsFE4A.tmp

    图10.1 数码管内部结构

    wpsFE6A.tmp

      那么我们想要控制数码管的亮灭,其实也就是控制发光二极管的亮灭,分别用高低电平去控制。对于数码管来说,读者若是学过单片机及其他MCU的话,其实都知道数码管的控制有两个信号是比较重要的,一个是段选信号,一个是位选信号,位选信号是针对有多个数码管时,需要控制哪一个数码管发亮,段选就是控制数码管显示什么数字。

      那么在购买数码管的时候,往往买回来时上面没有标注各引脚信息。这时不要慌,首先你购买时要分清共阳极还是共阴极数码管,共阳极和共阴极数码管电路示意图如图10.2所示。然后可以利用万用表打到“二极管”档位,然后万用表正极接触数码管一个引脚,负极去挨个触碰其他引脚,直到数码管发亮时,可以记录对应的引脚信息即可。

    wpsFE6B.tmp

    图10.2 数码管共阳和共阴极电路图

    1.1 静态显示

      静态驱动也称直流驱动。静态驱动是指每个数码管的每一个段码都由一个I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。静态驱动的优点是编程简单,显示亮度高,缺点是占用I/O端口多,如驱动5个数码管静态显示则需要5×8=40根I/O端口来驱动。

    1.2 动态显示

      动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制。

    2 Verilog代码实现部分

    现在要实现数码管的静态显示功能,从0加到f,时间间隔为1s。封装接口为

    image

    2.1 smg_control模块

    wpsFE7C.tmp

      上述是整个模块的声明,并且调用了smg_param.v的文件,用于数码管解码参数的设置,关于include的用法可以参考其他语法书籍。

    wpsFE8D.tmp

      两个计数器,一个用于实现时钟计数1s,一个用于数码管编解码计数控制。

    wpsFE8E.tmp

      上述是实现数码管解码部分,注意smg_param.v中参数调用的方法。

    2.2 smg_param模块

    wpsFE9E.tmp

    3 Modelsim仿真部分

      仿真程序很简单,只需添加时钟和复位信号即可。测试的脚本文件如图10.3所示,因测试时将计数改到50,所以周期是1000ns。

    wpsFE9F.tmp

    wpsFEB0.tmp

    图 10.3 测试脚本文件

  • 相关阅读:
    EventLog实现事件日志操作
    可否控制<link type=text/css rel=stylesheet href=style.css>
    强制IE浏览器或WebBrowser控件使用指定版本显示网页2
    C#中的@符号
    C#运算符大全_各种运算符号的概述及作用
    调试时设置条件断点
    C语言:用字符读取流和输出流来读写入数据。(文本文件)
    建立完整的单向动态链表(包括初始化、创建、插入、删除、查找、销毁、输出)
    C语言:创建动态单向链表,创建完成后,输出每一个节点的数据信息。
    C语言:使用realloc函数对malloc或者calloc动态分配的内存大小进行扩展
  • 原文地址:https://www.cnblogs.com/raymon-tec/p/5125057.html
Copyright © 2011-2022 走看看