[试题]实验五 七段译码扫描显示电路的设计
实验五、七段译码扫描显示电路的设计
一、实验目的
1、了解七段数码管的工作原理;
2、学习七段译码器扫描电路的设计;
二、实验
内容
财务内部控制制度的内容财务内部控制制度的内容人员招聘与配置的内容项目成本控制的内容消防安全演练内容
1、 设计一个七段译码电路
2、 设计一个具有异步复位的加减可控的4位二进制计数器 3、 设计一个由计数器和译码器构成的计数译码显示电路 4、 设计一个具有8位动态扫描显示的电路
三、实验原理
七段译码器显示原理如图5-1所示,译码器的真值
表
关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf
见表5-1。A,B,C,D 为四位二进制输入信号,a,b,c,d,e,f,g 为译码输出,通过拨号开关改变输入二进制码,则输出数码管上显示相应的数值。
图5-1 译码器逻辑图
表5,1 译码器的真值表
数 输入 输出
值 A B C D a b c d e f g
0 0 0 0 0 1 1 1 1 1 1 0
1 0 0 0 1 0 1 1 0 0 0 0
2 0 0 1 0 1 1 0 1 1 0 1
3 0 0 1 1 1 1 1 1 0 0 1
4 0 1 0 0 0 1 1 0 0 1 1
5 0 1 0 1 1 0 1 1 0 1 1
6 0 1 1 0 1 0 1 1 1 1 1
7 0 1 1 1 1 1 1 0 0 0 0
8 1 0 0 0 1 1 1 1 1 1 1
9 1 0 0 1 1 1 1 1 0 1 1
A 1 0 1 0 1 1 1 0 1 1 1
B 1 0 1 1 0 0 1 1 1 1 1
C 1 1 0 0 1 0 0 1 1 1 0
D 1 1 0 1 0 1 1 1 1 0 1
E 1 1 1 0 1 0 0 1 1 1 1
F 1 1 1 1 1 0 0 0 1 1 1
实验箱上一共有8 个数码管,如果按照传统的数码管驱动方式(静态扫描方式),则需要8 个七段译码器进行驱动,这样既浪费资源,有时电路工作也不可靠。所以现在最常见的数码管驱动电路已经不用上述的静态扫描方式了,而是采用动态扫描显示的方式,这种方式只需一个译码器就可以实现电路正常、可靠的工作,这样大大节省资源。
动态数码扫描显示方式是利用了人眼的视觉暂留效应,把八个数码管按一定顺序(从左至右或从右至左)进行点亮,当点亮的频率(即扫描频率)不大时,我们看到的是数码管一个个的点亮,然而,当点亮频率足够大时,我们看到的不再是一个一个的点亮,而是全部同时显示(点亮),与传统方式得到的视觉效果完全一样。因此我们只要给数码管这样一个扫描频率,那么就可以实现两个以上的数码管同时点亮。而这个频率我们可以通过一个计数器来产生,只要计数频率足够大,就可以实现我们的要求。事实上,因为数码管点亮不是瞬间就可以的,它也需要一定的时间,该时间与数码管的选择有关系。为了折中这一对矛盾,实验中一般可将计数频率选择在100Hz左右肯定可以满足上述两个要求。
图5-2 所示的是8 位数码扫描显示电路,其中每个数码管的8 个段:h、g、f、e、d、c、b、a(h 是小数点)都分别连在一起,8 个数码管分别由8 个选通
、k2、„ k8 来选择。被选通的数码管显示数据,其余关闭。如在某一时信号k1
刻,k3 为高电平,其余选通信号为低电平,这时仅k3 对应的数码管显示来自段信号端的数据,而其它7 个数码管呈现关闭状态。根据这种电路状况,如果希望在8 个数码管显示希望的数据,就必须使得8 个选通信号k1、k2、„ k8 分别被单独选通,并在此同时,在段信号输入口加上希望在该对应数码管上显示的数据,于是随着选通信号的扫变,就能实现扫描显示的目的。
实验参考扫描显示程序中clk 是扫描时钟;SG 为7 段控制信号,由高位至低位分别接g、f、e、d、c、b、a 7个段;BT 是位选控制信号,接图5-2 中的8 个选通信号:k1、k2、„ k8 。程序中CNT8 是一个3 位计数器,作扫描计数信号,由进程P2 生成;进程P3 是7 段译码查表输出程序,进程P1 是对8 个数码管选通的扫描程序,例如当CNT8 等于"001" 时,K2 对应的数码管被选通,同时,A 被赋值3,再由进程P3 译码输出"1001111", 显示在数码管上即为“3”;当CNT8 扫变时,将能在8 个数码管上显示数据:13579BDF 。原理图如图5,2所示。
图5-2 八位数码管显示电路
四、实验
步骤
新产品开发流程的步骤课题研究的五个步骤成本核算步骤微型课题研究步骤数控铣床操作步骤
1、建立一个工程项目,路径如:D:\20050837\fifth,项目名和顶层实体名为disp;
2、设计一个七段译码器,并进行编译仿真与下载测试; 3、设计一个四位二进制计数器,并进行编译仿真; 4、设计一个0~F的计数译码显示电路,并进行编译仿真与下载测试;
1)分别生成七段译码器和四位二进制计数器的模块符号;
2)用原理图方式设计计数译码显示电路,如图5-3所示。
3)将图5-3用元件例化语句描述,并进行编译仿真与下载测试;
图5-3 计数译码显示电路 5、、设计一个动态扫描显示电路,在8 个数码管上显示数据:13579BDF;并进行编译仿真与下载测试;
五、参考程序
1、七段译码显示程序
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DECL7S IS
PORT ( Data : IN STD_LOGIC_VECTOR(3 DOWNTO 0);
LED7S : OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ;
END ;
ARCHITECTURE one OF DECL7S IS
BEGIN
PROCESS( data )
BEGIN
CASE data IS
WHEN "0000" => LED7S <= "0111111" ;
WHEN "0001" => LED7S <= "0000110" ;
WHEN "0010" => LED7S <= "1011011" ;
WHEN "0011" => LED7S <= "1001111" ;
WHEN "0100" => LED7S <= "1100110" ;
WHEN "0101" => LED7S <= "1101101" ;
WHEN "0110" => LED7S <= "1111101" ;
WHEN "0111" => LED7S <= "0000111" ;
WHEN "1000" => LED7S <= "1111111" ;
WHEN "1001" => LED7S <= "1101111" ; WHEN "1010" => LED7S <= "1110111" ;
WHEN "1011" => LED7S <= "1111100" ;
WHEN "1100" => LED7S <= "0111001" ;
WHEN "1101" => LED7S <= "1011110" ;
WHEN "1110" => LED7S <= "1111001" ;
WHEN "1111" => LED7S <= "1110001" ;
WHEN OTHERS => NULL ;
END CASE ;
END PROCESS ;
END ;
、8位动态译码显示电路 2
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY SCAN_LED IS
PORT ( CLK : IN STD_LOGIC;
Data1,data2,data3, data4,data5,data6, data7,data8:in STD_LOGIC_VECTOR(3 DOWNTO 0)
SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); --段控制信号输出 BT: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) );--位控制信号输出 END;
ARCHITECTURE one OF SCAN_LED IS SIGNAL CNT8 : STD_LOGIC_VECTOR(2 DOWNTO 0); SIGNAL dispdata : INTEGER RANGE 0 TO 15; BEGIN
P1:PROCESS( CNT8 )
BEGIN
CASE CNT8 IS
WHEN "000" => BT <= "00000001" ; dispdata <= data1 ; WHEN "001" => BT <= "00000010" ; dispdata <= data2 ; WHEN "010" => BT <= "00000100" ; dispdata <= data3 ; WHEN "011" => BT <= "00001000" ; dispdata <= data4 ; WHEN "100" => BT <= "00010000" ; dispdata <=data5 ; WHEN "101" => BT <= "00100000" ; dispdata <= data5 ;
WHEN "110" => BT <= "01000000" ; dispdata <=data7 ; WHEN "111" => BT <= "10000000" ; dispdata <= data8 ; WHEN OTHERS => NULL ;
END CASE ;
END PROCESS P1;
P2:PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK = '1' THEN CNT8 <= CNT8 + 1; END IF;
END PROCESS P2 ;
P3:PROCESS( A ) –-译码电路
BEGIN
CASE A IS
WHEN 0 => SG <= "0111111"; WHEN 1 => SG <= "0000110"; WHEN 2 => SG <= "1011011"; WHEN 3 => SG <= "1001111"; WHEN 4 => SG <= "1100110"; WHEN 5 => SG <= "1101101"; WHEN 6 => SG <= "1111101"; WHEN 7 => SG <= "0000111"; WHEN 8 => SG <= "1111111"; WHEN 9 => SG <= "1101111"; WHEN 10 => SG <= "1110111"; WHEN 11 => SG <= "1111100";
WHEN 12 => SG <= "0111001"; WHEN 13 => SG <= "1011110";
WHEN 14 => SG <= "1111001"; WHEN 15 => SG <= "1110001"; WHEN OTHERS => NULL ;
END CASE ;
END PROCESS P3;
END;
六、实验报告
根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析、硬件测试和详细实验过程;给出程序分析报告、仿真波形图及其分析报告。 七、选做实验
1、修改8位扫描显示程序的进程P1 中的显示数据直接给出的方式,增加8 个4 位锁存器,作为显示数据缓冲器,使得所有8 个显示数据都必须来自缓冲器。缓冲器中的数据可以通过不同方式锁入(如来自A/D 采样的数据、来自分时锁入的数据、来自串行方式输入的数据,或来自单片机等)。