vhdl实验四

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

苏州科技大学天平学院电子与信息工程学院数字系统设计技术

实验名称LED动态显示模块设计

学生姓名周妍智

学号1430119231

专业班级通信1422

指导教师刘传洋

年月日—年月日

一、实验目的

通过实验掌握LED 的显示控制方法;

通过实验加深对数码管动态显示工作原理的掌握。

二、实验设备

硬件:FPGA实验开发平台,USB下载线,多位动态数码管显示电路,PC 机;

软件:Quartus_II开发环境,Windows 07/XP。

三、实验内容

编写程序使实验板上八段数码管显示任意四位0到9的字符。

四、实验原理

1) 八段数码管

嵌入式系统中,经常使用八段数码管来显示数字或符号,由于它具有显示清晰、亮度高、使用电压低、寿命长的特点,因此使用非常广泛。

结构

八段数码管由八个发光二极管组成,其中七个长条形的发光管排列成“日”字形,右

下角一个点形的发光管作为显示小数点用,八段数码管能显示所有数字及部份英文字母。见图1。

图1 数码管符号图

类型

八段数码管有两种不同的形式:一种是八个发光二极管的阳极都连在一起的,称之为共阳极八段数码管;另一种是八个发光二极管的阴极都连在一起的,称之为共阴极八段数码管。

工作原理

以共阳极八段数码管为例,当控制某段发光二极管的信号为低电平时,对应的发31

光二极管点亮,当需要显示某字符时,就将该字符对应的所有二极管点亮;共阴极二极管则相反,控制信号为高电平时点亮。

电平信号按照dp,g,e…a 的顺序组合形成的数据字称为该字符对应的段码,常用字符的段码表如下:

表1 常用字符的段码表

显示方式

八段数码管的显示方式有两种,分别是静态显示和动态显示。

静态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管控制信号一直保持有效。动态显示是指当八段数码管显示一个字符时,该字符对应段的发光二极管是轮流点亮的,即控制信号按一定周期有效,在轮流点亮的过程中,点亮时间是极为短暂的(约1ms),由于人的视觉暂留现象及发光二极管的余辉效应,数码管的显示依然是非常稳定的。

2) 电路原理

本实验电路中使用的是共阴极八段数码管。数码管的显示由功率晶体管进行驱动,它的DIG1~DIG3引脚输出LED显示所需的位驱动信号,而SEGA~SEGG 及DP 引脚输出LED 显示所需的段驱动信号。相关电路见图2。

图2 八段数码管连接电路

五、实验步骤

使用USB下载线连接实验平台主板上的Jtag口和PC机的USB口,并用USB连接线连接实验平台主板上的USB口和主机的另一个USB口(作为电源连接)。

1).建立项目文件夹E:/work/sy4 并编译设计文件。

2).建立VHDL 文件工程,工程名为exp_4。

程序:

数码管动态显示实验参考程序:

1、5进制计数器

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_arith.all;

entity cont_5 is

port(clk,rst,ld,en:in std_logic;

din:in std_logic_vector(3 downto 0);

dq:out std_logic_vector(3 downto 0);

co:out std_logic);

end cont_5;

architecture rtl of cont_5 is

signal dq_tmp:std_logic_vector(3 downto 0);

begin

dq <= dq_tmp;

co<= en and dq_tmp(2) ; process(clk,rst)

begin

if(rst='0')then

dq_tmp<="0000";

elsif(clk'event and clk='1')then if(ld='0')then

dq_tmp<=din;

elsif(en='1')then

if(dq_tmp(2)='1' )then

dq_tmp<="0000";

else

dq_tmp<=dq_tmp + '1';

end if;

end if;

end if;

end process;

end rtl;

2、10进制计数器

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity cont_10 is

port(clk,rst,ld,en:in std_logic;

din:in std_logic_vector(3 downto 0);

dq:out std_logic_vector(3 downto 0);

co:out std_logic);

end cont_10;

architecture rtl of cont_10 is

signal dq_tmp:std_logic_vector(3 downto 0);

begin

dq <= dq_tmp;

co<= en and dq_tmp(3) and dq_tmp(0);

process(clk,rst)

begin

if(rst='0')then

dq_tmp<="0000";

elsif(clk'event and clk='1')then

if(ld='0')then

dq_tmp<=din;

elsif(en='1')then

if(dq_tmp(3)='1' and dq_tmp(0)='1')then

dq_tmp<="0000";

else

dq_tmp<=dq_tmp + '1';

end if;

end if;

end if;

end process;

end rtl;

3、ms分频电路

library ieee;

use ieee.std_logic_1164.all;

entity div_1khz is

port(clk,rst,ld,en:in std_logic;

en_100ns,en_1us,en_10us,en_100us,en_1ms:out std_logic; dq_100us:out std_logic_vector(3 downto 0));

end div_1khz;

architecture stru of div_1khz is

signal dq0,dq1,dq2,dq3,dq4,dq5:std_logic_vector(3 downto 0); signal en0,en1,en2,en3,en4,en5:std_logic;

component cont_5

port(clk,rst,ld,en:in std_logic;

din:in std_logic_vector(3 downto 0);

相关文档
最新文档