北邮数电综合实验电子沙漏的设计与实现_第1页
北邮数电综合实验电子沙漏的设计与实现_第2页
北邮数电综合实验电子沙漏的设计与实现_第3页
北邮数电综合实验电子沙漏的设计与实现_第4页
北邮数电综合实验电子沙漏的设计与实现_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、北 京 邮 电 大 学 数电综合实验报告 实验名称: 电子沙漏的设计与实现 学 院:信息与通信工程学院 姓 名: 班 级: 学 号: 班内序号: 1、 实验设计的基本要求 沙漏是一种古老的计时工具,也是一种玩具。电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。1、 采用 8*8 双色点阵显示电子沙漏的开机界面,如图 2 所示。其中红色 LED 代表沙漏的上半部分沙粒 VD0VD15,绿色 LED 代表沙漏的下半部分 VD0'VD15'。2、用拨码开关 SW1 模拟重力感应器。当

2、 SW1 为低电平时,沙粒从 VD0VD15 向 VD0'VD15'移动;当 SW1 为高电平时,沙粒从 VD0'VD15'向 VD0VD15 移动。3、 按键 BTN0 作为计时启动停止按键,启动后沙粒即可按照 SW1 设定的方向移动, 以 SW1 为低电平时为例,LED 移动的顺序与对应关系如图 3 的116所示(若 SW1 为高电平,则点阵显示移动顺序为161)。每颗沙粒的移动时间为 1 秒,当移动 到图 3 的16时,若 SW1 仍为低电平,则保持沙粒不动,但计时继续,直到 SW1 的 电平发生变化或者 BTN0 计时停止。4、 设计实现一个 60 秒计

3、时器,当按键 BTN0 启动时开始工作,用于在沙粒移动过程 中进行计时校准,并用数码管 DISP0DISP1 显示计时结果。提高要求:1、 可以调节控制电子沙漏的流动速度。2、 用多种方式呈现电子沙漏界面。3、 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。 4、 外接重力感应器,实现真实的电子沙漏功能。5、 自拟其它功能。二、系统设计1、设计思路实验比较复杂,故采用分模块设计的思想,将模块分为了分频模块、控制模块、数码管显示模块、8*8点阵显示模块。由于本实验需要用BTN0按键来控制时间和沙漏的开始运行以及时间的暂停功能,故需要检测输入,此时就要用到防抖模块,防止在按下按键时有多个上升沿产

4、生导致开关并不能完美的发挥作用。控制模块是用来实现具体的操作的,通过对按下BTN0按键的次数统计,将其分为奇数与偶数两种情况,在奇数时使功能正常运行,在统计为偶数时使时间暂停,以此来实现对此系统的控制。由于数电实验电路板自带着时钟频率,但此频率并不能满足系统的要求,故需要分频将时钟频率变为所需要的频率,用来作为60秒计时器的校准和正常运行。本实验最重要的部分就是8*8点阵显示模块和数码管显示模块。对于led灯来说,要让它按照设计好的图案显示,需要一行行对8*8点阵进行扫描,在列中来控制哪一行来显示,经过一定时间后到下一行显示,而控制红灯亮还是绿灯则通过不同的接口控制,在扫描频率够快的时候,由于

5、人眼暂留效应,会误以为是一直在显示,以此达到所需要的效果。数码管的显示模块与此类似,通过选位信号选择需要亮的数码管,然后在扫描频率较高时则看到稳定显示的数字。2、系统框图控制模块(1)总体框图8*8点阵显示分频模块BTN0输入计时器控制模块8*8点阵显示模块(2)程序流程图开始初始化开机界面否BTN0是否按下是计时开始并且沙漏开始运动SW1是否翻转否沙漏向相反方向流动是计时是否到59s 重新开始计时 是 否是否暂停是显示暂停三、源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity d

