网站大量收购闲置独家精品文档,联系QQ:2885784924

北邮数电综合实验电子沙漏的设计与实现.doc

北邮数电综合实验电子沙漏的设计与实现.doc

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
北邮数电综合实验电子沙漏的设计与实现.doc

北 京 邮 电 大 学 数电综合实验报告 实验名称: 电子沙漏的设计与实现 学 院:信息与通信工程学院 姓 名: 班 级: 学 号: 班内序号: 实验设计的基本要求 沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。 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 的1~16所示(若 SW1 为高电平,则点阵显示移动顺序为16~1)。每颗沙粒的移动时间为 1 秒,当移动 到图 3 的16时,若 SW1 仍为低电平,则保持沙粒不动,但计时继续,直到 SW1 的 电平发生变化或者 BTN0 计时停止。 4、 设计实现一个 60 秒计时器,当按键 BTN0 启动时开始工作,用于在沙粒移动过程 中进行计时校准,并用数码管 DISP0~DISP1 显示计时结果。 提高要求: 1、 可以调节控制电子沙漏的流动速度。? 2、 用多种方式呈现电子沙漏界面。? 3、 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。 4、 外接重力感应器,实现真实的电子沙漏功能。? 5、 自拟其它功能。 二、系统设计 1、设计思路 实验比较复杂,故采用分模块设计的思想,将模块分为了分频模块、控制模块、数码管显示模块、8*8点阵显示模块。 由于本实验需要用BTN0按键来控制时间和沙漏的开始运行以及时间的暂停功能,故需要检测输入,此时就要用到防抖模块,防止在按下按键时有多个上升沿产生导致开关并不能完美的发挥作用。 控制模块是用来实现具体的操作的,通过对按下BTN0按键的次数统计,将其分为奇数与偶数两种情况,在奇数时使功能正常运行,在统计为偶数时使时间暂停,以此来实现对此系统的控制。 由于数电实验电路板自带着时钟频率,但此频率并不能满足系统的要求,故需要分频将时钟频率变为所需要的频率,用来作为60秒计时器的校准和正常运行。 本实验最重要的部分就是8*8点阵显示模块和数码管显示模块。对于led灯来说,要让它按照设计好的图案显示,需要一行行对8*8点阵进行扫描,在列中来控制哪一行来显示,经过一定时间后到下一行显示,而控制红灯亮还是绿灯则通过不同的接口控制,在扫描频率够快的时候,由于人眼暂留效应,会误以为是一直在显示,以此达到所需要的效果。数码管的显示模块与此类似,通过选位信号选择需要亮的数码管,然后在扫描频率较高时则看到稳定显示的数字。 2、系统框图 (1)总体框图 (2)程序流程图 是 否 三、源程序 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_inevent 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

文档评论(0)

我的文档 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档