数电综合实验.docx

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

数电综合实验.docx

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

数电综合实验.docx

数电综合实验

数字电路综合实验

微波炉控制系统

 

学院:

信息与通信工程学院

班级:

20102111xx

班内序号:

xx

学生姓名:

xxx

学号:

xxxxxxxx

 

一、课题任务要求

简易微波炉控制器的设计与实现

设计制作一个简易微波炉控制器。

基本要求:

1、微波炉的火力有大、中、小三档可选。

用一个按键实现火力的选择,用点阵显示火力档位,点阵的显示随着按键的按下次数而变化,没有选择时默认的火力为大。

2、微波加热时间在0-59分59秒之间可选。

用4个按键分别设置加热时间各位的长度,用数码管显示加热时间。

3、设置一个开始键,按下此键后开始加热。

加热过程中,用数码管倒计时显示剩余时间。

4、加热过程中,不能修改火力和加热时间。

5、加热完成后蜂鸣器至少鸣响两声以提醒使用者加热已结束,加热结束后回到等待状态。

6、设置复位键,任何时候按下复位键可以取消加热,回到等待状态,只有在等待状态下才可以修改火力和加热时间。

提高要求:

1、用8个LED灯作为加热进度显示条,随着加热时间的增加匀速增加点亮LED灯的个数,无论加热时间是多长,最后都必须将8个LED灯全部点亮。

2、增加烧烤功能,用一个键选择微波或烧烤功能,用一个数码管指示当前处于微波还是烧烤功能。

3、烧烤火力和加热时间要求与微波功能相同。

4、自拟其它功能。

二、系统设计

设计思路:

在设计之初,我只是准备完成实验的基本要求,所以对基本要求中的功能首先进行了分析以及分模块设计,调试成功后的代码分为了三个模块:

时间设定及显示、火力大小调节及显示、倒计时及显示。

在分别代码书写并校正完毕并上板证明功能实现成功之后,我对三个功能进行了整合,将之前的代码写入了一个VHD文件当中进行整合并进行了总体控制逻辑的设计,加入了开始、复位、结束后蜂鸣提示的功能。

最后,在基本功能完成之后,我开始考虑提高要求部分的功能,由于第一项要求较难,所以我首先依次利用多个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:

INSTD_LOGIC;--火力调整按钮输入

time1in,time2in,time3in,time4in:

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

startin,resetin:

INSTD_LOGIC;--开始、复位按钮输入

gongnengin:

INSTD_LOGIC;--功能键对应输入

sell:

OUTSTD_LOGIC_VECTOR(5downto0);--数码管显示扫描选择输出

f:

OUTSTD_LOGIC_VECTOR(6downto0);--数码管显示控制输出

r:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);--点阵显示列控制(列red)

g:

OUTSTD_LOGIC_VECTOR(7DOWNTO0);--点阵显示列控制(列grenn)

fengming:

OUTSTD_LOGIC;--蜂鸣器对应输出

weiboout:

OUTSTD_LOGIC:

='1';--微波加热功能对应输出(LED)

shaokaoout:

OUTSTD_LOGIC:

='0';--烧烤加热功能对应输出(LED)

zuihou:

OUTSTD_LOGIC:

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

shijianjieshu:

OUTSTD_LOGIC:

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

daiji:

OUTSTD_LOGIC:

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

jiare:

OUTSTD_LOGIC:

='0';--说明当前处于加热状态的LED输出

LED1:

OUTSTD_LOGIC:

='0';

LED2:

OUTSTD_LOGIC:

='0';

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:

integerrange0to5:

=5;--数码管第三位(秒十位)

SIGNALtimenow4:

integerrange0to9:

=9;--数码管第四位(秒个位)

SIGNALtimenow11:

integerrange0to5:

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

SIGNALtimenow21:

integerrange0to9:

=9;--数码管第二位(分个位)

SIGNALtimenow31:

integerrange0to5:

=5;--数码管第三位(秒十位)

SIGNALtimenow41:

integerrange0to9:

=9;--数码管第四位(秒个位)

SIGNALtimewei:

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

SIGNALCOUNT:

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

SIGNALCOUNT1:

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

SIGNALCOUNT2:

integerrange0to360000:

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

SIGNALtimezong:

integerrange0to360000:

=0;

SIGNALtimepast1:

integerrange0to360000:

=0;

SIGNALtimepast2:

integerrange0to360000:

=0;

SIGNALtimepast:

integerrange0to360000:

=0;

SIGNALq:

STD_LOGIC_VECTOR(7DOWNTO0);--点阵显示列控制信号