6、iv4k isport(clk_in : in std_logic; clk_out : out std_logic);end;architecture a of div4k issignal cnt : integer range 0 to 1999;signal clk_tmp : std_logic;beginprocess(clk_in)beginif (clk_in'event and clk_in='1') thenif cnt=1999 thencnt<=0; clk_tmp<= not clk_tmp;elsecnt<=cnt+1;en

7、d 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; SG : OUT STD_LOGIC_VECTOR(6 DOWNTO 0); BT : OUT STD_LOGIC_VECTOR(5 DOWN

8、TO 0); R:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); Cr:OUT STD_LOGIC_VECTOR(0 TO 6); Cg:OUT STD_LOGIC_VECTOR(0 TO 6); END;ARCHITECTURE arc OF scan_led_2 IScomponent div4kport(clk_in: in std_logic; clk_out: out std_logic);end component;SIGNAL clk_tmp1 : std_logic;SIGNAL BT1:STD_LOGIC_VECTOR(5 DOWNTO 0);SIGNAL

9、 CNT6 : INTEGER RANGE 0 TO 6; SIGNAL CNT9 : INTEGER RANGE 0 TO 9; SIGNAL A : INTEGER RANGE 0 TO 9; SIGNAL S : INTEGER RANGE 0 TO 7;-控制点阵显示 SIGNAL S1 : INTEGER RANGE 0 TO 16;-沙漏状态 SIGNAL S2 : INTEGER RANGE 0 TO 100;-开机画面 SIGNAL SW_0 : STD_LOGIC;-SW_0 为1时运行 为0时保持原状态 SIGNAL SW_1 : STD_LOGIC;-SW_1 为0时向下

10、运动 为1时向上运动 SIGNAL FLAG : STD_LOGIC;- FLAG='1'时运行 FLAG=0停止 SIGNAL COUNT0 : INTEGER RANGE 0 TO 15000;SIGNAL COUNT1 : INTEGER RANGE 0 TO 15001;SIGNAL clk_tmp : STD_LOGIC;BEGINu1:div4k port map(clk_in=>CLK,clk_out=>clk_tmp);P0:process(BTN0)-按键防抖 BEGIN IF CLK'EVENT AND CLK = '1'

11、 THEN IF (BTN0 AND CLK)='0'THEN COUNT0<=0; END IF; IF (BTN0 AND CLK)='1'THEN COUNT0<=COUNT0+1; IF COUNT0<=5 THEN COUNT0<=0;FLAG<=NOT FLAG; END IF; END IF; END IF; END PROCESS P0;P1:process(clk_tmp) BEGIN IF clk_tmp'EVENT AND clk_tmp = '1' THEN case BT1 is w

12、hen"111110"=> BT1<="111101" when"111101"=> BT1<="111110" when others => BT1<="111110" end case; END IF; if BT1 ="111101" then BT<="111101"A<=CNT6; end if; if BT1 ="111110" then BT<="111110

13、"A<=CNT9; end if; END PROCESS P1;P3:process(clk_tmp) BEGIN SW_0<=SW0; SW_1<=SW1; IF clk_tmp'EVENT AND clk_tmp = '1' THEN COUNT1 <= COUNT1+1;IF COUNT1 = 12499 THEN COUNT1 <= 0; CNT9 <= CNT9 + 1; if CNT9 = 9 then CNT9 <= 0; CNT6<= CNT6 + 1; end if; if CNT6 = 5

14、and CNT9 = 9 then CNT6 <= 0; CNT9 <= 0; end if; IF SW_1 = '0' and FLAG = '1' THEN S1<=S1+1; if S1=16 then S1<=16; end if; END IF; IF FLAG = '0' THEN S1<=S1;CNT6<= CNT6;CNT9 <= CNT9; END IF; IF SW_1 = '1' and FLAG = '1'THEN S1<=S1-1; if

15、S1=0 then S1<=0; end if; END IF; END IF;END IF; END PROCESS P3;P4:process(A)BEGIN CASE A IS -实现数码管的显示功能 WHEN 0 => SG <= "1111110" WHEN 1 => SG <= "0110000" WHEN 2 => SG <= "1101101" WHEN 3 => SG <= "1111001" WHEN 4 => SG <= &qu

16、ot;0110011" WHEN 5 => SG <= "1011011" WHEN 6 => SG <= "1011111" WHEN 7 => SG <= "1110000" WHEN 8 => SG <= "1111111" WHEN 9 => SG <= "1111011" WHEN OTHERS => NULL ; END CASE ; END PROCESS P4; P5:process(S) BEGIN I

