《北邮数电实验电子沙漏实验报告.doc》由会员分享,可在线阅读,更多相关《北邮数电实验电子沙漏实验报告.doc(23页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、. 数字电路与逻辑设计实验报告选题:电子沙漏的设计与实现班级:学号:姓名:序号:2014年11月12日一、任务要求:1、相关知识:沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。 在结构上,两组各16 个发光二极管分别排列成为两个三角形,如图1 所示。其中:VD0 VD15位于上部,排列成倒三角形;VD0VD15位于下部,排列成正三角形。两个三角形的顶尖相对,组成沙漏形状。当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。
2、2、基本要求:1 采用8*8双色点阵显示电子沙漏的开机界面,如图2所示。其中红色LED代表沙漏的上半部分沙粒VD0VD15,绿色LED代表沙漏的下半部分VD0VD15。 2 用拨码开关SW1模拟重力感应器。当SW1为低电平时,沙粒从VD0VD15向VD0VD15移动;当SW1为高电平时,沙粒从VD0VD15向VD0VD15移动。3 按键BTN0作为计时启动停止按键,启动后沙粒即可按照SW1设定的方向移动,以SW1为低电平时为例,LED移动的顺序与对应关系如图3的116所示(若SW1为高电平,则点阵显示移动顺序为161)。每颗沙粒的移动时间为1秒,当移动到图3的16时,若SW1仍为低电平,则保持
3、沙粒不动,但计时继续,直到SW1的电平发生变化或者BTN0计时停止。4 设计实现一个60秒计时器,当按键BTN0启动时开始工作,用于在沙粒移动过程中进行计时校准,并用数码管DISP0DISP1显示计时结果。 3、提高要求:1 可以调节控制电子沙漏的流动速度。2 用多种方式呈现电子沙漏界面。3 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。4 外接重力感应器,实现真实的电子沙漏功能。5 自拟其它功能。2、 系统设计:总体框图: 输入 防抖模块 译码模块 时钟 主程序 输出译码数码管、点阵显示分块设计:1 输入模块:由btn按钮和拨码开关构成。采用序列存储的方式存储相应的输入。2 输入译码模块:
4、将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。 3 数码管、点阵显示模块:将寄存器内的数进行输出到数码管上。4 防抖模块:在用按键输入时,所得到的信号可能 会有抖动,因此加入此抖动电路。流程图:3、 仿真波形及波形分析:点阵显示采用行扫描模式四、源程序:-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_1
5、164.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 st
6、d_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;
7、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
8、; signal bto_tmp2: std_logic; signal sudu:integer range 0 to 2; signal sudu_t:integer range 0 to 299; signal q:integer range 0 to 60; signal p:integer range 0 to 16; signal ge:integer range 0 to 9; signal shi:integer range 0 to 9; signal dz_kongzhi:integer range 0 to 7; signal cat_kongzhi:integer ra
9、nge 0 to 1; begin p1:process(clk) -时钟 begin if clkevent and clk=1 then if temp=49999 then temp=0;clktmp=not clktmp; else temp=temp+1; end if; end if; end process p1; clkout=clktmp; p2:process(clkout) -分频beginif clkoutevent and clkout=0 thenif temp1=199 then temp1=0;clktmp1= not clktmp1;elsetemp1=tem
10、p1+1; end if; end if;end process p2;clkout1=clktmp1;p3:process(clkout1) beginif clkoutevent and clkout=0 then if cat_kongzhi=0 then cat_kongzhi=1; else cat_kongzhi=0; end if; if dz_kongzhi=7 then dz_kongzhi=0; else dz_kongzhi=dz_kongzhi+1; end if; end if;end process p3;p4:process(clkout,qt,bto,qt1,b
11、t1,qt2,bt2) begin if clkoutevent and clkout=0 then if bto=1 then if qt=5 then else qt=qt+1; end if; if qt=4 then bto_tmp=1; else bto_tmp=0; end if; else qt=0; end if; end if; if clkoutevent and clkout=0 then if bt1=1 then if qt1=5 then else qt1=qt1+1; end if; if qt1=4 then bto_tmp1=1; else bto_tmp1=
12、0; end if; else qt1=0; end if; end if; if clkoutevent and clkout=0 then if bt2=1 then if qt2=5 then else qt2=qt2+1; end if; if qt2=4 then bto_tmp2=1; else bto_tmp2=0; end if; else qt2=0; end if; end if; end process; p5:process(bto_tmp,bto_tmp1) begin if(bto_tmpevent and bto_tmp=1)then bto_out=not bt
13、o_out; else bto_out=bto_out; end if; if(bto_tmp1event and bto_tmp1=1)then bto_out1=not bto_out1; else bto_out1=bto_out1; end if; if(bto_tmp2event and bto_tmp2=1)then if(sudu=2) then sudu=0; else sudusudu_tsudu_tsudu_t=299; end case; end process; p7:process(clkout,sudu_t) -fen pinbeginif clkoutevent
14、and clkout=0 thenif temp2=sudu_t then temp2=0;clktmp2= not clktmp2;elsetemp2=temp2+1; end if; end if;end process ;clkout2=clktmp2; p8:process(bto_out,clkout1,sw) -ji shu qi begin if (bto_out=0) then elsif(bto_out1=1) then q=0;p=0; -q:miao zhong ji shu,p:dian zhen zhuang tai ji shu elsif (q=60) then
15、else if (clkout1event and clkout1=1 ) THEN q=q+1; end if; if (clkout2event and clkout2=1 ) THEN if(sw=0 ) then if(p16) then p0) then p=p-1; else end if; end if; end if; end if; end process ;shi=q/10;ge=q rem 10; p9:process(cat_kongzhi,ge,shi) begin if cat_kongzhi=0 then cataaaaaaaaaaa=0000000; end c
16、ase; elsif cat_kongzhi=1 then cataaaaaaaaaaa case dz_kongzhi is when 0 =hang=01111111; lieh=11111110;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;l
17、ielhang=11111110; lieh=00000000;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=11101110;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielh
18、ang=11111110; lieh=00010000;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=11001110;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=
19、11111110; lieh=00110000;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=11000110;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=1111
20、1110; lieh=00111000;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=10000110;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=11111110
21、; lieh=01111000;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=10000010;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=11111110; li
22、eh=01111100;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=00000010;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=11111110; lieh=1
23、1111100;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=00000000;lielhang=10111111; lieh=01111100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lielhang=11111101; lieh=00000000;lielhang=11111110; lieh=11111110;lielhang case dz_kongzhi is when 0 =hang=01111111; lieh=00000000;lielhang=10111111; lieh=01101100;lielhang=11011111; lieh=00111000;lielhang=11101111; lieh=00010000;lielhang=11110111; lieh=00000000;lielhang=11111011; lieh=00000000;lie