SIGNALclock:

STD_LOGIC;--1Hz时钟信号

SIGNALclock1:

STD_LOGIC;--100Hz时钟信号

SIGNALkaishi:

STD_LOGIC:

='0';--表示已经开始,进入加热状态

SIGNALjieshu:

STD_LOGIC:

='0';--表示倒计时结束

SIGNALsheding:

STD_LOGIC:

='0';--表示reset键被按下,进入设定状态

SIGNALfengmingjishu:

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

SIGNALfengming1:

STD_LOGIC:

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

SIGNALweibo:

STD_LOGIC:

='1';--控制功能输出时使用

SIGNALshaokao:

STD_LOGIC:

='0';--控制功能输出时使用

SIGNALLED1s:

STD_LOGIC:

='0';

SIGNALLED2s:

STD_LOGIC:

='0';

SIGNALresetmp11,resetmp21,time1:

STD_LOGIC;--防抖部分使用

SIGNALresetmp12,resetmp22,time2:

STD_LOGIC;

SIGNALresetmp13,resetmp23,time3:

STD_LOGIC;

SIGNALresetmp14,resetmp24,time4:

STD_LOGIC;

SIGNALresetmp15,resetmp25,huoli:

STD_LOGIC;

SIGNALresetmp16,resetmp26,start:

STD_LOGIC;

SIGNALresetmp17,resetmp27,reset:

STD_LOGIC;

SIGNALresetmp18,resetmp28,gongneng:

STD_LOGIC;

BEGIN

--倒计时部分代码--

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

BEGIN

