七段译码器(静态和动态)

更新时间:2024-06-05 20:48:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

七段译码显示

实验目的

1、学习7段数码管显示译码器的设计。

2、学习动态扫描显示的原理及电路的设计。 3、学习LPM兆功能模块的调用。

实验器材

1、SOPC实验箱

2、计算机(装有Quartus II 7.0软件)

实验预习

1、掌握数码管LED的显示原理及动态扫描显示的原理。 2、提前预习,编写好主模块的VHDL程序。

实验原理

数码管LED显示是工程项目中使用较广的一种输出显示器件。常见的数码管有共阴和共阳两种。共阴数码管是将8个发光二极管的阴极连接在一起作为公共端,而共阳数码管是将8 个发光二极管的阳极连接在一起作为公共端。公共端常被称作位码,而将其他的8位称作段码。如图10.1所示为共阳数码管及其电路,数码管有8个段分别为:h、g、f、e、d、c、b 和a(h 为小数点),只要公共端为高电平“1”,某个段输出低电平“0”则相应的段就亮。例如数码管的8 个段h、g、f、e、d、c、b、a 分别接1、0、1、0、0、1、0、0,数码管就显示“2”。

图11.1 共阳数码管及其电路

MagicSOPC 实验箱上有2个4位动态共阳数码管LED22和LED21。其硬件原理图见附录二中所示。其中8个位码DIG0-DIG7和8位段码SEG0-SEG7与分别与FPGA相应的引脚相连。8个数码管,其中的每个数码管的8个段:a、b、c、d、e、f、g、h(h 是小数点)都分别连到SEG0-SEG7,8个数码管分别由8个选通信号DIG0-DIG7来选择。被选通的数码管显示数据,其余关闭。如在某一时刻DIG2为低电平“0”,其余选通信号为高电平“0”,这时仅DIG2对应的数码管显示来自段码信号端的数据,而其它7个数码管呈现关闭状态。根据这种电路状态,如果希望8个数码管显示希望的数据,就必须使得8个选通信号DIG0-DIG7分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数据管上显示的数据,于是随着选通信号的扫描就能实现扫描显示的目的。虽然每次只有一个LED显示,但只要扫描显示速率够快,由于人的视觉余辉效应,使我们仍会感觉所有的数码管都在同时显示。

动态扫描显示时,刷新率最好大于50Hz,即每显示完一轮的时间不超过20ms,每个数码管显示的时间不能太长也不能太短,时间太长可能会影响刷新率,导致总体显示呈现闪烁的现象;时间太短发光二极管的电流导通时间也就短,会影响总体的显示亮度。一般控制在1ms 左右。

实验内容

本实验的内容是建立数码管动态扫描显示模块,具体内容如下:在MagicSOPC 实验箱上完成LED数码管的动态显示“1--8”8个数字;并且可通过放慢扫描速度演示动态显示的原理过程。

1、启动Quartus II建立一个空白工程,然后命名为dled.qpf。

2、新建VHDL源程序文件scan_led.vhd,输入程序代码并保存进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

3、从设计文件创建模块,由scan_led.vhd生成名为scan_led.bsf 的模块符号文件。 4、添加常量兆功能模块。

1)选择Tools>>MegaWizard Plug-In Manager 打开如图11.2所示添加兆功能模块向导。选择Create a new custom megafunction variation 新建一个新的兆功能模块。 2)在图11.2中按Next进入向导第2页。按图11.3所示选择和设置,注意标记部分

图11.2 添加兆功能模块向导对话框

图11.3 添加常量兆功能模块

3)在图11.3中单击Next进入向导第3页。按图11.4所示选择和设置,注意标记部分。 4)在图11.4中单击Next进入向导第4页,单击Finsh完成常量兆功能模块的添加。

5)新建图形设计文件命名为dled.bdf 并保存。在空白处双击鼠标左键,分别将symbol对话框中libraries:project 下的constant 和scan_led 模块放在图形文件dled.bdf 中,加入输入、输出引脚,双击各引脚符号,进行引脚命名。把各模块连接起来如图11.5所示。

图10.4 设置常量模块的位宽及量值

图11.4 设置常量模块的位宽及量值

图11.5 动态LED 显示顶层模块

6)选择目标器件并对相应的引脚进行锁定,在这里所选择的器件为Altera 公司CycloneII 系列的EP2C35F672C8芯片,具体引脚关系,查附录三。将未使用的引脚设置为三态输入(一定要设置,否则可能会损坏芯片)。 7) 将dled.bdf 设置为顶层实体。对该工程文件进行全程编译处理,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

8) 确保数字信号源(B4区域)的JP11的短路帽是处于ON 位置,JP7 中CLOCK0 的短路帽处于1024Hz位置;最后把程序下载到FPGA器件中,观察LED 数码管上的数字是否为“12345678”,然后把数字信号源JP7 的短路帽跳接到4Hz,再观察数码管上的显示数据,可以看到数据“12345678”动起来了,这正是动态扫描的方法和过程。

(具体操作中,应从浅入深,先向学生介绍静态七段译码器的设计,然后再要求学生设计动态七段译码显示)

这是一个静态七段译码的程序和图形文件: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY LED7_0 IS

PORT (D: IN STD_LOGIC_VECTOR(3 DOWNTO 0); SEG : out STD_LOGIC_VECTOR(7 DOWNTO 0)) ; END ;

ARCHITECTURE simple OF LED7_0 IS BEGIN

WITH D SELECT

SEG <= B\ B\ B\ B\ B\ B\ B\ B\ B\ B\ B\ END;

(在静态的基础上完成动态显示的设计如下) 动态扫描的程序和图形文件如下: LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY LED7_8 IS

PORT (CLK:IN STD_LOGIC;

D: IN STD_LOGIC_VECTOR(31 DOWNTO 0); DIG : out STD_LOGIC_VECTOR(7 DOWNTO 0); SEG : out STD_LOGIC_VECTOR(7 DOWNTO 0)) ; END ;

ARCHITECTURE simple OF LED7_8 IS

SIGNAL CNT8:STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL DIG1: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SEG1: STD_LOGIC_VECTOR(7 DOWNTO 0); SIGNAL SEG_DAT: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN

dig<=dig1; seg<=seg1;

P1:PROCESS(CLK) BEGIN

IF RISING_EDGE(CLK) THEN CNT8<=CNT8+1; END IF;

END PROCESS P1;

P2:PROCESS(CNT8) BEGIN

CASE CNT8 IS

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS=>NULL; END CASE;

END PROCESS P2; P3:PROCESS(SEG_DAT) BEGIN

CASE SEG_DAT IS

WHEN \

WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN \ WHEN OTHERS=>SEG1<=B\ END CASE; END PROCESS P3; END;

本文来源:https://www.bwwdw.com/article/jfh6.html

Top