北邮数电实验电子沙漏实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;