简易微波炉控制器的设计与实现Word文档格式.docx

上传人:b****1 文档编号:924931 上传时间:2023-04-29 格式:DOCX 页数:44 大小:1.12MB
下载 相关 举报
简易微波炉控制器的设计与实现Word文档格式.docx_第1页
第1页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第2页
第2页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第3页
第3页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第4页
第4页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第5页
第5页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第6页
第6页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第7页
第7页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第8页
第8页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第9页
第9页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第10页
第10页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第11页
第11页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第12页
第12页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第13页
第13页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第14页
第14页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第15页
第15页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第16页
第16页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第17页
第17页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第18页
第18页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第19页
第19页 / 共44页
简易微波炉控制器的设计与实现Word文档格式.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易微波炉控制器的设计与实现Word文档格式.docx

《简易微波炉控制器的设计与实现Word文档格式.docx》由会员分享,可在线阅读,更多相关《简易微波炉控制器的设计与实现Word文档格式.docx(44页珍藏版)》请在冰点文库上搜索。

简易微波炉控制器的设计与实现Word文档格式.docx

防抖模块

左边为时间输入防抖,右边为火力输入和开始键的防抖。

3:

控制器

状态控制器的功能根据输入信号和自身当时所处的状态完成状态的转换和输出相应的控制信号,其模块框图如图所示。

其中,输出信号

LD_DONE指示数据装载电路载入的烹调结束的状态信息的显示的驱动信息数据;

LD_CLK显示数据装载电路的设置的时间数据;

LD_EDIT用于输出给其他分模块以便设置是否可改变;

COOK指示烹饪的状态,并提示计时器进行减法计算;

DATA[15..0]:

将key转化为二进制编码;

KEY为定时时间输入信号,用于设置烹饪时间的长短,其高到低分别表示时间分、秒的十位、个位。

当LD_DONE有效时,输出烹调结束数据。

当LD_CLK有效时,输出烹调的设置时间数据。

4:

数据装载

当LD_DONE有效时,输出烹调结束的信息数据数据。

当L_CLK有效时,输出烹调的设置时间数据。

由于结构内部用到与或表达式

LOAD<

=LD_TESTORLD_DONEORLD_CLK;

TEMP:

=LD_TEST&

LD_DONE&

LD_CLK;

必须3个变量才能使用,所以LD-Test是用于完成这个表达式的。

程序中默认接地。

倒计时模块

电路计时模块可以由十进制减法计数器和六进制减法计数器级联组成,其中,两个十进制的减法计数器用于分、秒的个位减法计数,两个六进制的减法计数器用于分、秒的十位减法计数。

由六进制计数器和十进制计数器级联构成的计时模块原理图如图所示。

LOAD有效时完成装入功能,COOK(EN)有效时执行减计数;

载已存的数据;

DONE返回给控制器,MIN和SEC显示所剩时间和测试状态信息、烹调结束状态信息等。

5:

译码模块

用于将counter输出的sec和min信号转化成数码管显示信号。

输出分别对应每个数码管的管脚。

6:

数码管驱动模块

T1—t4接受来自四个decoder的译码信号。

分别代表秒,十秒,分,十分位的信号。

Clk是用于显示的分频信号。

数码管不能做到同时显示,只能以较快速度分别显示每个数码管的数字,由于人眼分辨不出快速的变化,看起来的效果是同时显示的。

T输出是管脚信号,每个clk上升沿t就输出下一个t的信息,轮流显示t1-t4的信号。

a是选择数码管的信号,低电平表示该数码管工作。

轮流显示111110,111101,111011,110111.011111.

T5是烧烤信号,作用与第一个数码管,为1时是普通功能,0时换做烧烤。

Edit来自控制器,表示t5信号是否可改变

7:

火力显示

Dianzhenjishu用于完成火力按钮按的次数计数。

3个一循环,分别对应大中小3档。

Dianzhenxuanzelie用于选择显示点阵中的哪列,原理通数码管一样,快速完成when0=>

q<

="

00000001"

;

when1=>

00000010"

when2=>

00000100"

when3=>

00001000"

when4=>

00010000"

when5=>

00100000"

when6=>

01000000"

when7=>

10000000"

的循环。

Dianzhenlieshuju是每列对应的数据,用于完成大中小三个字的显示。

低电平有效。

8:

led显示模块

Clk外接1hz分频,用于内部对秒的计数。

Key接受输入的时间信号,并在内部转化成秒数。

对clk的计数和key转化的总时间数比较,当计数对应1/8,2/8,3/8…7/8个key时点亮相应的led灯。

Ledbar用于输出led显示信号从00000000-11111111.clk没到达一定数字,相应的增加一位1显示。

计数完成时,led全部点亮。

Set用于清空clk计数。

Start用于将key的输入转化成秒数。

9:

