数电综合实验.docx
- 文档编号:3470989
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:31
- 大小:552.27KB
数电综合实验.docx
《数电综合实验.docx》由会员分享,可在线阅读,更多相关《数电综合实验.docx(31页珍藏版)》请在冰豆网上搜索。
数电综合实验
数字电路综合实验
微波炉控制系统
学院:
信息与通信工程学院
班级:
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=>
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 综合 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)