实验四八位七段数码管动态显示电路的设计
- 格式:docx
- 大小:14.01 KB
- 文档页数:4
八位七段数码管动态显示电路的设计
一、 实验目的
1、 了解数码管的工作原理。
2、 学习七段数码管显示译码器的设计。
3、 学习VHDL 的 CASE 语句及多层次设计方法。
二、 实验原理
七段数码管是电子开发过程中常用的输出显示设备。在实验系统中使用的是两个四位 一体、共阴极型七段数码管。其单个静态数码管如下图 4-4-1所示。 数码管与之相么。四位一体的七段数
数码管的位选信号端口。 八个数码管
个数码管分别由各自的位选信号来控制, 被选通的数码管显示数据,其余关闭。 三、 实验内容 本实验要求完成的任务是在时钟信号的作用下, 通过输入的键值在数码管上显示相应的 键值。在实验中时,数字时钟选择 1024HZ 作为扫描时钟,用四个拨动开关做为输入,当四 个拨动开关置为一个二进制数时,在数码管上显示其十六进制的值。 四、 实验步骤 1、 打开QUARTUSI 软件,新建一个工程。 2、 建完工程之后,再新建一个 VHDL File ,打开VHDL 编辑器对话框。 3、 按照实验原理和自己的想法,在 VHDL 编辑窗口编写 VHDL 程序,用户可参照光盘中 提供的示例程序。
4、 编写完VHDL 程序后,保存起来。方法同实验一。
5、 对自己编写的VHDL 程序进行编译并仿真,对程序的错误进行修改。
6、 编译仿真无误后,根据用户自己的要求进行管脚分配。分配完成后,再进行全编译 一次,以使管脚分配
生效。 7、 根据实验内容用实验导线将上面管脚分配的 FPGA f 脚与对应的模块连接起来。 如果是调用的本书提供的 VHDL 代码,则实验连线如下:
CLK FPGA 寸钟信号,接数字时钟 CLOCK3并将这组时钟设为 1024HZ 。
由于七段数码管公共端连接到
I b ,当数码管的中的那一个段被输入高电
、 e
、 d 、 c 、 b
、 a 的
KEY[3..O]:数码管显示输入信号,分别接拨动开关的S4, S3, S2, S1。
LEDAG[6..0] :数码管显示信号,接数码管的
G 、 F 、E 、D 、C 、B 、A 。 SEL[2..0] :数码管的位选信号,接数码管的 SEL2、SEL1、 SEL0。
8、用下载电缆通过 JTAG 口将对应的sof 文件加载到FPGA 中。观察实验结果是否与自
己的编程思想一致。
五、实验现象与结果
以设计的参考示例为例, 当设计文件加载到目标器件后, 将数字信号源模块的时钟选择 为1464H Z,拨动四位拨动开关,使其为一个数值,则八个数码管均显示拨动开关所表示的
六进制的值。
六、源代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
);
end smg;
architecture beha of smg is
Signal key:std_logic_vector(3 downto
0); begin process(clk)
variable dount : std_logic_vector(2 downto 0); begin if clk'event and clk='1' then -- end if;
del<=dount;
end process;
process(del,k)
begin
case (del) is
when "000"=>key<=k;--+"0000";
when "001"=>key<=k;--+"0001";
when "010"=>key<=k;--+"0010";
when "011"=>key<=k;--+"0011";
when "100"=>key<=k;--+"0100";
when "101"=>key<=k;--+"0101"; when "110"=>key<=k;--+"0110"; when
"111"=>key<=k;--+"0111"; end case;
end process; process(key) begin case key is
entity smg is
port( clk : in std_logic; - k : in std_logic_vector(3 downto 0); -- ledag : out std_logic_vector(6
downto 0); -- del :
buffer std_logic_vector(2 示信号
定义动态扫描时钟信号
定义四位输入信号
定义七位输出信号 downto 0) -- 定义八位数码管位置显
检测时钟上升沿 dount:=dount+1; --
计数器 dount 累加
when "0000" => ledag <="0111111"; when "0001" => ledag <="0000110"; when "0010" => ledag <="1011011"; when "0011" => ledag <="1001111"; when "0100" => ledag <="1100110"; when "0101" => ledag <="1101101"; when "0110" => ledag <="1111101"; when "0111" => ledag <="0000111"; when "1000" => ledag <="1111111"; when "1001" => ledag <="1101111"; when "1010" => ledag <="1110111"; when "1011" => ledag <="1111100"; when "1100" => ledag <="0111001"; when "1101" => ledag <="1011110"; when "1110" => ledag <="1111001"; when "1111" => ledag <="1110001"; when others => null;
end case;
end process; end beha;