数电实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一.实验名称数码管扫描显示控制器设计与实现
二.实验目的
①掌握VHDL语言的语法规范,掌握时序电路描述方法。
②掌握多个数码管动态扫描现实的原理及设计方法。
三.实验所用仪器及元器件
①计算机:装有Quartus软件,为VHDL语言提供操作场所。
②直流稳压电源:通过USB接口实现,为实验开发板提供稳定
电源。
③数字系统与逻辑设计实验开发板:使试验结果下载到开发板
上,实现整个实验的最终结果。
四.实验原理与实验任务
多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环依次点亮多个数码管,利用人眼的视觉暂留现象,只要扫描的频率大于50HZ,将看不到闪烁现象。
当闪烁显示的发光二极管闪烁频率较高时我们将观察到持续点亮的现象。同理,当多个数码管依次显示,当切换速度够快时,我们将观察到所有数码管都是同事在显示。一个数码管要稳定显示要求显示频率>50hz,那么6个数码管则需要50*6=300hz以上才能看到持续稳定点亮的现象。
四.实验内容
①用VHDL语言设计并实现六个数码管串行扫描电路,要求同
时显示0、1、2、3、4、5这6个不同的数字图形到6个数码管上,仿真并下载验证其功能。
②用VHDL语言设计并实现六个数码管滚动显示电路。
1)循环左滚动,始终点亮6个数码管,左出右进。状态为:
012345→123450→234501→345012→450123→501234→
012345
2)向左滚动,用全灭的数码管填充右边,直至全部变灭,然后
再一次从右边一个一个的点亮。状态为012345→12345X→
2345XX→345XXX→45XXXX→5XXXXX→XXXXXX→XXXXX0→
XXXX01→XXX012→XX0123→X01234→012345,其中“X”表示
数码管不显示。
五.设计思路及过程
串行显示设计思路:数码管串行扫描显示012345六个数,利用
视觉暂留使人感觉6个数稳定显示。利用状态机来实现,定义
六个状态分别表示0至5六个数,时钟到来时转到下一个状态,
这样就可以依次点亮6个数码管,每次显示不同的数字(状态)。
串行显示VHDL代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY lzf261 IS
PORT(clk: IN STD_LOGIC;
s:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));--select LED
END lzf261;
ARCHITECTURE Moore OF lzf261 IS
TYPE state_type IS (s1,s2,s3,s4,s5,s6);
SIGNAL current_state,next_state:state_type;
BEGIN
P1:PROCESS(current_state)
BEGIN
CASE current_state IS
WHEN s1=>next_state<=s2;
WHEN s2=>next_state<=s3;
WHEN s3=>next_state<=s4;
WHEN s4=>next_state<=s5;
WHEN s5=>next_state<=s6;
WHEN s6=>next_state<=s1;--transform
END CASE;
END PROCESS;
P2:PROCESS(clk)--clock
BEGIN
IF(clk'EVENT AND clk='1') THEN
current_state<=next_state;
END IF;
END PROCESS;
P3:PROCESS(current_state) --Display
BEGIN
CASE current_state IS
WHEN s1 =>s<="1111110";cat<="011111";
WHEN s2 =>s<="0110000";cat<="101111";
WHEN s3 =>s<="1101101";cat<="110111";
WHEN s4 =>s<="1111001";cat<="111011";
WHEN s5 =>s<="0110011";cat<="111101";
WHEN s6 =>s<="1011011";cat<="111110";--output
END CASE;
END PROCESS;
END Moore;
滚动显示设计思路:数码管滚动显示依然采用状态机语言进行设计。
定义了一个状态,使用单进程方式和选择语句将每个可能显示的状态都列出来,再加一个分频器使显示能稳定下来。
滚动显示①VHDL代码:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY lzf262 IS
PORT(clk: IN STD_LOGIC;
s:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);
cat:OUT STD_LOGIC_VECTOR(5 DOWNTO 0));
END lzf262;
ARCHITECTURE Moore OF lzf262 IS
TYPE state_type IS (s1,s2,s3,s4,s5,s6);
SIGNAL state:state_type;
SIGNAL x:INTEGER RANGE -1 TO 6:=-1;
SIGNAL y:INTEGER RANGE 0 TO 6:=0;
SIGNAL clk_out:STD_LOGIC;
SIGNAL tmp:INTEGER RANGE 0 TO 599;
BEGIN
p1:PROCESS(clk)
BEGIN
IF (clk'event AND clk='1')THEN
IF tmp=599 THEN
tmp<=0;
ELSE
tmp<=tmp+1;
END IF;
END IF;
END PROCESS p1;
p2: PROCESS(tmp)
BEGIN
IF tmp=599 THEN
clk_out<='1';
ELSE
clk_out<='0';
END IF;
END PROCESS p2; --Frequency Segmentation
p3:PROCESS(clk_out) --Display
BEGIN
IF(clk'EVENT AND clk='1') THEN
IF(y=5) THEN
y<=0;
END IF;
IF x=5 Then