蜂鸣器模块

Clk用于1hz输入。

对秒计数。

每两秒输出一个高电平。

总共输出2下。

Reset用于清空计数

Done用于接收倒计时的完成信号。

当done为高电平时开始计数。

Out1用于连接蜂鸣器。

高电平蜂鸣器响。

10总框图

三:

仿真波形及波形分析

控制器仿真

图中,CLK是输入脉冲,RESET复位,SET_T设置时间,KEY按键输入,START开始计时,COOK正在烹饪,

Key输入59分00秒。

Start按之前,ld_clk为有效,可改变数码管显示,start按下后ld-clk为0,不能改变,同时ld-edit变为低电平,控制其他模块不可改变,同时cook信号变为1,表示开始倒计时。

Reset后DATA变回0.

2数据装载仿真

LD—clk有效时,DATAOUT=DATAIN,同时load信号有效,表示倒计时接受来自LOADER的信号

3倒计时模块:

图中,LOAD为高电平时读取信号DATA的值,当COOK信号为高电平时,对DATA的值进行减法计数,并在每个时钟周期都输出减法计数器的当前值。

仿真结果与预先设定的电路功能相吻合。

4:

decoder译码电路模块

每个数字对应相应的数码管脚显示信号如0的时候数码管脚为0111111,与预期一致。

5:

驱动数码管模块

可见a轮流显示每个数码管

T则相应的数码管上显示相应的数字。

符合预期。

Key输入11秒

在start后11秒左右,ledbar全部为1,完成led功能。

且reset后ledbar清零。

在接受done信号后每两秒输出一个高电平且持续两秒。

总共响2次。

完成功能。

总体仿真

四:

源程序

分频器

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityfenpinqi1hzis

port(clk_in:

instd_logic;

clk_out:

outstd_logic);

end;

architectureaoffenpinqi1hzis

signalcnt:

integerrange0to24999999;

--用于clk计数。

(10khz为2499,100hz为249999)

signalclk_tmp:

std_logic;

begin

process(clk_in)

begin

if(clk_in'

eventandclk_in='

1'

)then

ifcnt=24999999then

cnt<

=0;

clk_tmp<

=notclk_tmp;

--输出相反电平

else

=cnt+1;

endif;

endprocess;

clk_out<

=clk_tmp;

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

entityfangdouis

port(CLK_100hz:

instd_logic;

--定义端口

key:

instd_logic_vector(3downto0);

--按键输入

keyout:

outstd_logic_vector(3downto0)--按键输出

);

endfangdou;

architectureartoffangdouis

signaltmp1:

std_logic_vector(3downto0);

signaltmp2:

PROCESS(CLK_100hz,key)

BEGIN

IF(CLK_100hz'

eventANDCLK_100hz='

0'

)THEN—消抖部分

tmp2(0)<

=tmp1(0);

tmp1(0)<

=key(0);

tmp2

(1)<

=tmp1

(1);

tmp1

(1)<

=key

(1);

tmp2

(2)<

=tmp1

(2);

tmp1

(2)<

=key

(2);

tmp2(3)<

=tmp1(3);

tmp1(3)<

=key(3);

ENDIF;

keyout(0)<

=CLK_100hzANDtmp1(0)AND(NOTtmp2(0));

keyout

(1)<

=CLK_100hzANDtmp1

(1)AND(NOTtmp2

(1));

keyout

(2)<

=CLK_100hzANDtmp1

(2)AND(NOTtmp2

(2));

keyout(3)<

=CLK_100hzANDtmp1(3)AND(NOTtmp2(3));

ENDPROCESS;

endart;

ENTITYcontrollerIS

