微波炉控制器设计.docx
定时器集成电路的设计一、根本功能1、复位开关:reset2、启动开关:start_cook3、烹调时间设置:setjime4、烹调时间显示:min;sec5、七段码测试:test6、启动输出:cook二、信号描述T、CLK:外部时钟。std_logic;2、 RESET:复位信号,“1有效。StLbgic;3、 TEST:测试信号"1”有效。StdJogic;'4、SETTIME:时间设置"1"有效。std_logic;5、 DATA15.0:4*4BCD数码设置(59分59秒)std_logic_vector(15.0);6、 STRTCOOK:烹调开始“1”有效。StdJogic;1、COOk:烹调进行信号,接继电器“1有效。StdJogic;2、min_msb:3、minsb:4、sec_msb:5、sejlsb:std_logic_vector(1to7);std_logic_vector(1to7);std_logic_vector(1to7);std_logic_vector(1to7);三、设计分析1、控制状态机:工作状态状态转换。2、数据装入电路:根据控制信号选择定时时间、测试数据或完成信号的装入。3、定时器电路:负责完成烹调过程中的时间递减计数和数据译码供应七段数码显示,同时还可以提供烹调完成时间的状态信号供控制状态机产生完成信号。microwave_timer四、模块设计CL. KDONE TE STSE TeTXMERE SE TTfRT.COOKCUK一COOKDONECOOKTE STLORD.8888TLORD.8888SET.TXMEI.OAD_CI_KTL.OAD.CL.KRE SE TL.OAD_DONE-XLOAD_DONESTaT一CoUZTROLSTRRTeOOOK1、控制状态机设计输入输出信号ENTITYstate_countrolISPORT(elk,done,resetJest,set_time,start_cook:INstd_logic;cook,load_8888,load_clk,load_done:OUTstd_logic);END;根据输入信号和自身当时的状态完成状态转换和输出相应的信号。Cook:指示烹调进行中,同时提示计时器减数。load_8888:指示LoADER装入完成测试数据。load_clk:指示LoADER装入设置烹调时间数据。load.done:指示LoADER装入完成信息数据。 状态分析idle:复位状态。IamPjeSt:数码管测试状态。Sejclock:烹调时间设置状态。Timer:减数定时状态。done_msg:完成信息显示状态。 程序设计libraryIEEE;useIEEE.std_logic_1164.aIl;ENTITYstate_countrolISPORT(elk,done,reset,test,set_time,start_cook:INstd_logic;cook,load_8888,load_clk,load_done:OUTstd_logic);END;ARCHITECTUREaOFstate_countrolISTYPESTATE_TYPEIS(idle,lamp_test,set_clock,timer,done_msg);SIGNALnext_state,current_state:STATE_TYPE;BEGINPROCESS(elk,reset)BEGINIFreset=TTHENcurrent_state<=idle;ELSIF(clk'EVENTANDelk=')THENcurrent_state<=next_state;endif;endPROCESS;PROCESS(current_state,set_time,start_cook,test,done)beginnext_state<=idle;load_8888<=,0'load-clk<-0"load-done<='0,;cook<='0'CASEcurrent_stateISWHENlamp_test=>load_8888<="1'next-state<=idle;WHENset_clock=>load_clk<-1,;next-state<=idle;WHENdone_msg=>load_done<='1'next_state<=idle;WHENidle=>iftest='thennext_state<=lamp_test;load_8888<='elsifset_time-thennext_state<=set_clock;load-clk<='elsifstart-cook='1'anddone='0'thennext_state<=timer;cook<-;endif;WHENtimer=>ifdone-thennext_state<=done_msg;load-done<='elsenext_state<=timer;cook<='endif;ENDCASE;ENDPROCESS;ENDa;2、数据装入电路设计 输入输出信号PORT(load_8888,load_clk,load_done:INStdJogic;data:INstdOgiJVeCtOr(15downtoO);load:OUTstd_logic;load_val:OUTstd_logic_vector(15downto0);END;数据装入电路根据输入信号的描述是组合逻辑电路,类似多路选择器。数据装入和输出均为BCD编码。1.OADERLOAD.8888 XLOAD.8888LOADmCLK >L.OAD.CL.KLOADX LORDLORDsDONELORDmDOHELORD.VAUX5. . OJ -"KL,ORDmVRLM TRC IS . . ODATAXS.OJIoaCL8888:"1”时,输出测试数据。load_clk:输出设置烹调时间数据。load_done:T输出完成信息数据。load:指示TlMER处于数据装入状态并装入有效数据。程序设计1.ibraryIEEE;uselEEE.stdOgic164.all;useIEEE.std_logic_arith.all;ENTITYloaderISPORT(load_8888,load_clk,load_done:INstd_logic;data:INstdOgijVeCtOr(15downto0);load:OUTstdOgic;load_val:OUTstdOgijVeCtOr(15downto0);END;ARCHITECTUREaOFloaderISBEGINPROCESS(data,load_8888,load_clk,load_done)variabletemp:std_logic_vector(2downto0);BEGINload<=IoaCL8888orload_doneorload_clk;temp:=load_8888&Ioad_done&load_clk;CASEtempISWHEN"100',=>load_val<=alL8;WHEN"010"=>load_val<=done;WHEN"OO,=>Ioad_val<=data;WHENothers=>null;ENDCASE;ENDPROCESS;ENDa;3、定时电路设计 输入输出信号ENTITYtimerISPORT(clk:INstdOgic;data:INstd_logic_vector(15downtoO);down:INstd_logic;load:INstd_logic;done:outstd_logic;min_msb:outstd_logic_vector(1to7);min_lsb:outstd_logic_vector(1to7);sec_msb:outstd_Iogic_vector(1to7);sec_lsb:outstd_Iogic_vector(1to7);END;定时电路根据输入信号的描述是时序逻辑电路,主要由计数器构成。设计方法采用例化设计法。电路具有装入功能、逆计数功能及数据译码功能。1.oad:ii,f时,完成装入功能。down:“1"时,执行逆计数功能。Done:表不宾调完成。min_msbminSbsec_msbsec_lsb:用于驱动七段数码管显示。注意:(1) 需要4个计数器(COImter4),每个计数器宽度为4。(2) 分、秒在个位“10”进制,在十位上“6进制。如“59分:59秒。timer程序设计1.ibraryIEEE;useIEEE.std_logic_1164.aIl;useIEEE.std_logic_arith.all;useIEEE.std_logic_unsigned.aIl;ENTITYtimerISPORT(clk:INstdOgic;data:INstd_logic_vector(15downtoO);down:INstd_logic;load:INstd_logic;done:outstd_logic;min_msb:outstd_logic_vector(1to7);min_lsb:outstd_logic_vector(1to7);sec_msb:outstd_logic_vector(1to7);sec_lsb:outstd_Iogic_vector(1to7);END;ARCHITECTUREaaOFtimerIScomponentcounter4PORT(clk:INstdogic;cnt_f_5:INStdJogic;data_in:INstd_logic_vector(3downto0);down:INStdJogic;load:INstd_logic;zero:OUTstdOgic;segs:OUTstd_logic_vector(1to7);endcomponent;signalzer,zerl,zer2,zer3:StdJogic;signaldownO,downl,down2,down3:std_logic;signaldata,data1,data2,data3:std_logic_vector(3downtoO);signalis_five,is_nine:std_logic;beginis-five<='1,;is-nine<='O'data3<=data(15downto12);data2<=data(11downto8);datal<=data(7downto4);dat