EDA课程设计八位数码管扫描显示电路的设计 2解读

  • 格式:doc
  • 大小:678.49 KB
  • 文档页数:12

下载文档原格式

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

EDA技术应用期末论文题目:八位数码管动态显示

姓名:

班级:

学号:

1.系统总体方案设计 (1)

2. LED的工作原理 (2)

2.1 LED工作原理 (3)

2.2 LED动态扫描显示原理 (3)

3.系统设计 (4)

3.1硬件电路设计 (9)

3.2 VHDL代码设计 (9)

4.运行调试......................................................,,7 4.1时序仿真. (7)

5 总结..............................................,,,,,,,,,,,,,,,9

6.参考文献 (10)

1.系统总体方案设计设计流程图如下:

首先,我们要对所要设计的八位数码管静态扫描显示电路充分理解,同时在了解了所给的硬件器材的基础上需进行“源程序的编辑和编译”——用一定的逻辑表达手段将设计表达出来;其次要进行“逻辑综合”——将用一定的逻辑表达手段表达出来的设计,经过一系列的操作,分解成一系列的基本逻辑电路及对应关系;然后要进行“目标器件的布线∕适配”——在选定的目标器件中建立这些基本逻辑电路及对应关系;最后,目标器件的编程下载——将前面的软件设计经过编程变成具体的设计系统,同时在设计过程中要进行有关“仿真”——模拟有关设计结果,看是否与设计构想相符。

系统结构框图如下:

2. LED的工作原理

2.1 LED工作原理

LED为分段式半导体显示器,通常称为七段发光二极管显示器。下图为七段发光二极管显示器共阴极和共阳极的电路图。对共阴极显示器的公共端应接地,给a-g输入相应高电平,对应字段的发光二极管显示十进制数;对共阳极的公共端应接+5V电源,给a-g输入端相应低电平,对应字段的发光二极管也显示十进制数。

2.2 LED动态扫描显示原理

LED有段码和位码之分,所谓段码就是让LED显示出“8.”的八位数据,一般情况下要通过一个译码电路,将输入的4位2进制数转换为与LED显示对应的8位段码。位码也就是LED的显示使能端,对于共阳级的LED而言,高电平使能。要让8个LED同时工作,显示数据,就是要不停的循环扫描每一个LED,并在使能每一个LED的同时,输入所需显示的数据对应的8位段码。虽然8个LED是依次显示,但是受视觉分辨率的影响,看到的现象是8个LED同时工作。

多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。

3 系统设计

3.1 硬件电路设计

3.2 VHDL程序设计

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_arith.all;

use ieee.std_logic_unsigned.all;

use ieee.std_logic_signed.all;

entity scan_seg8 is

port(clk3,clk5:in std_logic;

rst: in std_logic;

seg_da:out std_logic_vector(7 downto 0);

seg_sel:out std_logic_vector(2 downto 0)

);

end scan_seg8;

architecture ado of scan_seg8 is

signal

seg_buf1,seg_buf2,seg_buf3,seg_buf4,seg_buf0:std_logic_vector(3 downto 0);

signal seg_buf5,seg_buf6,seg_buf7,seg_buf8:std_logic_vector(3 downto 0);

signal seg_cnt:std_logic_vector(2 downto 0);

signal seg_temp:std_logic_vector(3 downto 0);

signal clk:std_logic;

begin

process(clk5)

begin

if clk5'event and clk5='1' then

clk<=not clk;

end if;

end process;

process(clk5,rst)

begin

if clk5' event and clk5='1' then

if clk='1' then

seg_buf1<="0010";

seg_buf2<="0010";

seg_buf3<="1000";

seg_buf4<="0010";

seg_buf5<="0000";

seg_buf6<="0001";

seg_buf7<="0000";

seg_buf8<="0010";

else

seg_buf1<="1111";

seg_buf2<="1111";

seg_buf3<="1111";

seg_buf4<="1111";

seg_buf5<="1111";

seg_buf6<="1000";

seg_buf7<="0001";

seg_buf8<="0000";

end if;

end if;

相关主题