IF(clk'EVENTANDclk='1')THEN

COUNT<=COUNT+1;

COUNT2<=COUNT2+1;

IF(COUNT=24999)THEN

COUNT<=0;

clock<=NOTclock;

ENDIF;

IFCOUNT2=249THEN

COUNT2<=0;

clock1<=NOTclock1;

ENDIF;

ENDIF;

ENDPROCESS;

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

BEGIN

CASEkaishiIS

WHEN'1'=>

IF(clock'EVENTANDclock='1')THEN

IFtimenow4=0THEN

IFtimenow3=0THEN

IFtimenow2=0THEN

IFtimenow1=0THEN

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

ELSEtimenow1<=timenow1-1;--一下各种情况对应各种借位

timenow2<=9;

timenow3<=5;

timenow4<=9;

ENDIF;

ELSEtimenow2<=timenow2-1;

timenow3<=5;

timenow4<=9;

ENDIF;

ELSEtimenow3<=timenow3-1;

timenow4<=9;

ENDIF;

ELSEtimenow4<=timenow4-1;

ENDIF;

ENDIF;

WHEN'0'=>

timenow1<=timenow11;

timenow2<=timenow21;

timenow3<=timenow31;

timenow4<=timenow41;

ENDCASE;

IFCOUNT1=100THEN

jieshu<='0';

ENDIF;

ENDPROCESS;

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

BEGIN

IF(clk'EVENTANDclk='1')THEN

CASEtimeweiIS

WHEN3=>

sell<="111110";

CASEtimenow4IS--即第四位送显

WHEN0=>f<="0111111";--sell<="111110";--3F

WHEN1=>f<="0000110";--sell<="111110";--06

WHEN2=>f<="1011011";--sell<="111110";--5B

WHEN3=>f<="1001111";--sell<="111110";--4F

WHEN4=>f<="1100110";--sell<="111110";--66

WHEN5=>f<="1101101";--sell<="111110";--6D

WHEN6=>f<="1111101";--sell<="111110";--7D

WHEN7=>f<="0000111";--sell<="111110";--07

WHEN8=>f<="1111111";--sell<="111110";--7F

WHEN9=>f<="1101111";--sell<="111110";--6F

ENDCASE;

WHEN2=>

sell<="111101";

CASEtimenow3IS

WHEN0=>f<="0111111";--sell<="111101";--3F

WHEN1=>f<="0000110";--sell<="111101";--06

WHEN2=>f<="1011011";--sell<="111101";--5B

WHEN3=>f<="1001111";--sell<="111101";--4F

WHEN4=>f<="1100110";--sell<="111101";--66

WHEN5=>f<="1101101";--sell<="111101";--6D

ENDCASE;

WHEN1=>

sell<="111011";

CASEtimenow2IS

WHEN0=>f<="0111111";--sell<="111011";--3F

WHEN1=>f<="0000110";--sell<="111011";--06

WHEN2=>f<="1011011";--sell<="111011";--5B

WHEN3=>f<="1001111";--sell<="111011";--4F

WHEN4=>f<="1100110";--sell<="111011";--66

WHEN5=>f<="1101101";--sell<="111011";--6D

WHEN6=>f<="1111101";--sell<="111011";--7D

WHEN7=>f<="0000111";--sell<="111011";--07

WHEN8=>f<="1111111";--sell<="111011";--7F

WHEN9=>f<="1101111";--sell<="111011";--6F

ENDCASE;

WHEN0=>

sell<="110111";

CASEtimenow1IS

WHEN0=>f<="0111111";--sell<="110111";--3F

WHEN1=>f<="0000110";--sell<="110111";--06

WHEN2=>f<="1011011";--sell<="110111";--5B

WHEN3=>f<="1001111";--sell<="110111";--4F

WHEN4=>f<="1100110";--sell<="110111";--66

WHEN5=>f<="1101101";--sell<="110111";--6D

ENDCASE;

ENDCASE;

ENDIF;

ENDPROCESS;

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

BEGIN

IF(clk'eventandclk='1')THEN

IF(timewei=3)THEN

timewei<=0;

else

timewei<=timewei+1;

ENDIF;

ENDIF;

ENDPROCESS;

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

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

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

BEGIN

IFstart='0'THEN

IF(time1'eventandtime1='1')THEN

IF(timenow11=5)THEN

timenow11<=0;

ELSE

timenow11<=timenow11+1;

ENDIF;

ENDIF;

ENDIF;

IF(sheding='1'ORjieshu='1')THEN

timenow11<=5;

ENDIF;

ENDPROCESS;

PROCESS(time2,start)

BEGIN

IFstart='0'THEN

IF(time2'eventandtime2='1')THEN

IF(timenow21=9)THEN

timenow21<=0;

ELSE

timenow21<=timenow21+1;

ENDIF;

ENDIF;

ENDIF;

IF(sheding='1'ORjieshu='1')THEN

timenow21<=9;

ENDIF;

ENDPROCESS;

PROCESS(time3,start)

BEGIN

IFstart='0'THEN

IF(time3'eventandtime3='1')THEN

IF(timenow31=5)THEN

timenow31<=0;

ELSE

timenow31<=timenow31+1;

ENDIF;

ENDIF;

ENDIF;

IF(sheding='1'ORjieshu='1')THEN

timenow31<=5;

ENDIF;

ENDPROCESS;

PROCESS(time4,start)

BEGIN

IFstart='0'THEN

IF(time4'eventandtime4='1')THEN

IF(timenow41=9)THEN

timenow41<=0;

ELSE

timenow41<=timenow41+1;

ENDIF;

ENDIF;

ENDIF;

IF(sheding='1'ORjieshu='1')THEN

timenow41<=9;

ENDIF;

ENDPROCESS;

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

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

BEGIN

IF(clk'eventandclk='1')THEN

IFsaomiaolie=7THEN

saomiaolie<=0;

ELSEsaomiaolie<=saomiaolie+1;

ENDIF;

ENDIF;

ENDPROCESS;

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

BEGIN

IF(clk'eventandclk='1')THEN

CASEstateIS

WHENS0=>

CASEsaomiaolieIS

WHEN0=>扫描第一行

s<="01111111";--0

q<="00111100";

WHEN1=>

s<="10111111";--1

q<="01111110";

WHEN2=>

s<="11011111";--2

q<="11111111";

WHEN3=>

s<="11101111";--3

q<="00011000";

WHEN4=>

s<="11110111";--4

q<="00011000";

WHEN5=>

s<="11111011";--5

q<="00000000";

WHEN6=>

s<="11111101";--6

q<="00000000";

WHEN7=>

s<="11111110";--7

q<="00000000";

ENDCASE;

WHENS1=>

CASEsaomiaolieIS

WHEN0=>

s<="01111111";--0

q<="00111100";

WHEN1=>

s<="10111111";--1

q<="01111110";

WHEN2=>

s<="11011111";--2

q<="11111111";

WHEN3=>

s<="11101111";--3

q<="00111100";

WHEN4=>

s<="11110111";--4

q<="00111100";

WHEN5=>

s<="11111011";--5

q<="00100100";

WHEN6=>

s<="11111101";--6

q<="00000000";

WHEN7=>

s<="11111110";--7

q<="00000000";

ENDCASE;

WHENS2=>

CASEsaomiaolieIS

WHEN0=>

s<="01111111";--0

q<="00111100";

WHEN1=>

s<="10111111";--1

q<="01111110";

WHEN2=>

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

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

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

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