数电综合实验Word下载.docx

上传人:b****3 文档编号:16376412 上传时间:2022-11-23 格式:DOCX 页数:31 大小:552.27KB
下载 相关 举报
数电综合实验Word下载.docx_第1页
第1页 / 共31页
数电综合实验Word下载.docx_第2页
第2页 / 共31页
数电综合实验Word下载.docx_第3页
第3页 / 共31页
数电综合实验Word下载.docx_第4页
第4页 / 共31页
数电综合实验Word下载.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

数电综合实验Word下载.docx

《数电综合实验Word下载.docx》由会员分享,可在线阅读,更多相关《数电综合实验Word下载.docx(31页珍藏版)》请在冰豆网上搜索。

数电综合实验Word下载.docx

最后,在基本功能完成之后,我开始考虑提高要求部分的功能,由于第一项要求较难,所以我首先依次利用多个LED灯实现了功能显示、状态显示、时间提示、结束提示等功能。

最后,在认真思考之后完成了最后一个功能:

进度条功能的添加。

总体框图:

是是

分块设计(基本功能):

时间设定部分:

在此部分,若开始键及复位键未按下,则不断检测各输入按键是否按下,之后根据检测结果控制各位数字的变化,并将该数字送显。

倒计时控制及数码管显示部分:

在此部分,若开始键按下,则时间需减1/秒,且需不断检测复位键是否按下以及倒计时是否结束。

火力控制部分:

在此部分,若未开始,则需不断检测火力控制键是否按下并送显。

三、仿真波形及波形分析

上面的就是时间设定以及显示的波形。

从上图中可以看出随着time1、time2、time3、time4的上升沿,f各位的数值在不断变化,而sell则岁clk的上升沿3~0依次显‘0’,说明各位在依次点亮,而f与数码管显示数字是相对应的。

所以相关输入检测代码以及数码管显示代码是正确的。

上面的就是火力设定以及送显的波形。

从上图中可以看出s对应的是各行依次扫描送‘0’,而q对应的则是各行图案,且当输入改变时,所显示图案改变。

所以相关输入检测代码以及点阵显示代码是正确的。

四、源程序

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

--实体定义

ENTITYs31s1IS

PORT(

clk:

INSTD_LOGIC;

--pin18输入时钟信号

huoliin:

--火力调整按钮输入

time1in,time2in,time3in,time4in:

INSTD_LOGIC;

--时间设定四位调整按钮输入

startin,resetin:

--开始、复位按钮输入

gongnengin:

--功能键对应输入

sell:

OUTSTD_LOGIC_VECTOR(5downto0);

--数码管显示扫描选择输出

f:

OUTSTD_LOGIC_VECTOR(6downto0);

--数码管显示控制输出

r:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);

--点阵显示列控制(列red)

g:

--点阵显示列控制(列grenn)

fengming:

OUTSTD_LOGIC;

--蜂鸣器对应输出

weiboout:

OUTSTD_LOGIC:

='

1'

;

--微波加热功能对应输出(LED)

shaokaoout:

0'

--烧烤加热功能对应输出(LED)

zuihou:

--提示加热进入最后一分钟输出(LED)

shijianjieshu:

--加热结束,LED闪烁提示(与蜂鸣器一致)

daiji:

--说明当前处于待机状态,可以调整工作状态的LED输出

jiare:

--说明当前处于加热状态的LED输出

LED1:

LED2:

s:

OUTSTD_LOGIC_VECTOR(7DOWNTO0));

--点阵显示行扫描输出

ENDs31s1;

--ARCHITECTURE定义

ARCHITECTUREaOFs31s1IS

TYPEall_stateIS(S0,S1,S2);

SIGNALstate:

all_state:

=S2;

--火力状态信号

SIGNALsaomiaolie:

integerrange0to7;

--点阵显示扫描选择控制信号

SIGNALtimenow1:

integerrange0to5:

=5;

--数码管第一位(分十位)(倒计时逻辑部分使用)

SIGNALtimenow2:

integerrange0to9:

=9;

--数码管第二位(分个位)

SIGNALtimenow3:

--数码管第三位(秒十位)

SIGNALtimenow4:

--数码管第四位(秒个位)

SIGNALtimenow11:

--数码管第一位(分十位)(时间设定部分使用)

SIGNALtimenow21:

SIGNALtimenow31:

SIGNALtimenow41:

SIGNALtimewei:

integerrange0to3;

SIGNALCOUNT:

integerrange0to24999;

--产生clock过程中用到的信号

SIGNALCOUNT1:

integerrange0to100;

--产生延迟过程中用到的信号

SIGNALCOUNT2:

integerrange0to360000:

=0;

--产生clock1过程中用到的信号

SIGNALtimezong:

SIGNALtimepast1:

SIGNALtimepast2:

SIGNALtimepast:

SIGNALq:

STD_LOGIC_VECTOR(7DOWNTO0);

--点阵显示列控制信号

SIGNALclock:

STD_LOGIC;

--1Hz时钟信号

SIGNALclock1:

--100Hz时钟信号

SIGNALkaishi:

STD_LOGIC:

--表示已经开始,进入加热状态

SIGNALjieshu:

--表示倒计时结束

SIGNALsheding:

--表示reset键被按下,进入设定状态

SIGNALfengmingjishu:

--使用蜂鸣器的时候使用的计数

SIGNALfengming1:

--表示蜂鸣器使能,当前蜂鸣器处于使用状态

SIGNALweibo:

--控制功能输出时使用

SIGNALshaokao:

SIGNALLED1s:

SIGNALLED2s:

SIGNALresetmp11,resetmp21,time1:

--防抖部分使用

SIGNALresetmp12,resetmp22,time2:

SIGNALresetmp13,resetmp23,time3:

SIGNALresetmp14,resetmp24,time4:

SIGNALresetmp15,resetmp25,huoli:

SIGNALresetmp16,resetmp26,start:

SIGNALresetmp17,resetmp27,reset:

SIGNALresetmp18,resetmp28,gongneng:

BEGIN

--倒计时部分代码--

PROCESS(clk,COUNT)--由输入时钟进行分频产生1HZ时钟clock、100HZ时钟clock1

BEGIN

IF(clk'

EVENTANDclk='

)THEN

COUNT<

=COUNT+1;

COUNT2<

=COUNT2+1;

IF(COUNT=24999)THEN

clock<

=NOTclock;

ENDIF;

IFCOUNT2=249THEN

clock1<

=NOTclock1;

ENDIF;

ENDPROCESS;

PROCESS(clk,kaishi,timenow1,timenow2,timenow3,timenow4)--倒计时逻辑控制部分

CASEkaishiIS

WHEN'

=>

IF(clock'

EVENTANDclock='

IFtimenow4=0THEN

IFtimenow3=0THEN

IFtimenow2=0THEN

IFtimenow1=0THEN

jieshu<

--即若时间各位均变为0的时候,此时对应的状态是倒计时结束

ELSEtimenow1<

=timenow1-1;

--一下各种情况对应各种借位

timenow2<

timenow3<

timenow4<

ELSEtimenow2<

=timenow2-1;

ELSEtimenow3<

=timenow3-1;

ELSEtimenow4<

=timenow4-1;

timenow1<

=timenow11;

=timenow21;

=timenow31;

=timenow41;

ENDCASE;

IFCOUNT1=100THEN

PROCESS(clk,timewei)--数码管扫描一次部分

CASEtimeweiIS

WHEN3=>

sell<

="

111110"

CASEtimenow4IS--即第四位送显

WHEN0=>

f<

0111111"

--sell<

--3F

WHEN1=>

0000110"

--06

WHEN2=>

1011011"

--5B

1001111"

--4F

WHEN4=>

1100110"

--66

WHEN5=>

1101101"

--6D

WHEN6=>

1111101"

--7D

WHEN7=>

0000111"

--07

WHEN8=>

1111111"

--7F

WHEN9=>

1101111"

--6F

ENDCASE;

111101"

CASEtimenow3IS

111011"

CASEtimenow2IS

WHEN9=>

110111"

CASEtimenow1IS

ENDPROCESS;

PROCESS(clk,timewei)--改变控制数码管扫描的信号timewei

IF(clk'

eventandclk='

IF(timewei=3)THEN

timewei<

else

=timewei+1;

--设定时间部分代码--

--数码管显示部分在倒计时部分的PROCESS部分已有代码是重复利用的所以不需重新写

PROCESS(time1,start)--第一位时间设定

IFstart='

THEN

IF(time1'

eventandtime1='

IF(timenow11=5)THEN

timenow11<

ELSE

=timenow11+1;

IF(sheding='

ORjieshu='

PROCESS(time2,start)

IFstart='

IF(time2'

eventandtime2='

IF(timenow21=9)THEN

timenow21<

=timenow21+1;

PROCESS(time3,start)

IF(time3'

eventandtime3='

IF(timenow31=5)THEN

timenow31<

=timenow31+1;

PROCESS(time4,start)

IF(time4'

eventandtime4='

IF(timenow41=9)THEN

timenow41<

=timenow41+1;

--火力控制部分代码--

PROCESS(clk,saomiaolie)--改变控制点阵扫描的信号saomiaolie

IFsaomiaolie=7THEN

saomiaolie<

ELSEsaomiaolie<

=saomiaolie+1;

PROCESS(clk,state,saomiaolie)--点阵扫描一次部分

CASEstateIS

WHENS0=>

CASEsaomiaolieIS

WHEN0=>

扫描第一行

s<

01111111"

--0

q<

00111100"

WHEN1=>

10111111"

--1

01111110"

WHEN2=>

11011111"

--2

11111111"

WHEN3=>

11101111"

--3

00011000"

WHEN4=>

11110111"

--4

WHEN5=>

11111011"

--5

00000000"

WHEN6=>

11111101"

--6

WHEN7=>

11111110"

--7

WHENS1=>

00100100"

WHENS2=>

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

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

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

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