微波炉控制器 2Word文档下载推荐.docx

上传人:b****6 文档编号:19054818 上传时间:2023-01-03 格式:DOCX 页数:14 大小:120.27KB
下载 相关 举报
微波炉控制器 2Word文档下载推荐.docx_第1页
第1页 / 共14页
微波炉控制器 2Word文档下载推荐.docx_第2页
第2页 / 共14页
微波炉控制器 2Word文档下载推荐.docx_第3页
第3页 / 共14页
微波炉控制器 2Word文档下载推荐.docx_第4页
第4页 / 共14页
微波炉控制器 2Word文档下载推荐.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

微波炉控制器 2Word文档下载推荐.docx

《微波炉控制器 2Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《微波炉控制器 2Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。

微波炉控制器 2Word文档下载推荐.docx

4.1分频模块设计

分频模块主要利用2Khz的时钟信号进行分频。

得到1s的clock时钟信号,用于计数模块的时钟信号。

 

分频程序端口图如下:

4.2时间设置模块设计

时间设定模块主要用于对时间设定初始值而用,其中设有clk和clock两时钟信号,分别用于外接按钮信号和减计数。

设定时间采用四个按钮控制,sec1、sec10、min1、min10分别为一秒,十秒,一分,十分的控制信号。

而信号tSec1、tSec10、tMin1、tMin10为传递信号,传递给显示模块。

时间设置模块端口图:

clk信号用于检测按钮的状态,当有按钮按下时,则相应的时间信号加一。

但sec1、min1、min10最大为9,累加至9后,再次按下按钮累加则置0。

sec10为十秒位所以最大为5,再次按下累加则置零。

4.3减计数模块设计

当检测到start按钮按下时则启动减计数程序开始减计数。

减计数模块端口图:

(1)开始减计数后,判断,秒位是否为"

0000"

,不为零则依据clock时钟开始递减。

为零则置位借位判断位borrow,向十秒为借位。

(2)当十秒为不为零时,如果borrow位为1则减一后清零借位信号borrow,置位一秒位为"

1001"

即为9。

如果十秒位为零borrow为1,则向一分位借位。

(3)当一分不为零,如果borrow信号为1则减一清零借位信号borrow,置位十秒为"

0101"

即为5,置位一秒位为"

1001"

如果一分位为零borrow为1,则向十分位借位。

(4)当十分位不为零,如果borrow位为1则减一后清零借位信号borrow,置位一分位和一秒位为"

即为9,置位十秒位为"

为零则减计数完毕。

置位tSec1、tSec10、tMin1、tMin10为"

1111"

结束减计数程序。

4.4显示译码模块

显示译码模块采用动态扫描位选输出数据,不需对四个数码管都进行绑定。

同时负责test信号的处理。

当test按钮按下时,不再接收进程间传递信号tSec1、tSec10、tMin1、tMin10的数据,直接给数码管送段码显示"

1111111"

显示译码模块端口图:

显示译码负责对0-9的数字进行编码编码表如下:

还需对完成信号"

CDEF"

进行编码:

C为"

0111001"

;

D为"

0111111"

E为"

1111001"

F为"

1110001"

显示译码模块的设计,由于加热完毕需要显示为"

所以采用了对每一位数码管单独设计译码模块。

检测到"

时,各位显示对应的字符。

还需要注意对其他状态的处理,每个数码管只需要显示0-9和一个"

状态,还需对其他状态置零处理。

5各模块的时序仿真图

5.1分频时序仿真:

软件仿真采用的时钟周期为1us,所以分频后得到的时间为2ms。

5.2时间初始化时序图仿真

其中t0,t1,t2,t3为输出显示信号,为方便观察tSec1,tSec10,tMin1,tMin10的数据,加入的测试信号

5.3减计数时序仿真:

5.4动态扫描仿真:

5.5软件仿真

其中t0,t1,t2,t3为输出显示信号,为方便观察tSec1,tSec10,tMin1,tMin10的数据,加入的测试信号

5.6程序和代码

Libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitymicrowaveis

port(

clk,start,reset,test:

instd_logic;

min10,min1,sec10,sec1:

--为设定时间的10分钟位1分钟位10秒钟位

light:

outstd_logic;

--启动输出显示灯

selectLed:

outstd_logic_vector(2downto0);

--数码管位选控制信号

led:

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

);

endmicrowave;

architecturecontrollerofmicrowaveis

signaltMin10,tMin1,tSec10,tSec1:

std_logic_vector(3downto0);

