vhdl实验四
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);