基于vhdl语言的智能空调控制器的设计报告Word文档下载推荐.docx
《基于vhdl语言的智能空调控制器的设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于vhdl语言的智能空调控制器的设计报告Word文档下载推荐.docx(13页珍藏版)》请在冰点文库上搜索。
![基于vhdl语言的智能空调控制器的设计报告Word文档下载推荐.docx](https://file1.bingdoc.com/fileroot1/2023-5/11/54369e59-81d9-4fa0-9877-cd1840fe16a7/54369e59-81d9-4fa0-9877-cd1840fe16a71.gif)
“00”、“01”、“10”、“11”分别代表“强风”、“弱风”、“自然风”、“睡眠状态”。
②时间设置模块:
半个小时即三十分钟,可以用一个三十进制的计数器来实现定时,一个小时即六十分钟,可以用一个六十进制的计数器实现,依此类推即可。
③温度设置模块:
室温与设置温度的比较需要用比较语句来实现,空调温度的增减都需要用计数器来实现,所以这是一个包含比较和计数两种功能的电路。
④开关模块:
我采用的是一个是三输入开关控制器,三个输入分别代表模式选择、时间设置、温度设置,只要其中有一个模块开始工作,那么开关就打开,空调就开始工作。
⑤显示模块:
上述几个模块都需要这个模块来进行显示。
用两个BCD-七段译码器来分别显示显示十位和个位。
就可以看出温度和时间的变化。
二、程序源代码及说明
①模式选择,四选一数据选择器:
仿真见图一
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYxuanzeIS
PORT(a,b,c,d,s1,s2:
INSTD_LOGIC;
---a,b,c,d是数据端口,
s1和s2是选择端口。
y:
OUTSTD_LOGIC);
ENDENTITYxuanze;
ARCHITECTUREoneOFxuanzeIS
SIGNALss:
STD_LOGIC_VECTOR(0TO1);
BEGINss<
=s2&
s1;
---将两个标准逻辑位类型变成一个标准逻辑矢量类型
PROCESS(ss)
BEGIN
CASEssIS---用case语句实现多路选择
WHEN"
00"
=>
y<
=a;
01"
=b;
10"
=c;
11"
=d;
WHENOTHERS=>
NULL;
ENDCASE;
ENDPROCESS;
ENDARCHITECTUREone;
②定时半小时,三十进制计数器:
仿真见图二
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitythirtyis
port(clk,clr:
instd_logic;
gewei,shiwei:
outstd_logic_vector(3downto0);
---个位和十位
dingshi:
outstd_logic);
---定时脉冲
endentity;
architecturearcofthirtyis
signaljinwei:
std_logic;
---进位
beginprocess(clk,clr)
variablege:
std_logic_vector(3downto0);
begin
ifclr='
1'
thenge:
="
0000"
;
---clr有清零作用
elsifclk'
eventandclk='
thenifge="
1000"
=ge+1;
jinwei<
='
---当个位加到“1000”
即第九个时钟上升
时产生一个进位。
elsifge="
1001"
---个位加到9之后返回0
0'
elsege:
endif;
gewei<
=ge;
endprocess;
process(clk,clr,jinwei)
variableshi:
Begin
thenshi:
elseifclk'
thenifjinwei='
thenifshi="
0010"
---十位从“0000”变成“0010”,
即经过了30个时钟脉冲,然后
返回“0000”。
同时产生一个定
时脉冲。
dingshi<
elseshi:
=shi+1;
endif;
shiwei<
=shi;
endprocess;
endarc;
③定时一小时,六十进制计数器:
仿真见图三
useieee.std_logic_1164.all;
entitysixtyis
dingshi:
---定时脉冲
architecturearcofsixtyis
---进位
begin
process(clk,clr)
---clr有清零作用
jinwei<
---当个位加到“1000”
即第九个时钟产生
一个进位。
elseifge="
thenjinwei<
ge:
---个位加到9之后返回0
gewei<
0101"
---十位从“0000”变成“0101”,
即经过了60个时钟脉冲,然后
endarc;
④温度控制,仿真见图四和图五
entitywenduis---根据室温和设定温度的比较判断温
度是上升还是降低
port(clk,en:
instd_logic;
---clk时钟en开关/使能端
shiwei,gewei,romeshi,romege:
instd_logic_vector(0to3);
---shiwei设置温度的十位;
gewei设置温度的个位;
romeshi设置室温的十位;
romege设置温度的个位。
shiout,geout:
outstd_logic_vector(0to3));
---shiout输出温度的十位geout输出温度的个位
endwendu;
architecturebehaveofwenduis
signalhs,hg:
std_logic_vector(0to3);
begin
process(clk,en,shiwei,gewei,romeshi,romege,hs,hg)
ifen='
then
hs<
=romeshi;
hg<
=romege;
elsifclk'
then
ifhs&
shiwei&
geweithen---室温低于设置的温度,温度上升
ifhg<
"
thenhg<
=hg+1;
elsehg<
=hs+1;
elsifhs&
hg>
geweithen---室温高于设置的温度,温度下降
ifhg>
=hg-1;
=hs-1;
elsehs<
=shiwei;
=gewei;
---判断温度上升或下降到设置的温度,保持温度显示不变
shiout<
=hsanden&
en&
en;
geout<
=hganden&
---输出温度
endbehave;
⑤开关控制器:
仿真见图六
entitykaiguanis
port(shuru1,shuru2,shuru3,stop:
diandongji:
architectureoneofkaiguanis
process(shuru1,shuru2,stop)
ifshuru1='
orshuru2='
orshuru3='
thendiandongji<
---三输入中只要有一个为1,那开关就打开。
elsifstop='
---
endone;
⑥七段译码器:
仿真见图七
useieee.std_logic_arith.all;
entityxianshiis
port(shuzi:
instd_logic_vector(3downto0);
shuchu:
outstd_logic_vector(6downto0));
endxianshi;
architectureaofxianshiis
withshuziselect
shuchu<
1111110"
when"
"
0110000"
0001"
1101101"
1111001"
0011"
0110011"
0100"
1011011"
1011111"
0110"
1110000"
0111"
1111111"
1111011"
0000000"
whenothers;
---将四位二进制数通过七段译码器显示出来
enda;
三、仿真结果及分析
图一
这是一个四选一数据选择器,“s2s1”的“00”、“01”、“10”、“11”分别可以选择a,b,c,d四个模式,即题目中的强风、弱风、自然风、睡眠四种状态。
图二
这是一个三十进制计数器,由仿真波形可以看到,每经过一个时钟脉冲,个位加一,每经过10个时钟脉冲,十位加一,每经过30个时钟脉冲产生一个定时脉冲,同时十位和个位都归零。
图三
这是一个六十进制计数器,由仿真波形可以看到,每经过一个时钟脉冲,个位加一,每经过10个时钟脉冲,十位加一,每经过60个时钟脉冲产生一个定时脉冲,同时十位和个位都归零。
图四
图四中,室温为30度,设置的温度为25度,所以温度下降至25度后并维持在25摄氏度。
图五
图五中,室温为10度,设置的温度为25度,室温低于设置的温度,所以温度上升,并且上升到25度后维持在25度。
图六
这相当于一个三输入或门和另一个非门相与。
三个shuru中只要有一个为1,且stop为0,则开关打开为1;
三个shuru和stop都为0时显示高组态;
其余情况则显示0。
图七
BCD-七段译码显示器,将输入的四位二制数编译成七段数码管的明暗。
4、心得体会
首先,我想分享一下我做这次期末课程设计的体会与感想。
老师给了一个大致的范围,也就是家用电器的控制器的设计。
通过观察思考,我发现各种家电虽然在我们的生活中各司其职,但是它们的控制原理却是极为相似的。
基本都包括:
不同模式选择(强洗弱洗、强风弱风......)、设定工作时间、设置工作功率的大小(高低温度、大小转速......)等等。
这些不同的功能的实现恰好用到了第三章所学的各种逻辑电路,包括组合逻辑电路,如门电路、编码器、译码器、比较器、多路选择器、加法器等;
以及时序逻辑电路,如触发器、寄存器、计数器等。
对作业有了整体的了解之后,我选择了常见的智能空调作为设计题目。
我先根据要实现的不同功能选择合适的电路,再根据电路编写程序,这样按部就班,循序渐进地完成。
在设计第一个电路4路选择器的时候就遇到了麻烦。
编译的时候一直说第一行程序错误,可是我第一行程序只是“libraryieee”而已,我又仔细检查了其他程序,完全没有问题。
这让我一开始就遭遇了瓶颈。
在进行了各种程序的调适之后,我决定用同学的电脑试试,一样的程序,一样的工程名字,然后一下子就编译成功了。
可是换回我的电脑还是不行。
我想这可能就是随机差错了吧。
最后,我重新写了代码,把输入的标准逻辑矢量类型s(0to1)变成输入两个标准逻辑位类型s1和s2,在结构中再用s=s2&
s1变回矢量类型,这样才终于编译成功了。
这几乎耗费了我一半的时间,其余的模块电路的设计几乎都很顺利,出现的错误也很容易被纠正过来。
机器往往比人要更加严格,任何一个小小的错误都逃不出它的法眼,这要求我在编写程序的时候格外认真仔细,很大程度地帮我改正了粗心大意的毛病。
对于数字系统设计与硬件描述语言这门课程,我还是受益颇深的。
相比于C++等软件语言,VHDL这种硬件语言更加简洁直观。
通过对这门课程的学习,我不仅加深了对VHDL语言的了解,而且熟练了对QUARTUS.II软件的使用。
老实讲,我个人非常喜欢张老师。
进入大学以后,很少遇到像张老师这样吐字清晰、声音洪亮,讲课富有激情的老师了。
在VHDL的课上,我更容易专心致志地听讲,聚精会神地思考。
在平时的实验中,我也能切实地感受到自己的一次次进步,毕竟,实践才是检验真理的唯一标准。