您好,欢迎来到筏尚旅游网。
搜索
您的当前位置:首页七段数码管显示

七段数码管显示

来源:筏尚旅游网


七段数码管显示设计报告

目 录

一、设计任务

二、题目分析与整体构思

三、硬件电路设计

四、程序设计

五、心得体会

一. 设计任务

数码的显示方式一般有三种:第一种是字型重叠式;第二种是分段式;第三种是点阵式。 目前以分段式应用最为普遍,主要器件是七段发光二极管(LED)显示器。它可分为两种, 一是共阳极显示器(发光二极管的阳极都接在一个公共点上),另一是共阴极显示器(发光 二极管的阳极都接在一个公共点上,使用时公共点接地)。

数码管动态扫描显示,是将所用数码管的相同段(a~g 和p)并联在一起,通过选位通 信号分时控制各个数码管的公共端,循环依次点亮各个数码管。当切换速度足够快时,由于 人眼的“视觉暂留”现象,视觉效果将是数码管同时显示。 根据七段数码管的显示原理,设计一个带复位的七段数码管循环扫描程序,本程序需要着重实现两部分:

1. 显示数据的设置:程序设定 4 位数码管从左至右分别显示1、2、3、4; 2. 动态扫描:实现动态扫描时序。

利用EXCD-1 开发板实现七段数码管的显示设计,使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。四位数码管与 FPGA 之间通过8 位拨码开关(JP1)进行连接。

二. 题目分析与整体构思

使用EXCD-1 开发板的数码管为四位共阴极数码管,每一位的共阴极7 段数码管由7 个发光LED 组成,呈“ ”字状,7 个发光LED 的阴极连接在一起,阳极分别连接至FPGA相应引脚。SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4 为四位7 段数码管的位选择端。当其值为“1”时,相应的7 段数码管被选通。当输入到7 段数码管SEG_A~ SEG_G 和SEG_DP 管脚的数据为高电平时,该管脚对应的段变亮,当输入到7 段数码管

SEG_A~SEG_G 和SEG_DP 管脚的数据为低电平时,该管脚对应的段变灭。该四位数码管与 FPGA 之间通过8 位拨码开关(JP1)进行连接,当DIP 开关全部拨到上方时(板上标示为:7SEGLED),FPGA 的相应IO 引脚和四位7 段数码管连接,7 段数码管可以正常工作;当DIP 开关全部拨到下方时(板上标示为:EXPORT5),FPGA 的相应IO引脚与7 段数码管断开,相应的FPGA 引脚用于外部IO 扩展。

注意:无论拨码开关断开与否,FPGA 的相应IO 引脚都是与外部扩展接口连接的,所 以当正常使用数码管时,不允许在该外部扩展接口上安装任何功能模块板。

数码管选通控制信号分别对应4 个数码管的公共端,当某一位选通控制信号为高电平 时,其对应的数码管被点亮,因此通过控制选通信号就可以控制数码管循环依次点亮。一个 数码管稳定显示要求的切换频率要大于50Hz,那么4 个数码管则需要50×4=200Hz 以上 的切换频率才能看到不闪烁并且持续稳定显示的字符。

三. 硬件电路设计

设计结构图如下:

四. 软件设计

(1)创建工程

制定工程名,工程路径以及顶层设计所使用的输入方式,此设计我们选择硬件描述语言作为顶层设计的输入方式HDL。

(2)选择目标器件 (3)创建新源文件

这里我们选择“VHDL Module”,进行新源文件模块定义,所定义的内容是所要设计模块的实体说明,即模块的端口说明。本实验所要实现的是编码器的设计,设定SW0与SW1的四个状态分别作为SEG_SEL1、SEG_SEL2、SEG_SEL3 和SEG_SEL4四位7 段数码管的位选择端,共8 个输出信号控制四个数码管显示,选择输出为总线模式(Bus),Msb、Lsb 分别表示最大端口号与最小端口号(注意:选择端口方向in、out、inout)。 检查模块端口定义是否正确。

(4)添加源文件 (5)完成工程创建

在工程设置统计窗口,可以看到对工程的描述总结,目标器件的描述,以及新建源文件 的总结,此工程创建完成。

(6)设计输入

包括库的声明,包的声明,完整的实体说明以及结构体框架。使用VHDL 语言设计完善数码管显示的设计,拨动开关SW0~SW1 ,其四个状态为四个位选择端,LED0~LED3 作为输出显示,以观察实验结果。 1. LED 与编码器电路对应关系

(7) 仿真设计

代码输入完成后,需要对设计进行波形仿真。 有添加波形仿真文件,仿真波形文件时钟设置,设置输入信号波形和波形仿真这几个步骤。