--最大设定时间为99分59秒

signalclock:

std_logic;

begin

setClock:

process(clk,reset)

---------------分频模块-----------------

variablesetFreq:

integerrange2002downto0;

--设置选定频begin

ifreset='

1'

then

clock<

='

0'

setFreq:

=0;

elsifclk'

eventandclk='

=setFreq+1;

ifsetFreq=2000then

setFreq:

=0;

clock<

=notclock;

endif;

endif;

endprocess;

-----------显示时间处理模块-------------

setTime:

process(min10,min1,sec10,sec1,reset,test,start,clock)

variabletime0,time1,time2,time3:

--最大设定时间为99分59秒(5999s)

variabletimeTotal:

std_logic_vector(15downto0);

variableturnOn:

ifstart='

turnOn:

;

light<

elsifreset='

ifturnOn='

ifreset='

time3:

="

--复位处理

elsifmin10'

eventandmin10='

then--设置十分位时间

iftime3<

9then

time3:

=time3+1;

else

--十分位最大为9,超过置0

endif;

time2:

elsifmin1'

eventandmin1='

then--设置一分位时间

iftime2<

time2:

=time2+1;

--一分位最大为9,超过置0

time1:

elsifsec10'

eventandsec10='

then--设置十秒位时间

iftime1<

5then--十秒位最大为5

time1:

=time1+1;

else

--十秒位最大为5,超过置0

time0:

elsifsec1'

eventandsec1='

then--设置一秒位时间

iftime0<

time0:

=time0+1;

--一秒位最大为9,超过置0

elsifclock'

eventandclock='

ifturnOn='

then

timeTotal:

=time3&

time2&

time1&

time0;

--并置各个时间位

iftimeTotal<

1001100101011001"

then--在5999秒内

iftime0="

iftime1/="

then--向十秒位借位

time1:

=time1-1;

time0:

--借位后一秒位为"

elsiftime2/="

then--向一分位借位

time2:

=time2-1;

--借位后十秒位为"

elsiftime3/="

then--向十分位借位

time3:

=time3-1;

--借位后一分位和一秒位为"

elsiftime3="

endif;

elsiftimeTotal>

0then

time0:

=time0-1;

--不需要借位则直接用一秒位减一

endif;

tSec1<

=time0;

tSec10<

=time1;

tMin1<

=time2;

tMin10<

=time3;

-----------显示译码模块-------------

ledDisply:

process(tSec1,tSec10,tMin1,tMin10,clk,test,reset)

variableled0,led1,led2,led3:

std_logic_vector(6downto0);

variablecount:

std_logic_vector(2downto0);

variabletestOn:

begin

iftest='

testOn:

casetMin10is

when"

=>

led3:

0001"

0000110"

0010"

1011011"

0011"

1001111"

0100"

1100110"

1101101"

0110"

1111101"

0111"

0000111"

1000"

1101111"

--加热完毕输出'

C'

whenothers=>

--异常情况都输出'

endcase;

casetMin1is--显示译码模块

led2:

D'

casetSec10is--显示译码模块

led1:

--10秒位最大为5

E'

casetSec1is--显示译码模块

led0:

F'

whenothers=>

ifclk'

then--扫描显示

ifcount="

011"

then--只需四个数码管,count:

000"

else

count:

=count+1;

selectLed<

=count;

iftestOn='

led<

casecountis--依据位码选择对应数码管显示

when"

led<

=led0;

001"

=led1;

010"

=led2;

=led3;

whenothers=>

null;

endcase;

endcontroller;

6总结

这门语言更难以控制,即使实现很简单的功能,都很可能出现错误。

在处理一个个错误的过程中,也开始逐渐熟悉这门语言。

明白VHDL的相对硬件实现的便利和强大。

整个设计中,只是用了三个进程。

一个用于分频,产生1s的clock信号。

一个用于设定时间和减计数。

还有一个用于译码显示。

三个进程中通过clock信号传递时钟信号,通过tSec1、tSec10tMin1、tMin10传递数码管各位的数值。

随这科学技术的不断发展,EDA已经成为硬件设计的重要部分。

实习中也逐渐认可这一点。

学好这一门课必将为以后的发展打下很好的基础。

两周实习,的确比在上课所学到的多得多。

7参考文献

1.潘松,黄继业.EDA技术与VHDL.北京:

清华大学出版社,2005

2.赵全利,秦春.EDA技术及应用教程.机械工业出版社,2012

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

当前位置:首页 > 外语学习 > 英语学习

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

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