北邮数电实验电子沙漏实验报告_第1页
北邮数电实验电子沙漏实验报告_第2页
北邮数电实验电子沙漏实验报告_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数字电路与逻辑设计实验报告选题:电子沙漏的设计与实现班级:学号:姓名:序号:2014年11月12日一、任务要求:1、相关知识:沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙 粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的 发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。在结构上,两组各16个发光二极管分别排列成为两个三角形, 如图1所示 其中:VDOVD15位于上部,排列成倒三角形;VDO'VD15'位于下部,排列成 正三角形。两个三角形的顶尖相对,组成沙漏形状。当上部有一个发光二极管熄 灭时,相应地下部就有一个发光二极管点亮,

2、模拟了沙粒的运动。oooooooo ooooooo oooooo ooooo oooo ooooo oooooo oooooooooooooooooooooo oooooo ooooo ooooo oooooo ooooooooooo oooo oooo ooo» oooooooooooo oeetoooo oooo图1电子沙漏示意图2、基本要求: 采用8*8双色点阵显示电子沙漏的开机界面,如图 2所示。其中红色 LED代表沙漏的上半部分沙粒 VDA VD15绿色LED代表沙漏的下半部分 VDO' VD15'。ooooooo oooooo ooooo oooo OOO

3、OO OOOOOO ooooooo卜 VDOVDL5:VB(r VD1 用图2开机界面 用拨码开关SW1模拟重力感应器。当SW伪低电平时,沙粒从VD(VD15 向VDO'VD15'移动;当SW伪高电平时,沙粒从 VDO'VD15'向VD(VD15移 动。 按键BTNO作为计时启动停止按键,启动后沙粒即可按照 SW1设定的方 向移动,以SW为低电平时为例,LED移动的顺序与对应关系如图3的116所 示(若SW伪高电平,则点阵显示移动顺序为161)。每颗沙粒的移动时间为1 秒,当移动到图3的16时,若SW1仍为低电平,则保持沙粒不动,但计时继续, 直到SW1的电平发

4、生变化或者BTNO计时停止。OOOOOOQO000000000000000000000000 ooosoooo00«««0 a*too QO999QQO 000*0000 00000000 oooooooo 0000000000*»0000000««0 y “00a ooe o o oo 00000000 oooooooo 00000000 00>*C)00«ooao««oCQ 00c oo« 0 C 00 coooocoo aooooooo oooooooo9 0 0 0 0 0 0 0

5、0 00001000000000000000000000000000000000 O»O0«*««00 oo»»»ooo oootoooo 00000000 oooooaoo oooooooooooooaoooo»»»cao 000*0000 aooooooo oooooooo O OOO O 0 00 0COOOOOOOoo»«»aoo 00040000 cooooooo cooooooo oootocoo 9000000000 oooooooo 00>01

6、000 OOOIQOOO 00000000 OOOSOOOO o*i*550000000000000000 ooooeooo oaotooao 00000000 oo*eooooDoooooooo 00000000 oooooaoo oooeooao 00000000 O O 00 "co o00000000 oooaocoo cooooooo oooooaoo 000*0000 a o*o oo«o圏3电LED移动顺序示意闻 设计实现一个60秒计时器,当按键BTNO启动时开始工作,用于在沙粒 移动过程中进行计时校准,并用数码管 DISPO- DISP1显示计时结果。3、提

7、高要求: 可以调节控制电子沙漏的流动速度。 用多种方式呈现电子沙漏界面。 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。 外接重力感应器,实现真实的电子沙漏功能。 自拟其它功能。、系统设计:总体框图:防抖模块输入时钟W主程序译码模块输出译码数码管、点阵显示分块设计: 输入模块:由btn按钮和拨码开关构成。采用序列存储的方式存储相应 的输入。 输入译码模块:将输入的符号序列转化成先用状态,以便选取对应的计 算方法;将输入的8421bcd码转化成相应的两位十进制数。 数码管、点阵显示模块:将寄存器内的数进行输出到数码管上。 防抖模块:在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

8、流程图:幵始三、仿真波形及波形分析:点阵显示采用行扫描模式kW口I彳 q pihM11?uti*1 alir0.En4A丿ftXQ. p 起G49.Q u恤甲lib】.茸堪LB gl.1£ 4i2.1 u匚时疋9u«?l 9M 5 Jl2却i-.aTrnrr1厂SQ9 IhWi小t. ;炖l .t <l nc >HP!ZZ1C*50 ' *"訂-i s Ta11ILML«也L£_iTn_Li_ll_rF 门:jr-E*3Ir. 51厂-+tr.je0时''''L_Liyus茅L 13AL1r&

9、quot;i_一i.11_L厂*-1n_l_idJ聒->*lI1l 1L 1<LT聒L. QJA ia i.«l1 Erjtu-. 1.1 n-jiluj见"Tfc2H,tmi回 m trkt. tm“ J1-.tA.a1-111J_L廿科r. i免i丄.厂'11"''L_L15和JJd kICF 11-4k iJ-r ; | i ; i ;r-1012-.SI& _厂l_材-.2k r"i心H叫IA i一l11一L,町A 1jfk抽A. I四、源程序:-File Name :ShaLou.vhd-System

10、 :Quartus II 9.1-Author :Wang Ho ngjie 2012210176-Revisio n :Versio n 1.0,2014-11-3 library ieee;use ieee.std _lo gic_1164.all;en tity shalou is系统时钟拨码开关SW1控制沙粒移动方向 启动暂停复位速度行扫描七段数码管数码管选择port(clk:in std_logic;-sw:in std_logic;-bto:in std_logic;-bt1:in std_logic;-bt2:in std_logic;-lieh:out stdo gic_vec

11、tor(7 dow nto 0); -RED liel:out stdo gic_vector(7 dow nto 0); -GREEN han g:out std_logic_vector(7 dow nto 0);- a:out stdo gic_vector(6 dow nto 0);-cat:out std_logic_vector(5 dow nto 0);- end en tity;Architecture a of shalou issig nal temp:i nteger range 0 to 49999;sig nal clktmp:std_logic;sig nal cl

12、kout : std_logic;sig nal temp1:i nteger range 0 to 199;sig nal clktmp1:std_logic;sig nal clkout1 : std_logic;sig nal temp2:i nteger range 0 to 299;sig nal clktmp2:std_logic;sig nal clkout2 : std_logic;sig nal qt: in teger range 0 to 5;sig nal bto_tmp: std_logic;sig nal bto_out: std_logic;sig nal qt1

13、: in teger range 0 to 5;sig nal bto_tmp1: std_logic;sig nal bto_out1: std_logic;sig nal qt2: in teger range 0 to 5;sig nal bto_tmp2: std_logic;sig nal sudu:i nteger range 0 to 2;sig nal sudu_t:i nteger range 0 to 299;sig nal q:i nteger range 0 to 60;sig nal p:i nteger range 0 to 16;sig nal ge:i nteg

14、er range 0 to 9;sig nal shi:i nteger range 0 to 9;sig nal dz_k on gzhi:i nteger range 0 to 7;sig nal cat_k on gzhi:i nteger range 0 to 1;时钟分频beginp1:process(clk)-beginif clk'eve nt and clk='1' the nif temp=49999 then temp<=0;clktmp<=not clktmp;elsetemp<=temp+1;end if;end if;end

15、process p1;clkout<=clktmp;p2:process(clkout)-beginif clkout'eve nt and clkout='0' the n if temp仁199 then temp1<=0;clktmp1<= not clktmp1; elsetemp1<=temp1+1;end if;end if;end process p2;clkout1<=clktmp1;p3:process(clkout1)beginif clkout'eve nt and clkout='0' the

16、 nif cat_k on gzhi=0 the n cat_k on gzhi<=1;else cat_k on gzhi<=0;end if;if dz_k on gzhi=7 the n dz_k on gzhi<=0;else dz_k on gzhi<=dz_k on gzhi+1;end if;end if;end process p3;p4:process(clkout,qt,bto,qt1,bt1,qt2,bt2)beginif clkout'eve nt and clkout='0' the nif bto='1'

17、; the nif qt=5 the nelseqt<=qt+1;end if;if qt=4 the nbto_tmp<='1'elsebto_tmp<='0'end if;elseqt<=0;end if;end if;if clkout'eve nt and clkout='0' the nif bt1='1' the nif qt1=5 thenelseqt1<=qt1+1;end if;if qt1=4 thenbto_tmp1<='1:elsebto_tmp1<

18、='0:end if;elseqt1<=0;end if;end if;if clkout'eve nt and clkout='0' the nif bt2='1' the nif qt2=5 thenelseqt2<=qt2+1;end if;if qt2=4 thenbto_tmp2<='1'elsebto_tmp2<='0'end if;elseqt2<=0;end if;end if;end process;p5:process(bto_tmp,bto_tmp1)begini

19、f(bto_tmp'eve nt and bto_tmp='1')the n bto_out<=not bto_out;elsebto_out<=bto_out;end if;if(bto_tmp1'event and bto_tmp1='1')then bto_out1<=not bto_out1;elsebto_out1<=bto_out1;end if;if(bto_tmp2'event and bto_tmp2='1')then if(sudu=2) the n sudu<=0;els

20、e sudu<=sudu+1;end if;end if;end process;p6:process(sudu)begincase sudu iswhe n 0 =>sudu_t<=199;whe n 1 =>sudu_t<=99;when 2 =>sudu_t<=299;end case;end process;p7:process(clkout,sudu_t)-fen pinbeginif clkout'eve nt and clkout='0' the nif temp2=sudu_t the n temp2<=0

21、; clktmp2<= not clktmp2;elsetemp2<=temp2+1;end if;end if;end process ; clkout2<=clktmp2;-ji shu qip8:process(bto_out,clkout1,sw)beginif (bto_out='0') the nelsif(bto_out1='1') thenq<=O;p<=O;-q:miao zhong ji shu,p:dia nzhe n zhua ng tai ji shuelsif (q=60) thenelseif (clk

22、out1'eve nt and clkout仁'1' ) THEN q<=q+1;end if;if (clkout2'eve nt and clkout2='1' ) THEN if(sw='0' ) the nif(p<16) then p<=p+1;elseend if;elsif(sw='1' ) the n if(p>0) then p<=p-1;elseend if;end if;end if;end if;end process ; shi<=q/10; ge<

23、;=q rem 10;p9:process(cat_k on gzhi,ge,shi)beginif cat_k on gzhi=0 the ncat<="011111"case ge iswhe n 0 =>a<="1111110"-0 when 1 =>a<="0110000"-1whe n 2 =>a<="1101101"-2when 3 =>a<="1111001"-3whe n 4 =>a<="0110011&

24、quot;-4whe n 5 =>a<="1011011"-5 when 6 =>a<="1011111"-6 when 7 =>a<="1110000"-7 whe n 8 =>a<="1111111"-8 whe n 9 =>a<="1111011"-9 -when others =>a<="0000000"end case;elsif cat_k on gzhi=1 the n cat<=&q

25、uot;101111"case shi iswhe n 0 =>a<="1111110"-0 when 1 =>a<="0110000"-1 whe n 2 =>a<="1101101"-2 when 3 =>a<="1111001"-3 whe n 4 =>a<="0110011"-4 whe n 5 =>a<="1011011"-5 when 6 =>a<="10111

26、11"-6 when 7 =>a<="1110000"-7 whe n 8 =>a<="1111111"-8 whe n 9 =>a<="1111011"-9 -when others =>a<="0000000"end case;end if;end process ; p10:process(p)begincase p is when 0 => case dz_k on gzhi is when 0 =>ha ng<="011

27、11111" lieh<="11111110"liel<="00000000" whe n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000" when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000" when 3 =>hang<="

28、;11101111"lieh<="00010000"liel<="00000000" when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<=&qu

29、ot;11111101"lieh<="00000000"liel<="01111100" when 7 =>hang<="11111110"when others =>hang<="11111111"end case;when 1 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="11101110"liel<="00010000&q

30、uot; whe n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000" when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000" when 3 =>hang<="11101111"lieh<="00010000"liel<="0000000

31、0" when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<="11111101"lieh<="00000000"liel<="01111

32、100" when 7 =>hang<="11111110"lieh<="00010000"liel<="11101110"when others =>hang<="11111111" end case;whe n 2 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="11001110"liel<="00110000" w

33、he n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000" when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000" when 3 =>hang<="11101111"lieh<="00010000"liel<="00000000"

34、; when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<="11111101"lieh<="00000000"liel<="01111100&qu

35、ot; when 7 =>hang<="11111110"lieh<="00110000"liel<="11001110"when others =>hang<="11111111" end case;whe n 3 =>case dz_k on gzhi islieh<="00111000"liel<="00000000" when 3 =>hang<="11101111"lieh<

36、="00010000"liel<="00000000" when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<="11111101"lieh&l

37、t;="00000000"liel<="01111100" when 7 =>hang<="11111110"lieh<="00111000"liel<="11000110"when others =>hang<="11111111" end case;when 4 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="100

38、00110"liel<="01111000" whe n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000" when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000" when 3 =>hang<="11101111"lieh<="

39、00010000"liel<="00000000" when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<="11111101"lieh<=&quo

40、t;00000000"liel<="01111100" when 7 =>hang<="11111110"lieh<="01111000"liel<="10000110"when others =>hang<="11111111" end case;when 5 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="10000010&q

41、uot;liel<="01111100" whe n 1 =>ha ng<="10111111"when 4 =>hang<="11110111" lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000"when 6 =>ha ng<=&

42、quot;11111101"lieh<="00000000"liel<="01111100"when 7 =>hang<="11111110" lieh<="01111100"liel<="10000010"when others =>hang<="11111111"end case;when 6 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111

43、" lieh<="00000010"liel<="11111100"whe n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000"when 2 =>ha ng<="11011111" lieh<="00111000"liel<="00000000"when 3 =>hang<="111011

44、11" lieh<="00010000"liel<="00000000"when 4 =>hang<="11110111" lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000"when 6 =>ha ng<="11111

45、101"lieh<="00000000"liel<="01111100"when 7 =>hang<="11111110" lieh<="11111100"liel<="00000010"when others =>hang<="11111111"end case;when 7 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111" lie

46、h<="00000000"liel<="11111110"whe n 1 =>ha ng<="10111111"lieh<="01111100"liel<="00000000"when 2 =>ha ng<="11011111" lieh<="00111000"liel<="00000000"when 3 =>hang<="11101111"li

47、eh<="00000000"liel<="01111100"when 7 =>hang<="11111110" lieh<="11111110"liel<="00000000"when others =>hang<="11111111"end case;whe n 8 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111" lieh<=&quo

48、t;00000000"liel<="11111110"whe n 1 =>ha ng<="10111111"lieh<="01101100"liel<="00010000"when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000"when 3 =>hang<="11101111"lieh<=&quo

49、t;00010000"liel<="00000000"when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011" lieh<="00000000"liel<="00111000"when 6 =>ha ng<="11111101"lieh<=&quo

50、t;00010000"liel<="01101100"when 7 =>hang<="11111110" lieh<="11111110"liel<="00000000"when others =>hang<="11111111"end case;whe n 9 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="00000000&q

51、uot;liel<="11111110"whe n 1 =>ha ng<="10111111"lieh<="01001100"liel<="00110000"when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000"when 3 =>hang<="11101111"lieh<="00010000&q

52、uot;liel<="00000000"when 4 =>hang<="11110111" lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011"end case;whe n 10 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111" lieh<="00000000"liel<=&

53、quot;11111110"whe n 1 =>ha ng<="10111111"lieh<="01000100"liel<="00111000"when 2 =>ha ng<="11011111" lieh<="00111000"liel<="00000000"when 3 =>hang<="11101111" lieh<="00010000"liel<

54、="00000000"when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000"when 6 =>ha ng<="11111101" lieh<="00111000"liel<

55、="01000100"when 7 =>hang<="11111110" lieh<="11111110"liel<="00000000"when others =>hang<="11111111"end case;when 11 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111" lieh<="00000000"liel<="1111

56、1110"whe n 1 =>ha ng<="10111111"lieh<="00000100"liel<="01111000"when 2 =>ha ng<="11011111" lieh<="00111000"liel<="00000000"when 3 =>hang<="11101111"lieh<="00010000"liel<="000

57、00000"when 4 =>hang<="11110111"lieh<="00000000"liel<="00010000"when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000"when 6 =>ha ng<="11111101" lieh<="01111000"liel<="000

58、00100"when 7 =>hang<="11111110"when others =>hang<="11111111"end case;when 12 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="00000000"liel<="11111110" whe n 1 =>ha ng<="10111111"lieh<="0

59、0000000"liel<="01111100" when 2 =>ha ng<="11011111"lieh<="00111000"liel<="00000000" when 3 =>hang<="11101111"lieh<="00010000"liel<="00000000" when 4 =>hang<="11110111"lieh<="

60、00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00000000"liel<="00111000" when 6 =>ha ng<="11111101"lieh<="01111100"liel<="00000000" when 7 =>hang<="11111110"lieh<=&quo

61、t;11111110"liel<="00000000"when others =>hang<="11111111" end case;whe n 13 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="00000000"liel<="11111110" whe n 1 =>ha ng<="10111111"lieh<="000000

62、00"liel<="01111100" when 2 =>ha ng<="11011111"lieh<="00101000"liel<="00010000" when 3 =>hang<="11101111"lieh<="00010000"liel<="00000000" when 4 =>hang<="11110111"lieh<="00000

63、000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00010000"liel<="00101000" when 6 =>ha ng<="11111101"lieh<="01111100"liel<="00000000" when 7 =>hang<="11111110"lieh<="111

64、11110"liel<="00000000"when others =>hang<="11111111" end case;whe n 14 =>case dz_k on gzhi islieh<="00001000"liel<="00110000" when 3 =>hang<="11101111"lieh<="00010000"liel<="00000000" when 4 =>

65、;hang<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00110000"liel<="00001000" when 6 =>ha ng<="11111101"lieh<="01111100"liel<="00000000" when 7 =&

66、gt;hang<="11111110"lieh<="11111110"liel<="00000000"when others =>hang<="11111111" end case;whe n 15 =>case dz_k on gzhi iswhen 0 =>ha ng<="01111111"lieh<="00000000"liel<="11111110" whe n 1 =>ha ng&

67、lt;="10111111"lieh<="00000000"liel<="01111100" when 2 =>ha ng<="11011111"lieh<="00000000"liel<="00111000" when 3 =>hang<="11101111"lieh<="00010000"liel<="00000000" when 4 =>hang

68、<="11110111"lieh<="00000000"liel<="00010000" when 5 =>ha ng<="11111011"lieh<="00111000"liel<="00000000" when 6 =>ha ng<="11111101"lieh<="01111100"liel<="00000000" when 7 =>hang<="11111110"lieh<="11111110"liel<="0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论