(8) 设计综合

Xilinx 综合工具对设计进行行为级综合,将系统直接从行为级描述综合为寄存器传输级 描述。综合过程中主要完成三个步骤:首先为语法检查,检查设计文件语法是否有错误;其 次为编译过程,翻译和优化HDL 代码,将其转换为综合工具可以识别的元件序列;最后为 映射过程,将这些可识别的元件序列转换为可识别的目标技术的基本元件。

Synthesis 工具即用来完成设计综合,它可完成以下任务查看综合报告(View Synthesis Report)、查看RTL 原理图(View RTL Schematic)、查看技术原理图(Vies Technology Schematic)、检查语法(Check Syntax)、产生综合后仿真模型(Generate Post-Synthesis Simulation Model)。

(9). 引脚分配

信号名及对应板上资源 信号名 FPGA 引脚分配 时钟脉冲 clk P80 七段数码管a 段 a_to_g<0> P49 七段数码管b 段 a_to_g<1> P42 七段数码管c 段 a_to_g<2> P45

七段数码管d 段 a_to_g<3> P41 七段数码管e 段 a_to_g<4> P48 七段数码管f 段 a_to_g<5> P50 七段数码管g 段 a_to_g<6> P47 七段数码管小数点 dp P40 片选 an<0> P34 片选 an<1> P35 片选 an<2> P36 数码管1 片选 an<3> P39

复位(SW0) btn P43

(10)设计实现

设计综合完成后,即进行设计实现(Implement)。实现过程主要分为三个步骤:翻译逻 辑网表(Translate)、映射到器件单元(Map)、布局布线(Place&Route)。在处理子窗口, 鼠标双击Implement Design,信息输出窗口会显示设计信息。

(11) 生成下载文件及目标板配置

处理子窗口中双击Generate Programming File,生成可编程文件。而后双击Configure Target Device,进行目标板配置。 开发板正确连接,并上电后,可在ISE 用户区看到两个可配置芯片,分别为4Mb 的平台flash 与FPGA xc3s500e台flash 与FPGA xc3s500e。同时出现平台Flash 配置文件指定窗口,绿色芯片表示当前进行配置的芯片。该设计我们选择对FPGA xc3s500e 进行配置,平台Flash 配 置窗口点击Cancel。选定FPGA 芯片图标,右键单击选择program,在随后弹出的“Device Programming Properties”对话框直接点击ok,对FPGA 进行编程。文件下载成功,则显示“Program Succeeded”可通过开发板观察相应实验现象。至此,使用ISE 软件设计基本逻辑门电路已经完成。

(12)程序代码

1. 顶层文件 library IEEE;

use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; entity clk7seg_top is

Port ( clk : in STD_LOGIC;

btn : in STD_LOGIC; --复位信号

a_to_g : out STD_LOGIC_VECTOR (6 downto 0); an : out STD_LOGIC_VECTOR (3 downto 0); dp : out STD_LOGIC); end clk7seg_top;

architecture Behavioral of clk7seg_top is component clk7seg

Port ( x : in STD_LOGIC_VECTOR (15 downto 0); clk : in STD_LOGIC; --100MHz clr : in STD_LOGIC;

a_to_g : out STD_LOGIC_VECTOR (6 downto 0);

an : out STD_LOGIC_VECTOR (3 downto 0); dp : out STD_LOGIC); end component;

signal x : std_logic_vector(15 downto 0); begin

x<=X\"1234\"; --设定x 初值 U0 : clk7seg port map( x=>x, clk=>clk, clr=>btn,

a_to_g=>a_to_g, an=>an, dp=>dp );

end Behavioral;

2. 七段数码管显示程序 library IEEE;

use IEEE.STD_LOGIC_11.ALL; use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL; entity clk7seg is

Port ( x : in STD_LOGIC_VECTOR (15 downto 0); clk : in STD_LOGIC; --50MHz clr : in STD_LOGIC;

a_to_g : out STD_LOGIC_VECTOR (6 downto 0); an : out STD_LOGIC_VECTOR (3 downto 0); dp : out STD_LOGIC); end clk7seg;

architecture Behavioral of clk7seg is signal s : std_logic_vector (1 downto 0); signal digit : std_logic_vector (3 downto 0); signal clkdiv : std_logic_vector (20 downto 0);

signal aen : std_logic_vector (3 downto 0) := \"1111\"; begin dp <= '1';

s <= clkdiv(20 downto 19); --片选 process(clr) begin

if(clr='1') then

