北邮数电实验电子沙漏实验报告.docx

上传人:b****5 文档编号:6188465 上传时间:2023-01-04 格式:DOCX 页数:27 大小:490.04KB
下载 相关 举报
北邮数电实验电子沙漏实验报告.docx_第1页
第1页 / 共27页
北邮数电实验电子沙漏实验报告.docx_第2页
第2页 / 共27页
北邮数电实验电子沙漏实验报告.docx_第3页
第3页 / 共27页
北邮数电实验电子沙漏实验报告.docx_第4页
第4页 / 共27页
北邮数电实验电子沙漏实验报告.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

北邮数电实验电子沙漏实验报告.docx

《北邮数电实验电子沙漏实验报告.docx》由会员分享,可在线阅读,更多相关《北邮数电实验电子沙漏实验报告.docx(27页珍藏版)》请在冰豆网上搜索。

北邮数电实验电子沙漏实验报告.docx

北邮数电实验电子沙漏实验报告

 

数字电路与逻辑设计实验报告

 

选题:

电子沙漏的设计与实现

班级:

学号:

姓名:

序号:

2014年11月12日

 

一、任务要求:

1、相关知识:

沙漏是一种古老的计时工具,也是一种玩具。

电子沙漏用发光二极管表示沙粒,模拟沙漏的运动过程。

电子沙漏会像真正的沙漏一样,上部的沙粒(点亮的发光二极管)一粒一粒往下掉,下部的沙粒一粒一粒堆起来。

在结构上,两组各16个发光二极管分别排列成为两个三角形,如图1所示。

其中:

VD0~VD15位于上部,排列成倒三角形;VD0'~VD15'位于下部,排列成正三角形。

两个三角形的顶尖相对,组成沙漏形状。

当上部有一个发光二极管熄灭时,相应地下部就有一个发光二极管点亮,模拟了沙粒的运动。

2、基本要求:

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显示计时结果。

3、提高要求:

1 可以调节控制电子沙漏的流动速度。

2 用多种方式呈现电子沙漏界面。

3 自行设定沙粒的移动路径,显示每颗沙粒的移动过程。

4 外接重力感应器,实现真实的电子沙漏功能。

5 自拟其它功能。

 

2、系统设计:

总体框图:

 

 

 

分块设计:

1 输入模块:

由btn按钮和拨码开关构成。

采用序列存储的方式存储相应的输入。

2 输入译码模块:

将输入的符号序列转化成先用状态,以便选取对应的计算方法;将输入的8421bcd码转化成相应的两位十进制数。

3 数码管、点阵显示模块:

将寄存器内的数进行输出到数码管上。

4 防抖模块:

在用按键输入时,所得到的信号可能会有抖动,因此加入此抖动电路。

 

流程图:

 

3、仿真波形及波形分析:

点阵显示采用行扫描模式

 

 

四、源程序:

----------------------------------------

--FileName:

ShaLou.vhd

--System:

QuartusII9.1

--Author:

WangHongjie2012210176

--Revision:

Version1.0,2014-11-3

----------------------------------------

libraryieee;

useieee.std_logic_1164.all;

entityshalouis

port(

clk:

instd_logic;--系统时钟

sw:

instd_logic;--拨码开关SW1控制沙粒移动方向

bto:

instd_logic;--启动暂停

bt1:

instd_logic;--复位

bt2:

instd_logic;--速度

lieh:

outstd_logic_vector(7downto0);--RED

liel:

outstd_logic_vector(7downto0);--GREEN

hang:

outstd_logic_vector(7downto0);--行扫描

a:

outstd_logic_vector(6downto0);--七段数码管

cat:

outstd_logic_vector(5downto0));--数码管选择

endentity;

Architectureaofshalouis

signaltemp:

integerrange0to49999;

signalclktmp:

std_logic;

signalclkout:

std_logic;

signaltemp1:

integerrange0to199;

signalclktmp1:

std_logic;

signalclkout1:

std_logic;

signaltemp2:

integerrange0to299;

signalclktmp2:

std_logic;

signalclkout2:

std_logic;

signalqt:

integerrange0to5;

signalbto_tmp:

std_logic;

signalbto_out:

std_logic;

signalqt1:

integerrange0to5;

signalbto_tmp1:

std_logic;

signalbto_out1:

std_logic;

signalqt2:

integerrange0to5;

signalbto_tmp2:

std_logic;

signalsudu:

integerrange0to2;

signalsudu_t:

integerrange0to299;

signalq:

integerrange0to60;

signalp:

integerrange0to16;

signalge:

integerrange0to9;

signalshi:

integerrange0to9;

signaldz_kongzhi:

integerrange0to7;

signalcat_kongzhi:

integerrange0to1;

begin

p1:

process(clk)--时钟

begin

ifclk'eventandclk='1'then

iftemp=49999then

temp<=0;clktmp<=notclktmp;

else

temp<=temp+1;

endif;

endif;

endprocessp1;

clkout<=clktmp;

p2:

process(clkout)--分频

begin

ifclkout'eventandclkout='0'then

iftemp1=199then

temp1<=0;

clktmp1<=notclktmp1;

else

temp1<=temp1+1;

endif;

endif;

endprocessp2;

clkout1<=clktmp1;

p3:

process(clkout1)

begin

ifclkout'eventandclkout='0'then

