北邮数电综合实验电子沙漏的设计与实现.docx
- 文档编号:27312847
- 上传时间:2023-06-29
- 格式:DOCX
- 页数:26
- 大小:566.16KB
北邮数电综合实验电子沙漏的设计与实现.docx
《北邮数电综合实验电子沙漏的设计与实现.docx》由会员分享,可在线阅读,更多相关《北邮数电综合实验电子沙漏的设计与实现.docx(26页珍藏版)》请在冰豆网上搜索。
北邮数电综合实验电子沙漏的设计与实现
北京邮电大学
数电综合实验报告
实验名称:
电子沙漏的设计与实现
学院:
信息与通信工程学院
姓名:
班级:
学号:
班内序号:
1、实验设计的基本要求
沙漏是一种古老的计时工具,也是一种玩具。
电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。
电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。
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)程序流程图
是
否
三、源程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydiv4kis
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
end;
architectureaofdiv4kis
signalcnt:
integerrange0to1999;
signalclk_tmp:
std_logic;
begin
process(clk_in)
begin
if(clk_in'eventandclk_in='1')then
ifcnt=1999then
cnt<=0;clk_tmp<=notclk_tmp;
else
cnt<=cnt+1;
endif;
endif;
endprocess;
clk_out<=clk_tmp;
end;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYscan_led_2IS
PORT(CLK:
INSTD_LOGIC;
BTN0:
INSTD_LOGIC;
SW0:
INSTD_LOGIC;
SW1:
INSTD_LOGIC;
SG:
OUTSTD_LOGIC_VECTOR(6DOWNTO0);
BT:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
R:
OUTSTD_LOGIC_VECTOR(7DOWNTO0);
Cr:
OUTSTD_LOGIC_VECTOR(0TO6);
Cg:
OUTSTD_LOGIC_VECTOR(0TO6));
END;
ARCHITECTUREarcOFscan_led_2IS
componentdiv4k
port(clk_in:
instd_logic;
clk_out:
outstd_logic);
endcomponent;
SIGNALclk_tmp1:
std_logic;
SIGNALBT1:
STD_LOGIC_VECTOR(5DOWNTO0);
SIGNALCNT6:
INTEGERRANGE0TO6;
SIGNALCNT9:
INTEGERRANGE0TO9;
SIGNALA:
INTEGERRANGE0TO9;
SIGNALS:
INTEGERRANGE0TO7;--控制点阵显示
SIGNALS1:
INTEGERRANGE0TO16;--沙漏状态
SIGNALS2:
INTEGERRANGE0TO100;--开机画面
SIGNALSW_0:
STD_LOGIC;--SW_0为1时运行为0时保持原状态
SIGNALSW_1:
STD_LOGIC;--SW_1为0时向下运动为1时向上运动
SIGNALFLAG:
STD_LOGIC;--FLAG='1'时运行FLAG=‘0’停止
SIGNALCOUNT0:
INTEGERRANGE0TO15000;
SIGNALCOUNT1:
INTEGERRANGE0TO15001;
SIGNALclk_tmp:
STD_LOGIC;
BEGIN
u1:
div4kportmap(clk_in=>CLK,clk_out=>clk_tmp);
P0:
process(BTN0)--按键防抖
BEGIN
IFCLK'EVENTANDCLK='1'THEN
IF(BTN0ANDCLK)='0'THEN
COUNT0<=0;
ENDIF;
IF(BTN0ANDCLK)='1'THEN
COUNT0<=COUNT0+1;
IFCOUNT0<=5THEN
COUNT0<=0;FLAG<=NOTFLAG;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP0;
P1:
process(clk_tmp)
BEGIN
IFclk_tmp'EVENTANDclk_tmp='1'THEN
caseBT1is
when"111110"=>BT1<="111101";
when"111101"=>BT1<="111110";
whenothers=>BT1<="111110";
endcase;
ENDIF;
ifBT1="111101"then
BT<="111101";A<=CNT6;
endif;
ifBT1="111110"then
BT<="111110";A<=CNT9;
endif;
ENDPROCESSP1;
P3:
process(clk_tmp)
BEGIN
SW_0<=SW0;
SW_1<=SW1;
IFclk_tmp'EVENTANDclk_tmp='1'THEN
COUNT1<=COUNT1+1;
IFCOUNT1=12499THEN
COUNT1<=0;CNT9<=CNT9+1;
ifCNT9=9then
CNT9<=0;CNT6<=CNT6+1;
endif;
ifCNT6=5andCNT9=9then
CNT6<=0;CNT9<=0;
endif;
IFSW_1='0'andFLAG='1'THEN
S1<=S1+1;
ifS1=16then
S1<=16;
endif;
ENDIF;
IFFLAG='0'THEN
S1<=S1;CNT6<=CNT6;CNT9<=CNT9;
ENDIF;
IFSW_1='1'andFLAG='1'THEN
S1<=S1-1;
ifS1=0then
S1<=0;
endif;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP3;
P4:
process(A)
BEGIN
CASEAIS--实现数码管的显示功能
WHEN0=>SG<="1111110";WHEN1=>SG<="0110000";
WHEN2=>SG<="1101101";WHEN3=>SG<="1111001";
WHEN4=>SG<="0110011";WHEN5=>SG<="1011011";
WHEN6=>SG<="1011111";WHEN7=>SG<="1110000";
WHEN8=>SG<="1111111";WHEN9=>SG<="1111011";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP4;
P5:
process(S)
BEGIN
IFclk_tmp'EVENTANDclk_tmp='1'THEN
S<=S+1;
IFS=7THEN
S<=0;
ENDIF;
ENDIF;
IFS1=0then
CASESIS
WHEN0=>R<="01111111";Cg<="0000000";Cr<="1111111";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1111111";Cr<="0000000";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=1then
CASESIS
WHEN0=>R<="01111111";Cg<="0001000";Cr<="1110111";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1110111";Cr<="0001000";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=2then
CASESIS
WHEN0=>R<="01111111";Cg<="0011000";Cr<="1100111";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1100111";Cr<="0011000";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=3then
CASESIS
WHEN0=>R<="01111111";Cg<="0011100";Cr<="1100011";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1100011";Cr<="0011100";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=4then
CASESIS
WHEN0=>R<="01111111";Cg<="0111100";Cr<="1000011";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1000011";Cr<="0111100";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=5then
CASESIS
WHEN0=>R<="01111111";Cg<="0111110";Cr<="1000001";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="1000001";Cr<="0111110";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=6then
CASESIS
WHEN0=>R<="01111111";Cg<="1111110";Cr<="0000001";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="0000001";Cr<="1111110";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=7then
CASESIS
WHEN0=>R<="01111111";Cg<="1111111";Cr<="0000000";
WHEN1=>R<="10111111";Cg<="0000000";Cr<="0111110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0111110";Cr<="0000000";
WHEN7=>R<="11111110";Cg<="0000000";Cr<="1111111";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=8then
CASESIS
WHEN0=>R<="01111111";Cg<="1111111";Cr<="0000000";
WHEN1=>R<="10111111";Cg<="0001000";Cr<="0110110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000";Cr<="0000000";
WHEN5=>R<="11111011";Cg<="0011100";Cr<="0000000";
WHEN6=>R<="11111101";Cg<="0110110";Cr<="0001000";
WHEN7=>R<="11111110";Cg<="0000000";Cr<="1111111";
WHENOTHERS=>NULL;
ENDCASE;
ENDIF;
IFS1=9then
CASESIS
WHEN0=>R<="01111111";Cg<="1111111";Cr<="0000000";
WHEN1=>R<="10111111";Cg<="0011000";Cr<="0100110";
WHEN2=>R<="11011111";Cg<="0000000";Cr<="0011100";
WHEN3=>R<="11101111";Cg<="0000000";Cr<="0001000";
WHEN4=>R<="11110111";Cg<="0001000
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮数电 综合 实验 电子 沙漏 设计 实现