数字电路综合实验报告杨纯.docx
- 文档编号:18102734
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:39
- 大小:385.39KB
数字电路综合实验报告杨纯.docx
《数字电路综合实验报告杨纯.docx》由会员分享,可在线阅读,更多相关《数字电路综合实验报告杨纯.docx(39页珍藏版)》请在冰点文库上搜索。
数字电路综合实验报告杨纯
《数字电路与逻辑设计实验(下)》
题目:
电子沙漏
学号:
2012210885
姓名:
杨纯
班级:
2012211203
学院:
电子工程学院
时间:
2014/11/7
1、设计课题的任务要求
相关知识:
沙漏是一种古老的计时工具,也是一种玩具。
电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。
电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。
在结构上,两组各16个发光二极管分别排列成为两个三角形,如图1所示。
其中:
VD0~VD15位于上部,排列成倒三角形;VD0'~VD15'位于下部,排列成正三角形。
两个三角形的顶尖相对,组成沙漏形状。
当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。
基本要求:
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的①~⑯所示(若SW1
为高电平,则点阵显示移动顺序为⑯~①)。
每颗沙粒的移动时间为1秒,当移动
到图3的⑯时,若SW1仍为低电平,则保持沙粒不动,但计时继续,直到SW1的
电平发生变化或者BTN0计时停止。
4、设计实现一个60秒计时器,当按键BTN0启动时开始工作,用于在沙粒移动过程
中进行计时校准,并用数码管DISP0~DISP1显示计时结果。
提高要求:
1、可以调节控制电子沙漏的流动速度。
2、用多种方式呈现电子沙漏界面。
3、自行设定沙粒的移动路径,显示每颗沙粒的移动过程。
4、外接重力感应器,实现真实的电子沙漏功能。
5、自拟其它功能。
2、系统设计(包括设计思路、总体框图、分块设计)
1、设计思路:
整个沙漏分为时钟分频、按键模块、开机界面、计时模块和点阵模块。
开机时,显示开机界面。
按键防抖模块,提高输入信号,用于沙漏的启动和停止之间的切换。
计数模块计数,通过数码管显示计数的值。
点阵模块,显示沙漏的各个状态。
2、总体框图:
3、分块设计:
①时钟分频:
将50MHZ的时钟分频12500HZ用于数码管和点阵显示,1250HZ用于按键防抖,1HZ用于计时,和沙子状态切换。
②按键模块:
设一个FLAG变量。
按下BT0时,时钟开始计时,延时一定时间,认为按键被按下,FLAG<=NOTFLAG。
FLAG=’1’时启动,FLAG=’0’时停止,从而实现沙漏的启动和停止之间的切换。
③数码管显示模块:
设置变量CN9,CN6分别为各位和十位。
SG表示数码管段选a-g段显示数字,BT位选表示点亮某几个数码管。
以12500HZ频率扫描,使人眼产生连续显示的感觉。
④计时模块:
设置变量CN9,CN6分别为各位和十位。
每过1S,CN9加一,当CN9加到10时置零且CN6加一。
当CN6到6,CN9加到10时,CN6、CN9都置零。
⑤开机点阵显示:
S2状态之间不断切换,循环显示贪吃蛇画面。
⑥沙漏状态点阵显示:
S1状态,表示沙漏状态。
由0到⑯状态不断切换。
3、仿真波形及波形分析
1、数码管显示模块:
图4
图4为数码管0,1号灯循环点亮波形仿真。
2、计时模块:
图5
如图5所示,数码管0和1循环点亮,计数器由0开始到60循环计时。
段选为“1111110”和“1101101”时,数码管显示“01”。
数码管连续显示“01”、“02”、“03”等。
由上图可以看出,数码管计时显示正确。
3、沙漏点阵显示:
图6
如图6为ROW行的波形仿真,为点阵行的扫描波形。
图7
图8
以上两幅图为点阵列的扫描波形。
图7为绿色LED列,图8为红色LED列。
4、源程序(要有注释)
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;--控制沙漏上下
SW2:
INSTD_LOGIC;--控制沙漏速率
SW3:
INSTD_LOGIC;--控制沙漏速率
SW4:
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:
INTEGERRANGE17TO42;--开机画面
SIGNALSW_0:
STD_LOGIC;--SW_0为1时运行为0时保持开机画面
SIGNALSW_1:
STD_LOGIC;--SW_1为0时向下运动为1时向上运动
SIGNALSW_2:
STD_LOGIC;--沙漏下落速率档位
SIGNALSW_3:
STD_LOGIC;
SIGNALSW_4:
STD_LOGIC;
SIGNALFLAG:
STD_LOGIC;--FLAG='1'时运行FLAG=‘0’停止
SIGNALCOUNT0:
INTEGERRANGE0TO15000;
SIGNALCOUNT1:
INTEGERRANGE0TO15001;
SIGNALCOUNT2:
INTEGERRANGE0TO15000;
SIGNALCOUNT3:
INTEGERRANGE0TO15000;
SIGNALN:
INTEGERRANGE0TO15000;--附加功能调节沙漏下落速度
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)--数码管0,1轮流显示
BEGIN
IFclk_tmp'EVENTANDclk_tmp='1'THEN
caseBT1is
when"111110"=>BT1<="111101";
when"111101"=>BT1<="111110";
whenothers=>BT1<="111110";
endcase;
ENDIF;
ifBT1="111101"then--0-59秒计时
BT<="111101";A<=CNT6;
endif;
ifBT1="111110"then
BT<="111110";A<=CNT9;
endif;
ENDPROCESSP1;
P2:
process(clk_tmp)
BEGIN
SW_0<=SW0;
SW_1<=SW1;
SW_2<=SW2;
SW_3<=SW3;
SW_4<=SW4;
N<=12499;
ifSW_2='1'THEN
N<=10000;
elseifSW_3='1'THEN
N<=7000;
elseifSW_4='1'THEN
N<=2000;
endif;
endif;
endif;
IFclk_tmp'EVENTANDclk_tmp='1'THEN
COUNT2<=COUNT2+1;
COUNT3<=COUNT3+1;
IFCOUNT2=2499THEN
COUNT2<=0;S2<=S2+1;
IFS2=42THEN
S2<=17;
ENDIF;
ENDIF;
COUNT1<=COUNT1+1;
IFCOUNT1=12499THEN--分频为1HZ
COUNT1<=0;CNT9<=CNT9+1;
ifCNT9=9then
CNT9<=0;CNT6<=CNT6+1;
endif;
ifCNT6=5andCNT9=9then
CNT6<=0;CNT9<=0;
endif;
ENDIF;
IFCOUNT3=NTHEN
COUNT3<=0;
IFSW_1='0'andFLAG='1'andSW_0='1'THEN
S1<=S1+1;
ifS1=16andSW_0='1'then
S1<=16;
endif;
ENDIF;
IFFLAG='0'THEN
S1<=S1;CNT6<=CNT6;CNT9<=CNT9;
ENDIF;
IFSW_1='1'andFLAG='1'andSW_0='1'THEN
S1<=S1-1;
ifS1=0andSW_0='1'then
S1<=0;
endif;
ENDIF;
ENDIF;
ENDIF;
ENDPROCESSP2;
P3:
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;
ENDPROCESSP3;
P4:
process(S)--点阵状态显示
BEGIN
IFclk_tmp'EVENTANDclk_tmp='1'THEN
S<=S+1;
IFS=7THEN
S<=0;
ENDIF;
ENDIF;
IFS1=0andSW_0='1'then
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=1andSW_0='1'then
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=2andSW_0='1'then
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=3andSW_0='1'then
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=4andSW_0='1'then
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=5andSW_0='1'then
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=6andSW_0='1'then
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=7andSW_0='1'then
CASESIS
WHEN0=>R<="01111111";Cg<="1111111";Cr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字电路 综合 实验 报告