ifcat_kongzhi=0thencat_kongzhi<=1;

elsecat_kongzhi<=0;

endif;

ifdz_kongzhi=7thendz_kongzhi<=0;

elsedz_kongzhi<=dz_kongzhi+1;

endif;

endif;

endprocessp3;

p4:

process(clkout,qt,bto,qt1,bt1,qt2,bt2)

begin

ifclkout'eventandclkout='0'then

ifbto='1'then

ifqt=5then

else

qt<=qt+1;

endif;

ifqt=4then

bto_tmp<='1';

else

bto_tmp<='0';

endif;

else

qt<=0;

endif;

endif;

ifclkout'eventandclkout='0'then

ifbt1='1'then

ifqt1=5then

else

qt1<=qt1+1;

endif;

ifqt1=4then

bto_tmp1<='1';

else

bto_tmp1<='0';

endif;

else

qt1<=0;

endif;

endif;

ifclkout'eventandclkout='0'then

ifbt2='1'then

ifqt2=5then

else

qt2<=qt2+1;

endif;

ifqt2=4then

bto_tmp2<='1';

else

bto_tmp2<='0';

endif;

else

qt2<=0;

endif;

endif;

endprocess;

p5:

process(bto_tmp,bto_tmp1)

begin

if(bto_tmp'eventandbto_tmp='1')then

bto_out<=notbto_out;

else

bto_out<=bto_out;

endif;

if(bto_tmp1'eventandbto_tmp1='1')then

bto_out1<=notbto_out1;

else

bto_out1<=bto_out1;

endif;

if(bto_tmp2'eventandbto_tmp2='1')then

if(sudu=2)thensudu<=0;

elsesudu<=sudu+1;

endif;

endif;

endprocess;

p6:

process(sudu)

begin

casesuduis

when0=>sudu_t<=199;

when1=>sudu_t<=99;

when2=>sudu_t<=299;

endcase;

endprocess;

p7:

process(clkout,sudu_t)--fenpin

begin

ifclkout'eventandclkout='0'then

iftemp2=sudu_tthen

temp2<=0;

clktmp2<=notclktmp2;

else

temp2<=temp2+1;

endif;

endif;

endprocess;

clkout2<=clktmp2;

p8:

process(bto_out,clkout1,sw)--jishuqi

begin

if(bto_out='0')then

elsif(bto_out1='1')then

q<=0;p<=0;--q:

miaozhongjishu,p:

dianzhenzhuangtaijishu

elsif(q=60)then

else

if(clkout1'eventandclkout1='1')THEN

q<=q+1;

endif;

if(clkout2'eventandclkout2='1')THEN

if(sw='0')then

if(p<16)then

p<=p+1;

else

endif;

elsif(sw='1')then

if(p>0)then

p<=p-1;

else

endif;

endif;

endif;

endif;

endprocess;

shi<=q/10;

ge<=qrem10;

p9:

process(cat_kongzhi,ge,shi)

begin

ifcat_kongzhi=0then

cat<="011111";

casegeis

when0=>a<="1111110";--0

when1=>a<="0110000";--1

when2=>a<="1101101";--2

when3=>a<="1111001";--3

when4=>a<="0110011";--4

when5=>a<="1011011";--5

when6=>a<="1011111";--6

when7=>a<="1110000";--7

when8=>a<="1111111";--8

when9=>a<="1111011";--9

--whenothers=>a<="0000000";

endcase;

elsifcat_kongzhi=1then

cat<="101111";

caseshiis

when0=>a<="1111110";--0

when1=>a<="0110000";--1

when2=>a<="1101101";--2

when3=>a<="1111001";--3

when4=>a<="0110011";--4

when5=>a<="1011011";--5

when6=>a<="1011111";--6

when7=>a<="1110000";--7

when8=>a<="1111111";--8

when9=>a<="1111011";--9

--whenothers=>a<="0000000";

endcase;

endif;

endprocess;

p10:

process(p)

begin

casepis

when0=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="11111110";liel<="00000000";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="00000000";liel<="11111110";

whenothers=>hang<="11111111";

endcase;

when1=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="11101110";liel<="00010000";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="00010000";liel<="11101110";

whenothers=>hang<="11111111";

endcase;

when2=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="11001110";liel<="00110000";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="00110000";liel<="11001110";

whenothers=>hang<="11111111";

endcase;

when3=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="11000110";liel<="00111000";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="00111000";liel<="11000110";

whenothers=>hang<="11111111";

endcase;

when4=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="10000110";liel<="01111000";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="01111000";liel<="10000110";

whenothers=>hang<="11111111";

endcase;

when5=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="10000010";liel<="01111100";

when1=>hang<="10111111";

lieh<="01111100";liel<="00000000";

when2=>hang<="11011111";

lieh<="00111000";liel<="00000000";

when3=>hang<="11101111";

lieh<="00010000";liel<="00000000";

when4=>hang<="11110111";

lieh<="00000000";liel<="00010000";

when5=>hang<="11111011";

lieh<="00000000";liel<="00111000";

when6=>hang<="11111101";

lieh<="00000000";liel<="01111100";

when7=>hang<="11111110";

lieh<="01111100";liel<="10000010";

whenothers=>hang<="11111111";

endcase;

when6=>

casedz_kongzhiis

when0=>hang<="01111111";

lieh<="00000010";liel<="1111

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1