实验四 数码管显示实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验四:数码管显示实验
一、实验目的:
学习七段数码管显示译码器的设计,进一步了解、熟悉和掌握FPGA开发软件QuatusII的使用方法和VHDL的编程方法。
二、实验内容:
smartSOPC实验箱上有2个4位动态共阳数码管LED12和LED13。
本实验的内容是建立7段译码显示模块,用于控制LED数码管的动态显示。
要求在smartSOPC实验箱上的数码管循环依次显示0—9,A—F共16个字符。
三、实验原理:
1.电子电路显示部分里,发光二极管(LED)、七段显示数码管、液晶显示(LCD)均是十分常见的人机接口电路。
通常点亮一个LED 所需的电流在5~20mA之间,电流愈大,LED的亮度也高,相对的使用寿命也愈短。
若以10mA导通电流来估算一个接5V的串接电阻值计算应为:(5-1.6)/10mA≈0.34KΩ。
2.七段显示数码管分为共阳、共阴二种极性。
它们等效成八个LED相连电路。
3.共阴极七段显示器的LED位置定义和等效电路
共阴极七段显示码十六进制转换表
1.实验步骤
1)建立一个新的工程,编写VHDL程序源代码;
2)实验箱配置引脚如表2.3,在引脚适配过程中配置相应的引脚。
3)点击综合按键,对系统进行综合;
4)取出smartSOPC实验箱,接通电源(线路已连接,不需要另连线路);
5)将程序下载到实验箱,并进行实验,观察实验结果,并分析其原因。
2.实验参考程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY SLEDs IS
PORT( clk:IN STD_LOGIC;
dig:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)
seg:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END;
ARCHITECTURE ONE OF SLEDs IS
SIGNAL Counter:Integer RANGE 0 TO 48000000;
SIGNAL clk1:STD_LOGIC;
SIGNAL d: STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL seg_r: STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF Counter=48000000-1 THEN counter<=0;
clk1<=Not clk1;
ELSE Counter<=Counter+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk1)
BEGIN
IF(clk1'EVENT AND clk1='1') THEN
d<=d+1;
END IF;
END PROCESS;
PROCESS(d)
BEGIN
CASE d IS
WHEN X"0"=>seg_r<=X"c0";
WHEN X"1"=>seg_r<=X"f9";
WHEN X"2"=>seg_r<=X"a4";
WHEN X"3"=>seg_r<=X"b0";
WHEN X"4"=>seg_r<=X"99";
WHEN X"5"=>seg_r<=X"92";
WHEN X"6"=>seg_r<=X"82";
WHEN X"7"=>seg_r<=X"f8";
WHEN X"8"=>seg_r<=X"80";
WHEN X"9"=>seg_r<=X"90";
WHEN X"a"=>seg_r<=X"88";
WHEN X"b"=>seg_r<=X"83";
WHEN X"c"=>seg_r<=X"c6";
WHEN X"d"=>seg_r<=X"a1";
WHEN X"e"=>seg_r<=X"86";
WHEN X"f"=>seg_r<=X"8e";
WHEN OTHERS=>seg_r<=X"FF";
END CASE;
END PROCESS;
seg<=seg_r;
END;
3.实验思考
1)实现数码管的动态显示,既8个数码管分别显示0—7共8个数
解:程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY SLEDS IS
PORT(clk: IN STD_LOGIC;
dig: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
seg: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END;
ARCHITECTURE ONE OF SLEDS IS
SIGNAL Counter:Integer RANGE 0 TO 24000000; SIGNAL clk1:STD_LOGIC;
SIGNAL d:STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL f:STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL seg_r:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF Counter=24000-1 THEN counter<=0;
clk1<=Not clk1;
ELSE Counter<=Counter+1;
END IF;
END IF;
END PROCESS;
PROCESS(clk)
BEGIN
IF(CLK1'EVENT AND clk1='1') THEN
f<=f+1;
D<=D+1;
END IF;
END PROCESS;
process(f)
begin
case f is
WHEN X"0"=> dig<="11111110";--0
WHEN X"1"=> dig<="11111101";--1
WHEN X"2"=> dig<="11111011";--2
WHEN X"3"=> dig<="11110111";--3
WHEN X"4"=> dig<="11101111";--4
WHEN X"5"=> dig<="11011111";--5
WHEN X"6"=> dig<="10111111";--6
WHEN X"7"=> dig<="01111111";--7
WHEN OTHERS=> dig<=X"FF";
END CASE;
end process;
PROCESS(d)
BEGIN
CASE d IS
WHEN X"0"=> seg_r<=X"c0";--0
WHEN X"1"=> seg_r<=X"f9";--1
WHEN X"2"=> seg_r<=X"a4";--2
WHEN X"3"=> seg_r<=X"b0";--3
WHEN X"4"=> seg_r<=X"99";--4
WHEN X"5"=> seg_r<=X"92";--5
WHEN X"6"=> seg_r<=X"82";--6
WHEN X"7"=> seg_r<=X"f8";--7
WHEN X"8"=> seg_r<=X"80";--8
WHEN X"9"=> seg_r<=X"90";--9
WHEN X"a"=> seg_r<=X"88";--a
WHEN X"b"=> seg_r<=X"83";--b
WHEN X"c"=> seg_r<=X"c6";--c
WHEN X"d"=> seg_r<=X"a1";--d
WHEN X"e"=> seg_r<=X"86";--e
WHEN X"f"=> seg_r<=X"8e";--f
WHEN OTHERS=> SEG_R<=X"FF";
END CASE;
END PROCESS;
seg<=seg_r;
END;
2)通过按键单独控制对应的数码管进行控制,例如Key1按一下时,对应数码管的显示数值加一。
7.实验总结:。