数 字 电 路 实 验 报 告
学院:电子工程学院 班级:2012211209 学号:2012211063 姓名:张克寒
一 实验课题任务介绍和要求
沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙
漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一
粒往下掉,下部的沙粒一粒一粒堆起来。
在结构上,两组各16 个发光二极管分别排列成为两个三角形,如图1 所示。其中:VD0~
VD15 位于上部,排列成倒三角形;VD0'~VD15'位于下部,排列成正三角形。两个三角形
的顶尖相对,组成沙漏形状。当上部有一个发光二极管熄灭时,相应地下部就有一个发光
二极管点亮,模拟了沙粒的运动。 1、采用 8*8 双色点阵显示电子沙漏的开机界面,如图2 所示。其中红色LED 代表沙
漏的上半部分沙粒VD0~VD15,绿色LED 代表沙漏的下半部分VD0'~VD15'。 2、用拨码开关 SW1 模拟重力感应器。当SW1 为低电平时,沙粒从VD0~VD15 向
VD0'~VD15'移动;当SW1 为高电平时,沙粒从VD0'~VD15'向VD0~VD15 移动。
3、按键 BTN0 作为计时启动停止按键,启动后沙粒即可按照SW1 设定的方向移动,
以SW1 为低电平时为例,LED 移动的顺序与对应关系如图3 的①~○16所示(若SW1
为高电平,则点阵显示移动顺序为○16~①)。每颗沙粒的移动时间为1 秒,当移动
到图3 的○16时,若SW1 仍为低电平,则保持沙粒不动,但计时继续,直到SW1 的电平发生变化或者BTN0 计时停止。4、设计实现一个 60 秒计时器,当按键BTN0 启动时开始工作,用于在沙粒移动过程
中进行计时校准,并用数码管DISP0~DISP1 显示计时结果。 提高要求:
1、可以调节控制电子沙漏的流动速度。 2、用多种方式呈现电子沙漏界面。
3、自行设定沙粒的移动路径,显示每颗沙粒的移动过程。 4、外接重力感应器,实现真实的电子沙漏功能。 5、自拟其它功能。
二 系统设计
因为要利用Quartus II 9.0软件来进行硬件语言的编译,所以应该做好系统设计,下图是我的系统设计
三 仿真波形与波形分析
四 源代码
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; entity div4k is
port(clk_in : in std_logic; clk_out : out std_logic); end;
architecture a of div4k is
signal cnt : integer range 0 to 1999; signal clk_tmp : std_logic; begin
process(clk_in) begin
if (clk_in'event and clk_in='1') then if cnt=1999 then
cnt<=0; clk_tmp<= not clk_tmp; else
cnt<=cnt+1; end if; end if; end process;
clk_out<=clk_tmp;
end;
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY scan_led_2 IS PORT ( CLK : IN STD_LOGIC;
BTN0: IN STD_LOGIC;--运行和停止 SW0 : IN STD_LOGIC;--控制开机画面 SW1 : IN STD_LOGIC;--控制沙漏上下 SW2 : IN STD_LOGIC;--控制沙漏速率 SW3 : IN STD_LOGIC;--控制沙漏速率 SW4 : IN STD_LOGIC;--控制沙漏速率
SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT : OUT STD_LOGIC_VECTOR(5 DOWNTO 0); R:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); Cr:OUT STD_LOGIC_VECTOR(0 TO 6); Cg:OUT STD_LOGIC_VECTOR(0 TO 6)); END;
ARCHITECTURE arc OF scan_led_2 IS component div4k
port(clk_in: in std_logic; clk_out: out std_logic); end component;
SIGNAL clk_tmp1 : std_logic;
SIGNAL BT1:STD_LOGIC_VECTOR(5 DOWNTO 0); SIGNAL CNT6 : INTEGER RANGE 0 TO 6; SIGNAL CNT9 : INTEGER RANGE 0 TO 9; SIGNAL A : INTEGER RANGE 0 TO 9;
SIGNAL S : INTEGER RANGE 0 TO 7;--控制点阵显示 SIGNAL S1 : INTEGER RANGE 0 TO 16;--沙漏状态 SIGNAL S2 : INTEGER RANGE 17 TO 42;--开机画面
SIGNAL SW_0 : STD_LOGIC;--SW_0 为1时运行 为0时保持开机画面 SIGNAL SW_1 : STD_LOGIC;--SW_1 为0时向下运动 为1时向上运动 SIGNAL SW_2 : STD_LOGIC;--沙漏下落速率档位 SIGNAL SW_3 : STD_LOGIC; SIGNAL SW_4 : STD_LOGIC;
SIGNAL FLAG : STD_LOGIC;-- FLAG='1'时运行 FLAG=‘0’停止