《数字电路与逻辑设计实验(下)》
题目:电子沙漏
学号: 2012210885 姓名: 杨 纯 班级: 2012211203 学院: 电子工程学院 时间: 2014/11/7
一、设计课题的任务要求
相关知识:
沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。
在结构上,两组各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 的①~ 所示(若SW1 为高电平,则点阵显示移动顺序为 ~①)。每颗沙粒的移动时间为1 秒,当移动
到图3 的 时,若SW1 仍为低电平,则保持沙粒不动,但计时继续,直到SW1 的 电平发生变化或者BTN0 计时停止。
4、设计实现一个 60 秒计时器,当按键BTN0 启动时开始工作,用于在沙粒移动过程
中进行计时校准,并用数码管DISP0~DISP1 显示计时结果。
提高要求:
1、可以调节控制电子沙漏的流动速度。
2、用多种方式呈现电子沙漏界面。
3、自行设定沙粒的移动路径,显示每颗沙粒的移动过程。
4、外接重力感应器,实现真实的电子沙漏功能。
5、自拟其它功能。
二、系统设计(包括设计思路、总体框图、分块设计)
1、设计思路:
整个沙漏分为时钟分频、按键模块、开机界面、计时模块和点阵模块。开机时,显示开机界面。按键防抖模块,提高输入信号,用于沙漏的启动和停止之间的切换。计数模块计数,通过数码管显示计数的值。点阵模块,显示沙漏的各个状态。
2、总体框图:
3、分块设计:
①时钟分频:
将50MHZ的时钟分频12500HZ用于数码管和点阵显示,1250HZ用于按键防抖,1HZ用于计时,和沙子状态切换。
②按键模块:
设一个FLAG变量。按下BT0时,时钟开始计时,延时一定时间,认为按键被按下,FLAG<= NOT FLAG。FLAG=’1’时启动,FLAG=’0’时停止,从而实现沙漏的启动和停止之间的切换。
③数码管显示模块:
设置变量CN9,CN6分别为各位和十位。SG表示数码管段选a-g段显示数字,BT位选表示点亮某几个数码管。以12500HZ频率扫描,使人眼产生连续显示的感觉。
④计时模块:
设置变量CN9,CN6分别为各位和十位。每过1S,CN9加一,当CN9加到10时置零且CN6加一。当CN6到6,CN9加到10时,CN6、CN9都置零。 ⑤开机点阵显示:
S2状态之间不断切换,循环显示贪吃蛇画面。
⑥沙漏状态点阵显示:
S1状态,表示沙漏状态。由0到 状态不断切换。
三、仿真波形及波形分析
1、数码管显示模块:
图4
图4为数码管0,1号灯循环点亮波形仿真。
2、计时模块:
图5
如图5所示,数码管0和1循环点亮,计数器由0开始到60循环计时。段选为“1111110”和“1101101”时,数码管显示“01”。数码管连续显示“01”、“02”、“03”等。由上图可以看出,数码管计时显示正确。
3、沙漏点阵显示:
图6
如图6为ROW行的波形仿真,为点阵行的扫描波形。
图
7
图8
以上两幅图为点阵列的扫描波形。图7为绿色LED列,图8为红色LED列。
四、源程序(要有注释)
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity div4k is
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);< …… 此处隐藏:9675字,全部文档内容请下载后查看。喜欢就下载吧 ……