clkdiv <= (others => '0'); elsif(rising_edge(clk)) then clkdiv <= clkdiv + 1; end if;

end process;

process(aen,s) begin

an <= \"0000\";

if(aen(conv_integer(s))='1') then

an(conv_integer(s)) <= '1'; --an(n)为1 则片选第n 个数码管 end if;

end process; process(s) begin case s is

when \"00\" => digit <= x(3 downto 0); when \"01\" => digit <= x(7 downto 4); when \"10\" => digit <= x(11 downto 8);

when others => digit <= x(15 downto 12); --4 个数码管轮流显示,有延时 end case; end process; process(digit) begin

case digit is

when x\"0\" => a_to_g <= \"1111110\";--\"0000001\"; when x\"1\" => a_to_g <= \"0110000\";--\"1001111\"; when x\"2\" => a_to_g <= \"1101101\";--\"0010010\"; when x\"3\" => a_to_g <= \"1111001\";--\"0000110\"; when x\"4\" => a_to_g <= \"0110011\";--\"1001100\"; when x\"5\" => a_to_g <= \"1011011\";--\"0100100\"; when x\"6\" => a_to_g <= \"1011111\";--\"0100000\"; when x\"7\" => a_to_g <= \"1110000\";--\"0001111\"; when x\"8\" => a_to_g <= \"1111111\";--\"0000000\"; when x\"9\" => a_to_g <= \"1111011\";--\"0000100\"; when x\"A\" => a_to_g <= \"1110111\";--\"0001000\"; when x\"B\" => a_to_g <= \"0011111\";--\"1100000\"; when x\"C\" => a_to_g <= \"1001110\";--\"0110001\"; when x\"D\" => a_to_g <= \"0111101\";--\"1000010\"; when x\"E\" => a_to_g <= \"1001111\";--\"0110000\"; when others => a_to_g <= \"1000111\";--\"0111000\"; end case; end process; end Behavioral;

五.调试

将SW0~SW6为a_to_g 来改变其状态来观察,结果如下: SW0~SW6 \"1111110\",显示\"0\"; SW0~SW6\"0110000\",显示\"1\"; SW0~SW6 \"1101101\"显示\"2\";

SW0~SW6 \"1111001 \"显示\"3\"; SW0~SW6 \"0110011 \"显示\"4\"; SW0~SW6\"1011011 \"显示\"5\"; SW0~SW6 \"1011111\"显示\"6\"; SW0~SW6“1110000\"显示\"7\"; SW0~SW6\"1111111\"显示\"8\"; SW0~SW6 \"1111011\"显示\"9\"; SW0~SW6 \"1110111\"显示\"A\"; SW0~SW6\"0011111\"显示\"B\"; SW0~SW6 \"1001110\"显示\"C\"; SW0~SW6\"0111101\"显示\"D\"; SW0~SW6\"1001111\"显示\"E\"; SW0~SW6 \"1000111\"显示其他; 在软件中波形图如下:

调试结果:数码管显示成功实现。 6.总结

本设计,满足了本次试验设计的任务要求,改变输入状态时,数码管显示不同字符。 通过这次设计我们了解并掌握VHDL硬件描述语言的设计方法和思想,使自己能将已学过的数字电子系统设计、VHDL 程序设计等知识综合运用于电子系统的设计中,基本掌握了运用VHDL 设计电子系统的流程和方法,加强和培养了自己对电子系统的设计能力。我们也了解了VHDL的一些知识,VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电

路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。VHDL语言作为一种国际标准化的硬件描述语言,自1987年获得IEEE批准以来,经过了1993年和2001年两次修改,至今已被众多的国际知名电子设计自动化(EDA)工具研发商所采用,并随同EDA设计工具一起广泛地进入了数字系统设计与研发领域,目前已成为电子业界普遍接受的一种硬件设计技术。 VHDL语言用于数字系统设计的主要优点是: (1)允许用软件描述系统的硬件结构,即描述系统怎样分解为子系统和子系统间怎样互连。 (2)允许使用类似常用编程语言形式的系统功能指标。

(3)允许对系统设计在制造前以低廉的花费进行性能模拟验证。

(4)允许设计的详细结构从更抽象的性能指标出发沿自顶向下的路线分层次地进行综合。 (5)允许设计重用和在可编程ASIC器件上生成设计芯片。

VHDL语言的运用提高了我们设计电子系统的效率,简单实用,也在此次设计中提升了我们自身运用所学知识的能力,也更加体会出作为团队中的一员要以团队思想为主题发展自己的思维。

在此感谢各位老师的指导,感谢赞助商给我们站在这个独特舞台上展现自己的机会。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务