查看: 2996|回复: 2

STEP BY STEP! 带你快速上手小脚丫FPGA开发板——3.数码管!

[复制链接]
  • TA的每日心情
    奋斗
    2017-8-8 12:52
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2017-8-11 15:23:43 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 _张泽_ 于 2017-8-14 09:24 编辑

    本实验将会让你熟悉小脚丫上最后一种有意思的外设七段数码管。

    ====硬件说明====

    数码管是工程设计中使用很广的一种显示输出器件。一个7段数码管(如果包括右下的小点可以认为是8段)分别由a、b、c、d、e、f、g位段和表示小数点的dp位段组成。实际是由8个LED灯组成的,控制每个LED的点亮或熄灭实现数字显示。通常数码管分为共阳极数码管和共阴极数码管,结构如下图所示:
    数码管1.png

    共阴8段数码管的信号端低电平有效,而共阳端接高电平有效。当共阳端接高电平时只要在各个位段上加上相应的低电平信号就可以使相应的位段发光。比如:要使a段发光,则在a段信号端加上低电平即可。共阴极的数码管则相反。
    可以看到数码管的控制和LED的控制有相似之处,在[[STEP-MXO2第二代|小脚丫STEP-MXO2 V2]]开发板上有两位共阴极数码管,
    数码管2.png

    数码管所有的信号都连接到FPGA的管脚,作为输出信号控制。FPGA只要输出这些信号就能够控制数码管的那一段LED亮或者灭。这样我们可以通过开关来控制FPGA的输出,和[[3. 3-8译码器]]实验一样,通过组合逻辑的输出来控制数码管显示数字,下面是数码管显示的表格
    数码管3.png
    这其实是一个4-16译码器,如果我们想数码管能显示16进制可以全译码,如果只想显示数字,可以只利用其中10个译码,下面看看如果用Verilog来实现。

    ====Verilog代码====
    1. ------

    2. <code verilog>

    3. // ********************************************************************
    4. // >>>>>>>>>>>>>>>>>>>>>>>>> COPYRIGHT NOTICE <<<<<<<<<<<<<<<<<<<<<<<<<
    5. // ********************************************************************
    6. // File name    : segment.v
    7. // Module name  : segment
    8. // Author       : STEP
    9. // Description  : segment initial
    10. // Web          : www.stepfpga.com
    11. //
    12. // --------------------------------------------------------------------
    13. // Code Revision History :
    14. // --------------------------------------------------------------------
    15. // Version: |Mod. Date:   |Changes Made:
    16. // V1.0     |2017/03/02   |Initial ver
    17. // --------------------------------------------------------------------
    18. // Module Function:数码管的译码模块初始化

    19. module LED (seg_data_1,seg_data_2,seg_led_1,seg_led_2);

    20.         input [3:0] seg_data_1;                                                //数码管需要显示0~9十个数字,所以最少需要4位输入做译码
    21.         input [3:0] seg_data_2;                                                //小脚丫上第二个数码管
    22.         output [8:0] seg_led_1;                                                //在小脚丫上控制一个数码管需要9个信号 MSB~LSB=DIG、DP、G、F、E、D、C、B、A
    23.         output [8:0] seg_led_2;                                                //在小脚丫上第二个数码管的控制信号  MSB~LSB=DIG、DP、G、F、E、D、C、B、A

    24.         reg [8:0] seg [9:0];                                            //定义了一个reg型的数组变量,相当于一个10*9的存储器,存储器一共有10个数,每个数有9位宽

    25.         initial                                                         //在过程块中只能给reg型变量赋值,Verilog中有两种过程块always和initial
    26.                                                                         //initial和always不同,其中语句只执行一次
    27.             begin
    28.               seg[0] = 9'h3f;                                           //对存储器中第一个数赋值9'b00_0011_1111,相当于共阴极接地,DP点变低不亮,7段显示数字  0
    29.               seg[1] = 9'h06;                                           //7段显示数字  1
    30.               seg[2] = 9'h5b;                                           //7段显示数字  2
    31.               seg[3] = 9'h4f;                                           //7段显示数字  3
    32.               seg[4] = 9'h66;                                           //7段显示数字  4
    33.               seg[5] = 9'h6d;                                           //7段显示数字  5
    34.               seg[6] = 9'h7d;                                           //7段显示数字  6
    35.               seg[7] = 9'h07;                                           //7段显示数字  7
    36.               seg[8] = 9'h7f;                                           //7段显示数字  8
    37.               seg[9] = 9'h6f;                                           //7段显示数字  9
    38.             end

    39.         assign seg_led_1 = seg[seg_data_1];                         //连续赋值,这样输入不同四位数,就能输出对于译码的9位输出
    40.         assign seg_led_2 = seg[seg_data_2];
    41.         
    42. endmodule

    43. </code>

    44. \\  
    45. \\  
    复制代码
    ====引脚分配====
    -------
    小脚丫上正好有4路按键和4路开关,可以用来作为输入信号分别控制数码管的输出。按照下面表格定义输入输出信号
    数码管4.png
    数码管5.png
    配置好以后编译下载程序。这样可以通过按键或者开关来控制相应的数码管显示数字。如果你想显示16进制的AbCDeF在数码管,可以试试修改程序。这时候一定要定义一个16*9的存储器来初始化。

    了解了小脚丫数码管的工作原理,在下个实验我们将进行到有趣的时序逻辑。


    回复

    使用道具 举报

  • TA的每日心情

    2021-12-7 12:35
  • 签到天数: 1354 天

    连续签到: 1 天

    [LV.10]以坛为家III

    发表于 2017-8-11 22:21:19 | 显示全部楼层
    学习和参考
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-5-10 20:09
  • 签到天数: 1742 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2017-8-12 12:24:40 | 显示全部楼层
    速速学习补课!!!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-4-27 09:25 , Processed in 0.131974 second(s), 20 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.