基于vhdl语言的智能空调控制器的设计报告.docx

上传人:b****6 文档编号:7393380 上传时间:2023-05-11 格式:DOCX 页数:13 大小:591.78KB
下载 相关 举报
基于vhdl语言的智能空调控制器的设计报告.docx_第1页
第1页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第2页
第2页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第3页
第3页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第4页
第4页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第5页
第5页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第6页
第6页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第7页
第7页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第8页
第8页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第9页
第9页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第10页
第10页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第11页
第11页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第12页
第12页 / 共13页
基于vhdl语言的智能空调控制器的设计报告.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于vhdl语言的智能空调控制器的设计报告.docx

《基于vhdl语言的智能空调控制器的设计报告.docx》由会员分享,可在线阅读,更多相关《基于vhdl语言的智能空调控制器的设计报告.docx(13页珍藏版)》请在冰点文库上搜索。

基于vhdl语言的智能空调控制器的设计报告.docx

基于vhdl语言的智能空调控制器的设计报告

 

数字系统设计与硬件描述语言

期末考试作业

 

题目:

智能空调控制器的设计

学院:

电子信息工程学院

专业:

电子信息工程

学号:

3012204273

姓名:

王欢

 

2015-01-09

一、选题设计描述

1.功能介绍

对于这次的期末课程作业,我选择的是智能空调控制器的设计。

众所周知,日常使用的空调至少具有定时、控温、模式选择等基本功能。

我设计的这个智能空调主要能实现以下几种功能:

①四种模式选择:

强风、弱风、自然风、睡眠状态。

②工作时间设定:

半小时、一小时、一个半小时、两小时。

③工作温度设置:

可以自由设置温度,然后将室温与设置的温度进行比较,当室温低于设置的温度时,空调温度升高;当室温高于设置的温度时,空调温度下降;并且当室温达到设置的温度时,温度就不再变化。

2.算法简介

按照上述的几种功能介绍,我将分几个模块依次介绍:

①模式选择模块:

因为有4种模式,所以用一个4路数据选择器就可以实现。

“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;

WHEN"01"=>y<=b;

WHEN"10"=>y<=c;

WHEN"11"=>y<=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='1'

thenifge="1000"thenge:

=ge+1;jinwei<='1';

---当个位加到“1000”

即第九个时钟上升

时产生一个进位。

elsifge="1001"thenge:

="0000";---个位加到9之后返回0

jinwei<='0';

elsege:

=ge+1;

jinwei<='0';

endif;

endif;

gewei<=ge;

endprocess;

process(clk,clr,jinwei)

variableshi:

std_logic_vector(3downto0);

Begin

ifclr='1'thenshi:

="0000";

elseifclk'eventandclk='1'

thenifjinwei='1'

thenifshi="0010"thenshi:

="0000";

---十位从“0000”变成“0010”,

即经过了30个时钟脉冲,然后

返回“0000”。

同时产生一个定

时脉冲。

dingshi<='1';

elseshi:

=shi+1;dingshi<='0';

endif;

endif;

shiwei<=shi;

endif;

endif;

endprocess;

endarc;

③定时一小时,六十进制计数器:

仿真见图三

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitysixtyis

port(clk,clr:

instd_logic;

gewei,shiwei:

outstd_logic_vector(3downto0);---个位和十位

dingshi:

outstd_logic);---定时脉冲

endentity;

architecturearcofsixtyis

signaljinwei:

std_logic;---进位

begin

process(clk,clr)

variablege:

std_logic_vector(3downto0);

begin

ifclr='1'thenge:

="0000";---clr有清零作用

elsifclk'eventandclk='1'

thenifge="1000"thenge:

=ge+1;jinwei<='1';

---当个位加到“1000”

即第九个时钟产生

一个进位。

elseifge="1001"thenjinwei<='0';ge:

="0000";

---个位加到9之后返回0

elsege:

=ge+1;jinwei<='0';

endif;

endif;

endif;

gewei<=ge;

endprocess;

process(clk,clr,jinwei)

variableshi:

std_logic_vector(3downto0);

Begin

ifclr='1'thenshi:

="0000";

elsifclk'eventandclk='1'

thenifjinwei='1'thenifshi="0101"thenshi:

="0000";dingshi<='1';

---十位从“0000”变成“0101”,

即经过了60个时钟脉冲,然后

返回“0000”。

同时产生一个定

时脉冲。

elseshi:

=shi+1;dingshi<='0';

endif;endif;

elseshi:

=shi;

endif;shiwei<=shi;

endprocess;

endarc;

④温度控制,仿真见图四和图五

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

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)

begin

ifen='0'then

hs<=romeshi;hg<=romege;

elsifclk'eventandclk='1'then

ifhs&hg

ifhg<"1001"thenhg<=hg+1;

elsehg<="0000";hs<=hs+1;

endif;

elsifhs&hg>shiwei&geweithen---室温高于设置的温度,温度下降

ifhg>"0000"thenhg<=hg-1;

elsehg<="1001";hs<=hs-1;

endif;

elsehs<=shiwei;hg<=gewei;

---判断温度上升或下降到设置的温度,保持温度显示不变

endif;

endif;

shiout<=hsanden&en&en&en;geout<=hganden&en&en&en;

---输出温度

endprocess;

endbehave;

 

⑤开关控制器:

仿真见图六

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitykaiguanis

port(shuru1,shuru2,shuru3,stop:

instd_logic;

diandongji:

outstd_logic);

endentity;

architectureoneofkaiguanis

begin

process(shuru1,shuru2,stop)

begin

ifshuru1='1'orshuru2='1'orshuru3='1'thendiandongji<='1';

---三输入中只要有一个为1,那开关就打开。

elsifstop='1'thendiandongji<='0';---

endif;

endprocess;

endone;

⑥七段译码器:

仿真见图七

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entityxianshiis

port(shuzi:

instd_logic_vector(3downto0);

shuchu:

outstd_logic_vector(6downto0));

endxianshi;

architectureaofxianshiis

begin

withshuziselect

shuchu<="1111110"when"0000",

"0110000"when"0001",

"1101101"when"0010",

"1111001"when"0011",

"0110011"when"0100",

"1011011"when"0101",

"1011111"when"0110",

"1110000"when"0111",

"1111111"when"1000",

"1111011"when"1001",

"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的课上,我更容易专心致志地听讲,聚精会神地思考。

在平时的实验中,我也能切实地感受到自己的一次次进步,毕竟,实践才是检验真理的唯一标准。

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

当前位置:首页 > PPT模板 > 艺术创意

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

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