EDA课程设计八位数码管扫描显示电路的设计 2解读
- 格式:doc
- 大小:678.49 KB
- 文档页数:12
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;