17、F clk_tmp'EVENT AND clk_tmp = '1' THEN S<=S+1; IF S=7 THEN S<=0; END IF; END IF; IF S1=0 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="0000000"Cr<="1111111" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111

18、110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 =

19、> R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="1111111"Cr<="0000000" WHEN OTHERS => NULL ; E

20、ND CASE ; END IF; IF S1=1 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="0001000"Cr<="1110111" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr&l

21、t;="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000&q

22、uot; WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="1110111"Cr<="0001000" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=2 then CASE S IS WHEN 0 => R<="01111111"

23、;Cg<="0011000"Cr<="1100111" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000

24、000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<=&q

25、uot;0000000" WHEN 7 => R<="11111110" ;Cg<="1100111"Cr<="0011000" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=3 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="0011100"Cr<="1100011" WHEN 1 => R<="10

26、111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg&l

27、t;="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="1100011&q

28、uot;Cr<="0011100" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=4 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="0111100"Cr<="1000011" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R

29、<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="1111101

30、1" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="1000011"Cr<="0111100" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=

31、5 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="0111110"Cr<="1000001" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" W

32、HEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<=

33、"11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="1000001"Cr<="0111110" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=6 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111110&qu

34、ot;Cr<="0000001" WHEN 1 => R<="10111111" ;Cg<="0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="00

35、01000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7

36、 => R<="11111110" ;Cg<="0000001"Cr<="1111110" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=7 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<=&qu

37、ot;0000000"Cr<="0111110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr

38、<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0111110"Cr<="0000000" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111

39、" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=8 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0001000"Cr<="0110110" WHEN 2 => R<="11011111"

40、; ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="00

41、11100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0110110"Cr<="0001000" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=9 then CASE S IS WHEN 0

42、=> R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0011000"Cr<="0100110" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="

43、11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg

44、<="0100110"Cr<="0011000" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=10 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000

45、" WHEN 1 => R<="10111111" ;Cg<="0011100"Cr<="0100010" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 =>

46、; R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0100010"Cr<="0011100" WHEN 7 => R<="1111

47、1110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=11 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0111100"Cr<

48、="0000010" WHEN 2 => R<="11011111" ;Cg<="0000000"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000&quo

49、t; WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<="0000000" WHEN 6 => R<="11111101" ;Cg<="0000010"Cr<="0111100" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS =&g

50、t; NULL ; END CASE ; END IF; IF S1=12 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0111110"Cr<="0000000" WHEN 2 => R<="11011111" ;Cg<="00000

51、00"Cr<="0011100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0011100"Cr<=&qu

52、ot;0000000" WHEN 6 => R<="11111101" ;Cg<="0000000"Cr<="0111110" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=13 then CASE S IS WHEN 0 => R<="01

53、111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0111110"Cr<="0000000" WHEN 2 => R<="11011111" ;Cg<="0001000"Cr<="0010100" WHEN 3 => R<="11101111" ;Cg&l

54、t;="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0010100"Cr<="0001000" WHEN 6 => R<="11111101" ;Cg<="0000000&q

55、uot;Cr<="0111110" WHEN 7 => R<="11111110" ;Cg<="0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=14 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 =>

56、R<="10111111" ;Cg<="0111110"Cr<="0000000" WHEN 2 => R<="11011111" ;Cg<="0011000"Cr<="0000100" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="111101

57、11" ;Cg<="0001000"Cr<="0000000" WHEN 5 => R<="11111011" ;Cg<="0000100"Cr<="0011000" WHEN 6 => R<="11111101" ;Cg<="0000000"Cr<="0111110" WHEN 7 => R<="11111110" ;Cg<=&

58、quot;0000000"Cr<="1111111" WHEN OTHERS => NULL ; END CASE ; END IF; IF S1=15 then CASE S IS WHEN 0 => R<="01111111" ;Cg<="1111111"Cr<="0000000" WHEN 1 => R<="10111111" ;Cg<="0111110"Cr<="0000000" WHEN 2 => R<="11011111" ;Cg<="0011100"Cr<="0000000" WHEN 3 => R<="11101111" ;Cg<="0000000"Cr<="0001000" WHEN 4 => R<="11110111" ;Cg<="0001000"Cr<="0000000" WHEN 5 =>

温馨提示

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

评论

0/150

提交评论