PORT(

RESET:

INSTD_LOGIC;

--¸

复位

KEY:

INSTD_LOGIC_VECTOR(3DOWNTO0);

--键盘时间输入

START:

--开始键

CLK:

--1hz输入

DONE:

--完成信号

COOK:

OUTSTD_LOGIC;

LD_CLK:

--将key载入作为时间信号

DATA:

OUTSTD_LOGIC_VECTOR(15DOWNTO0);

--key转换后的输出

LD_DONE:

OUTSTD_LOGIC;

--完成输出

LD_EDIT:

OUTSTD_LOGIC

ENDcontroller;

ARCHITECTURErtlOFcontrollerIS

TYPESTATESIS(IDLE,SET_CLOCK,TIMER,DONE_MSG);

SIGNALNXT,CUR:

STATES;

--两个状态,当前和下一个

SIGNALDATATMP:

STD_LOGIC_VECTOR(15DOWNTO0);

SIGNALEDIT:

STD_LOGIC;

--signalstartn:

std_logic:

='

BEGIN

PROCESS(CLK,RESET)--时钟和复位进程

IFRESET='

THEN----复位时将IDLE(显示0000)赋予当前状态

CUR<

=IDLE;

ELSIFCLK'

EVENTANDCLK='

THEN

=NXT;

--如果不是,遇到上边沿则自动跳转下一状态

ENDPROCESS;

PROCESS(RESET,KEY)--复位和输入的进程

BEGIN--可以让输入4位数字显示时间

IFRESET='

THEN--复位时不论任何状态数码管都将显示0000

DATATMP<

=(others=>

'

);

ELSE

IFKEY(3)'

EVENTANDKEY(3)='

THEN--设置分的十位

IFDATATMP(15DOWNTO12)="

0101"

THEN--5自动跳转到0

DATATMP(15DOWNTO12)<

="

0000"

=DATATMP(15DOWNTO12)+1;

--否则自动加1

IFKEY

(2)'

EVENTANDKEY

(2)='

THEN--设置分的个位

IFDATATMP(11DOWNTO8)="

1001"

THEN--9自动跳转到0

DATATMP(11DOWNTO8)<

=DATATMP(11DOWNTO8)+1;

IFKEY

(1)'

EVENTANDKEY

(1)='

THEN--设置秒的十位

IFDATATMP(7DOWNTO4)="

DATATMP(7DOWNTO4)<

=DATATMP(7DOWNTO4)+1;

IFKEY(0)'

EVENTANDKEY(0)='

THEN--设置秒的个位

IFDATATMP(3DOWNTO0)="

DATATMP(3DOWNTO0)<

=DATATMP(3DOWNTO0)+1;

DATA<

=DATATMP;

PROCESS(START,RESET)--É

è

Ö

Ã

Ê

±

¼

ä

º

Í

¸

´

Î

»

½

ø

³

Ì

THEN--将edit置1

EDIT<

='

ELSIFSTART'

EVENTANDSTART='

THEN--如何start按下将edit置0

PROCESS(CLK,CUR,EDIT,DONE)IS

BEGIN

NXT<

--将IDLE载入NXT

--LD_POWER<

LD_DONE<

LD_CLK<

COOK<

CASECURIS

WHENSET_CLOCK=>

--烹调时间测试状态

WHENDONE_MSG=>

--完成信息显示状态

WHENIDLE=>

--初始状态定义

IFEDIT='

THEN--设置计时模式

=SET_CLOCK;

ELSIFDONE='

THEN

=TIMER;

WHENTIMER=>

IFDONE='

THEN--设置计时完成

=DONE_MSG;

cook<

--WHENOTHERS=>

NULL;

ENDCASE;

PROCESS(EDIT)IS

LD_EDIT<

=EDIT;

ENDrtl;

数据装载模块

ENTITYloaderIS

DATAIN:

INSTD_LOGIC_VECTOR(15DOWNTO0);

--输入16位数据

LD_TEST:

DATAOUT:

--输出16位数据

LOAD:

OUTSTD_LOGIC--选择状态

ENDloader;

ARCHITECTURErtlOFloaderIS

PROCESS(DATAIN,LD_TEST,LD_CLK,LD_DONE)

CONSTANTALLS:

STD_LOGIC_VECTOR(15DOWNTO0)--测试信息

:

1000100010001000"

--显示8888

CONSTANTDONE:

STD_LOGIC_VECTOR(15DOWNTO0)--烹调完成信息

1010101111001101"

VARIABLETEMP:

STD_LOGIC_VECTOR(2DOWNTO0);

LOAD<

--三选一状态

--中间变量定义

CASETEMPIS

WHEN"

010"

=>

--烹调完成

DATAOUT<

=DONE;

001"

=DATAIN;

WHENOTHERS=>

十进制计数器

ENTITYcnt10IS

LOAD,CLR:

--CLR:

清除数据

EN:

--信号使能

INSTD_LOGIC_VECTOR(3DOWNTO0);

--输入的4位数据

Q:

OUTSTD_LOGIC_VECTOR(3DOWNTO0);

--输出的4位数据

CARRY_OUT:

OUTSTD_LOGIC--数据装载

ENDcnt10;

ARCHITECTURErtlOFcnt10IS

SIGNALTMP:

STD_LOGIC_VECTOR(3DOWNTO0);

--链接输入输出

BEGIN--数据的信号

PROCESS(CLK,LOAD,CLR,EN)

IFCLR='

THEN--当CLR高电平,数据变为0000

TMP<

ELSIFLOAD='

THEN--否则装载输入的数据

THEN--上升沿时,执行10进制减法

IFEN='

THEN

IFTMP="

THEN--0跳转到9

ELSE--自动减1

=TMP-'

THEN

CARRY_OUT<

--COOK<

=CARRY_OUT

Q<

=TMP;

--六进制减法计数器

ENTITYcnt6IS

ENDcnt6;

ARCHITECTURErtlOFcnt6IS

PR

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

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2