第十一章静态数码管显示实验
数码管是现代常用的数字显示器件,具有光显示清晰、响应速度快、功耗低、体积大等优点。

体积小、使用寿命长、易于控制等诸多优点,广泛应用于数显仪表和数控设备中。基础
在本章中,我们将介绍八段数码管的控制原理以及如何在数码管上显示变化的数字。
本章包括以下部分:
1.1数码管简介
1.2实验任务
1.3硬件设计
1.4编程
1.5下载验证
数码管简介
数码管又称半导体数码管,是将若干个发光二极管按照一定的图案排列并封装在一起的数字。
代码显示设备。常见的数码管如图11.1.1所示,主要称为八段数码管或数字8。
管,可以用来显示小数点,数字0~9,英文字母A ~ F。
图11.1.1八段数码管
除了常用的八段数码管,比较常见的有“1”数码管,“N”形管,“米”形管和
工业领域使用的14节管、16节管和24节管。
图11.1.2其他常用数码管
不管是哪种数码管,它的显示原理都是点亮内部的LED发光。那么如何使用数字呢?
如果代码显示的是指定的数字呢?
数码管的内部电路如图11.1.3所示,从中可以看出一个数码管有10个管脚,其中7个管脚。
引脚对应连接数码管中间的8字形led,Dp引脚连接数码管的小数点显示led。
最后,还有两个常见的终端。为了封装统一,单根数码管封装成10个管脚,其中8个和3个是常用的。
公共引脚连接在一起。公共端子可分为公共阳极和公共阴极,如图11.1.3所示。
共阴极内部示意图,图11.1.3共阳极内部示意图。
图11.1.3数码管内部示意图
对于一个普通阴极数码管来说,它的八个发光二极管的阴极在数码管内部都是连在一起的,所以叫“普通”
阴”,而阳极是独立的。对于共阳极数码管,其八个发光二极管的阳极都接在数码管内。
合在一起,所以叫“共阳”,而阴极是独立的。以共阳极数码管为例。当我们想让数码管显示数字“8”时,
您可以向七个引脚A、B、c…g发送低电平,数码管将显示“8 ”,数字“1”将向引脚B和c发送低电平。
电平,其他引脚被赋予高电平,数码管显示“1”。
多位数码管应用于某一系统时,为了减少数码管占用的I/O口,其段选是连在一起的,位选是独立控制的。以便我们可以使用位选择信号
控制哪些谢妮管被点亮,同时,所有带位选通的谢妮管上显示的数字总是相同的,
因为它们的段选是连在一起的,所以送到所有数码管的段选信号都是一样的,比如数码管的段选信号。
显示方法称为静态显示。
对于静态显示,还有一种方法是数码管的每个代码段由一个I/O端口驱动,这种方法的优点是
编程简单,显示亮度高;缺点是占用I/O多,谢妮管多了就要增加解码驱动。
驱动程序,或者使用串口转并口芯片来扩展端口。因此,对于多位谢妮管的使用,一般采用前部和后部。
电路设计的一种方式,更便于动态驱动数码管。动态显示和静态显示
显示差异的关键在于位选择的控制。因为静态显示容易实现,所以在本章中,我们使用6位普通正数码管的静态。
比如我们先来初步了解一下数码管的工作原理。
实验任务
本节的实验任务是显示00000,111111,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000,10000
22222到FFFFFF,之后继续从000000开始计数,每0.5s换一次
硬件设计
我们的先锋FPGA开发板具有6位共阳极谢妮管,其原理图如图11.3.1所示。这里我们需要
需要注意的是,为了增加FPGA输出信号的驱动能力,我们使用PNP三极管来驱动数码管的位选择,
因此,当向三极管的基极提供低电平时,位选择信号处于高电平。
图11.3.1硬件原理图
在本实验中,每个端口信号的引脚分布如下表所示:
表11.3.1静态数码管显示实验引脚分布图
设计
根据实验任务,可以大致规划系统的控制流程:首先需要一个静态数码管显示器。
该模块将数据显示在数码管上,其次,需要一个计时模块在每次计时到0.5s时改变数码管显示的数值
所绘制系统的功能框图如下:
图11.4.1数码管静态显示实验系统框图

程序中各模块的端口和信号连接如图11.4.2所示:
图11.4.2顶部模块示意图
FPGA的顶层实例化了以下两个模块:时序模块和数字模块。
管理静态显示模块,实现模块间的数据交互。计时模块将计时至0.5秒
标志信号flag传送到数码管静态显示模块,数码管静态显示模块接收到该信号后显示数值。
1增加。
计时模块:计时模块对系统时钟进行计数,当达到给定值时。
输出时间标志信号。
数码管静态显示模块:数码管静态显示模块在数码管上以静态模式显示。
指示值。
顶层模块的代码如下:
1模块seg _ led _ static _ top
一
12//参数定义
13 parameter time _ SHOW = 25 ' d 25000 _ 000;//每个数字显示的时间
14
15//线定义
16 wireadd _ flag//添加1个标志信号
17
18 //*****************************************************
19 //**主代码
20 //*****************************************************
21
2 seg _ LED _ static U _ seg _ LED _ static,//模块时钟信号
25 .rst_n,//复位信号
26 //seg_led接口
27 .sel,//数码管显示控制
28 .seg_led,//数码管显示数据
29 .add_flag //值增加1的标志信号
30 );
31
32时间计数#
33) u_time_count,//时钟信号
36 .rst_n,//复位信号
37//用户界面
38 .flag //该值增加1。
39 );
40
41端部模块
顶层模块主要完成其他模块的实例化。代码第13行中的参数TIME_SHOW控制了数码管的长度。
时间改变显示值,参数值与代码第35行的clk时钟信号的频率有关。因为clk在实例化时是一个系统
时钟sys_clk,所以每隔0.5秒改变数码管显示的数值时,该参数的值为0.5×5000000 = 0.5。
2000000,该功能由定时模块实现。
定时模块的代码如下:
1模块time _ count
九
10//参数定义
11参数_ NUM = 25000 _ 000//计数器的最大计数
12
13//寄存器定义
14 reg[24:0]CNT;//时钟分频器计数器
15
16 //*****************************************************
17 //**主代码

18 //*****************************************************
19
20 //计数
21永远@ begin
22如果开始
23 flag


