您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 综合/其它 > Verilog-HDL家用空调温度控制器设计
数字系统课程设计设计报告设计题目:家用空调温度控制器班级:电技081姓名:翟建峰学号:3080422031日期:2010-12-31一设计题目的要求:家用空调温度控制器的功能为:1、室内温度可由按键设置,温度的设置范围为20度至39度。2、有加热和制冷两种工作模式。当空调工作在加热模式时,如果室温低于设定温度,空调加热,反之,不加热;当空调工作于制冷模式时,如果室温高于设定温度,空调制冷,反之空调不制冷。3、对室内温度用两位数码管进行实时显示。二设计方案及其工作原理:总的设计框图如下:本电路由控制核心cpu、按键、4位锁存器、数码管7位译码器电路组成。cpu:负责数据接收;室温和设定温度的比较;工作模式选择;显示数据的输出;加热制冷信号的控制;报警信号的输出等。按键:负责设定标准温度,设置温度的升高与降低。锁存器:将cpu输出的显示信号锁存,防止干扰,将信号送给译码器。译码器:将BCD码译成数码管显示用的高低电平。工作原理在reset信号作用下,设定温度寄存器赋初值,初值为26度,通过add(温度升)和down(温度减)来步进调整设定温度(步进为一)。按键(key)模块通过seta和setb输出端口将设定温度传给cpu。cpu接收到设定温度后将其与由温度传感器传来的室温xy比较,将比较结果标志存在寄存器(flag)中。读取用户工作模式(mod=1时为加热,mod=0时为制冷)。在加热模式状态下,根据flag的值给出加热控制寄存器heat赋值;在制冷模式状态下,根据flag的值给制冷状态寄存器cool赋值。cpu还将设置温度与设置温度范围比较,将比较结果标志存在报警寄存器flag_high(超上界寄存器)和flag_low(超下界寄存器)。cpu还将室温和设定温度分别存放在室温寄存器和设定温度寄存器中。最后,cpu将寄存器的值通过各端口输出。各锁存器将数据锁存后在时钟信号的作用下将锁存信号输出给译码器,译码器再把BCD码转换成数码管显示的高低电平,数码管显示出室温和设置温度。Led灯接到有效信号后点亮,指示设定温度是否越界(led_settoohigh表示设置温度过高;led_settoolow表示设置温度过低)。三各单元电路设计:1、cpu设计cpu框图如下:disp_outx:室温十位输出显示disp_outy:室温个位输出显示disp_outa:设置十位输出显示disp_outb:设置个位输出显示cool:制冷输出信号heat:加热输出信号led_settoohigh:设定温度超越上限报警led_settoolow:设定温度超越下限报警x:室温十位输入y:室温个位输入a:设定温度十位输入b:设定温度个位输入mod:用户加热制冷模式选择clk:时钟脉冲flag:室温和设置温度比较标志位寄存器flag_high:设置温度超越上界标志位寄存器flag_low:设置温度超越下界标志位寄存器2、按键(key)设计按键(key)框图如下:seta输出温度设定十位setb输出温度设定个位add设定温度加一down设定温度减一clk时钟信号reset复位信号(用于寄存器赋初值)3、锁存器设计锁存器框图如下:data:锁存数据输入qout:锁存数据输出clk:时钟信号4、译码器设计译码器框图如下:D4:译码器BCD码输入信号a,b,c,d,e,f,g:译码器输出信号(输入给数码管)四模拟仿真验证及结果分析:因整体仿真验证结果不易说明效果,故将各模块仿真结果予以分析。1、cpu仿真结果cpu仿真结果如图:分析:前两个周期,用户模式为加热模式(mod=1)室温设定温度,加热(heat=1);5~6周期用户模式为制冷(mod=0),室温设定温度,制冷(cool=1);第7~9周期设置温度20度,超越下界报警(led_settoolow=1);第10~12周期,设置温度39度,超越上界报警(led_settoohigh=1)。2、键盘仿真结果键盘仿真结果如图:分析:前2周期,reset=1,设置温度被设为26度,第5~10周期,add=1,设置温度每周期递增一;第12~20周期down=1,设置温度每周期递减一,21~27周期,没有增加和减少信号,温度稳定在24度。3、锁存器仿真结果锁存器仿真结果如图:分析:如图,在每个时钟的上升沿将data中数据从qout输出。4、译码器仿真结果译码器仿真结果如图:分析:D4输入8时,abcdefg为:1111111,D4输入为7时,abcdefg为:1110000,符合数码管显示规则。下图为整个顶层结果仿真图(部分),仅供参考:五总结体会:在这次课程设计的过程中,遇到了很多的问题;但也学习到了很多平时上课不曾接触到的东西、不懂的知识。了解到了具体的大工程是如何生成的、进一步掌握并熟悉了verilogHDL语言,同时也学会了同学之间相互的团结和协作。通过本次课程设计,我懂得一个工程,必须先要有一个总体的方案,心中要明确设计的目的,如何才能达到这个目的;然后划分模块,将复杂抽象的问题具体简单化;接着逐个设计每个模块,调试,分析,再调试,直到完成各个模块的要求为止;最终,将各个模块整合起来,完成整体模块,完成工程设计。可谓受益匪浅……。附录:程序源代码/*温度控制cpu*///disp_outx室温十位输出显示//disp_outy室温个位输出显示//disp_outa设置十位输出显示//disp_outb设置个位输出显示//cool制冷输出信号//heat加热输出信号//led_settoohigh设定温度超越上限报警//led_settoolow设定温度超越下限报警//x室温十位输入//y室温个位输入//a设定温度十位输入//b设定温度个位输入//mod用户加热制冷模式选择//clk时钟脉冲//flag室温和设置温度比较标志位寄存器//flag_high设置温度超越上界标志位寄存器//flag_low设置温度超越下界标志位寄存器modulecpu(disp_outx,disp_outy,disp_outa,disp_outb,cool,heat,led_settoohigh,led_settoolow,x,y,a,b,mod,clk);output[3:0]disp_outx,disp_outy,disp_outa,disp_outb;outputcool,heat,led_settoohigh,led_settoolow;input[3:0]x,y,a,b;inputmod,clk;reg[3:0]disp_outx,disp_outy,disp_outa,disp_outb;reg[1:0]flag;regflag_high,flag_low,cool,heat,led_settoohigh,led_settoolow;always@(posedgeclk)beginbegin/*设定温度上下界标志位判断*/if(a=4)beginflag_high=1;flag_low=0;//flag_high=1设定温度超出上界endelseif(a2)beginflag_low=1;//flag_low=1设定温度超出下界flag_high=0;endelsebeginflag_low=0;flag_high=0;//flag_low=0flag_high=0设定温度在正常范围内endendbegin/*室温与设置温度比较标志位判断*/if(xa)flag=2'b01;//flag=01室温高于设定温度elseif(xa)//flag=10室温低于设定温度flag=2'b10;elsebeginif(yb)flag=2'b01;elseif(yb)flag=2'b10;elseflag=2'b11;//flag=11室温等于设定温度endendbegin/*制冷、加热输出寄存器赋值*/if(mod)begin//mod=1加热模式下if((flag==2'b01)||(flag==2'b11))beginheat=0;//停止加热cool=0;endelseif(flag==2'b10)begin//加热heat=1;cool=0;endendelse//mod=0制冷模式下beginif((flag==2'b10)||(flag==2'b11))begincool=0;//停止制冷heat=0;endelseif(flag==2'b01)begincool=1;//制冷heat=0;endendendbegin/*显示、报警输出寄存器赋值*/if(!flag_high&&!flag_low)//室温和设定温度显示寄存器赋值begindisp_outx=x;disp_outy=y;disp_outa=a;disp_outb=b;led_settoohigh=0;//led_settoohigh=0led_settoolow=0设定温度在正常范围led_settoolow=0;endelseif(flag_high&&!flag_low)//设定温度超越上界报警寄存器赋值beginled_settoohigh=1;//led_settoohigh=1设定温度超越上界led_settoolow=0;endelseif(!flag_high&&flag_low)//设定温度超越下界报警寄存器赋值beginled_settoohigh=0;led_settoolow=1;//led_settoolow=1设定温度超越下界endendendendmodule/*按键输入设定温度*///seta输出温度设定十位//setb输出温度设定个位//add设定温度加一//down设定温度减一//clk时钟信号//reset复位信号(用于寄存器赋初值)modulekey(seta,setb,add,down,clk,reset);output[3:0]seta,setb;inputadd,down,clk,reset;reg[3:0]seta,setb;always@(posedgeclkorposedgereset)beginif(reset)/*寄存器赋初值*/beginseta=2;setb=6;endif(add)/*寄存器加一*/beginif(setb==9)beginsetb=0;seta=seta+1;endelsesetb=setb+1;endelseif(down)/*寄存器减一*/beginif(setb==0)beginsetb=9;seta=seta-1;endelsesetb=setb-1;endendendmodule/*4位锁存器*///qout输出信号//data输入信号//clk时钟信号modulesuocunqi(qout,data,clk);output[3:0]qout;input[3:0]data;inputclk;reg[3:0]qout;always@(clkordata)beginif(clk)qout=data;//在时钟信号作用下输出信号endendmodule/*7位数码管译码器*///a,b,c,d,e,f,g,数据输出//D4输出数据moduleyimaqi(a,b,c,d,e,f,g,D4);outputa,b,c,d,e,f,g;input[3:0]D4;rega,b,c,d,e,f,g;always@(D4)begincase(D4)4'd0:{a,b,c,d,e,f,g}=7'b1111110;4'd1:{a,b,c,d,e,f,g}=7'b0110000;4'd2:{a,b,c,d,e,f,g}=7'b1101101;4'd3:{a,b,c,d,e,f,g}=7'b1111001;4'd4:{a,b,c,d,e,f,g}=7'b0110011;4'd5:{a,b,c,d,e,f,g}=7'b1011011;4'd6:{a,b,c,d,e,f,g}=7'b1011111;4'd7:{a,b,c,d,e,f,g}=7'b1110000;
本文标题:Verilog-HDL家用空调温度控制器设计
链接地址:https://www.777doc.com/doc-7215896 .html