北邮数电实验电子沙漏实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数字电路与逻辑设计实验报告

选题:电子沙漏的设计与实现

班级:

学号:

姓名:

序号:

2014年11月12日

一、任务要求:

1、相关知识:

沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。

在结构上,两组各16 个发光二极管分别排列成为两个三角形,如图1 所示。其中:VD0 ~VD15位于上部,排列成倒三角形;VD0'~VD15'位于下部,排列成正三角形。两个三角形的顶尖相对,组成沙漏形状。当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。

2、基本要求:

①采用8*8双色点阵显示电子沙漏的开机界面,如图2所示。其中红色LED代表沙漏的上半部分沙粒VD0~VD15,绿色LED代表沙漏的下半部分

VD0'~VD15'。

②用拨码开关SW1模拟重力感应器。当SW1为低电平时,沙粒从VD0~VD15向VD0'~VD15'移动;当SW1为高电平时,沙粒从VD0'~VD15'向VD0~VD15移动。

③按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的1~16所示(若SW1为高电平,则点阵显示移动顺序为16~1)。每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。

④设计实现一个60秒计时器,当按键BTN0启动时开始工作,用于在沙粒移动过程中进行计时校准,并用数码管DISP0~DISP1显示计时结果。

3、提高要求:

①可以调节控制电子沙漏的流动速度。

②用多种方式呈现电子沙漏界面。

③自行设定沙粒的移动路径,显示每颗沙粒的移动过程。

④外接重力感应器,实现真实的电子沙漏功能。

⑤自拟其它功能。

二、系统设计:

总体框图:

分块设计:

①输入模块:由btn按钮和拨码开关构成。采用序列存储的方式存储相应的输入。

②输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

③数码管、点阵显示模块:将寄存器内的数进行输出到数码管上。

④防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

流程图:

三、仿真波形及波形分析:点阵显示采用行扫描模式

四、源程序:

----------------------------------------

--File Name :ShaLou.vhd

--System :Quartus II 9.1

--Author :Wang Hongjie 2012210176

--Revision :Version 1.0,2014-11-3

----------------------------------------

library ieee;

use ieee.std_logic_1164.all;

entity shalou is

port(

clk:in std_logic; --系统时钟

sw:in std_logic; --拨码开关SW1控制沙粒移动方向

bto:in std_logic; --启动暂停

bt1:in std_logic; --复位

bt2:in std_logic; --速度

lieh:out std_logic_vector(7 downto 0); --RED

liel:out std_logic_vector(7 downto 0); --GREEN

hang:out std_logic_vector(7 downto 0); --行扫描

a:out std_logic_vector(6 downto 0); --七段数码管

cat:out std_logic_vector(5 downto 0)); --数码管选择

end entity;

Architecture a of shalou is

signal temp:integer range 0 to 49999;

signal clktmp:std_logic;

signal clkout : std_logic;

signal temp1:integer range 0 to 199;

signal clktmp1:std_logic;

signal clkout1 : std_logic;

signal temp2:integer range 0 to 299;

signal clktmp2:std_logic;

signal clkout2 : std_logic;

signal qt: integer range 0 to 5;

signal bto_tmp: std_logic;

signal bto_out: std_logic;

signal qt1: integer range 0 to 5;

signal bto_tmp1: std_logic;

signal bto_out1: std_logic;

signal qt2: integer range 0 to 5;

signal bto_tmp2: std_logic;

signal sudu:integer range 0 to 2;

相关文档
最新文档