一、绪论随着社会经济的飞速发展和人民生活水平的提高,微波炉开始进入越来越多的家庭,它给人们的生活带来了极大的方便。
它省时、省电、方便和卫生,具有很好的实用性能和极大的市场潜力,我们通过对VHDL语言的学习,希望通过自己所学的知识设计一种新型的微波炉控制系统,既是对自己所学知识的一种检验,也是将知识与实际结合起来,是将知识转化为生产力的第一步。
二、课题的内容和要求本课题是基于FPGA的微波炉控制器设计,即设计一个具备定时、信息显示和音响效应提示功能的微波炉控制器,实现一些功能:该微波炉控制器能够在任意时刻取消当前的工作,复位为初始状态。
可以根据需要设置烹调时间的长短,并在LCD上动态显示设置时间的过程,系统最长的烹调时间为59分59秒;开始烹调后,能够显示剩余的时间的多少。
该微波炉具有三档加热功能,设置为COOK、BAKE和THAW,分别表示加热、烘烤,、解冻,LCD上显示当前的工作状态,同时通过LED灯亮度不同(即闪烁的频率不同)表示不同工作状态所需的火力不同。
音响效应提示直接外接一个蜂鸣器,同时用一个LED灯显示。
三、系统总体设计系统的工作流程微波炉控制器系统的工作流程为:上电后,系统首先处于一种复位状态,其各个模块均处于初始状态。
此时,LCD显示器上显示的是:00:00 WAIT,按下SETTIME或者SETCOOK键,则进入相关功能的设置,如果先是SETTIME,则可以用MADD,MSUB,SADD,SSUB这四个键来实现对分和秒的加减,同时LCD 上显示当前设定的时间,然后按SETCOOK键,再可以选择COOK\BAKE\THAW 这三个键中的一个,即选择想要的工作模式,同时LCD上显示当前选用的工作模式,LED1/LED2/LED3对应闪烁,然后拨下开关7,即START,工作开始,LCD 上动态显示剩余时间,当时间减到零以后,蜂鸣器响同时LED7亮,表示整个工作过程结束。
根据系统工作流程,绘制主程序流程图,如下:微波炉控制器设计流图NY NY开始系统复位 数据装载选择工作状态设定时间数据装载完成START 键闭合否运行 烹饪倒计时时间到否 结束微波炉设计状态图S0:复位后的状态;S1:等待按键;S2:设置定时时间;S3:设置工作模式;S4:延时;S1S2S5S3S4S0SETCOOK=1SETTIME=1SETTIME=1 SETCOOK=1 START=1START=1S5:微波炉开始工作,同时减计数。
系统详细设计输入模块设计输入模块采用4*4矩阵键盘作为输入设备,实现数据输入控制,首先将键盘转换为按键,相应程序为:--File name PADTOKEY-- 目的:将键盘的按键转为16个按键信号--编程张浩2014年6月--配合库FPGA Peripherals.Intlib中的KEYPADA模块使用--CPIN 时钟脉冲输入按10MHz设计 ;复位RLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;entity PADTOKEY isport (CPIN,R,VALIDKEY :IN STD_LOGIC;KEY :IN STD_LOGIC_VECTOR(3 DOWNTO 0);KEYOUT: OUT STD_LOGIC_VECTOR(15 DOWNTO 0);CLK_1MHZ,RST: OUT STD_LOGIC);end entity ;architecture JGT of PADTOKEY isSIGNAL CTCP: INTEGER RANGE 0 TO 5;SIGNAL CPO :STD_LOGIC;SIGNAL CTCPO :INTEGER RANGE 0 TO 4999;TYPE STATES IS (S0,S1,S2);SIGNAL S: STATES;beginPROCESS(CPIN)BEGINIF CPIN='1' AND CPIN 'EVENT THENIF CTCP=5 THENCPO <= NOT CPO; CTCP<=0;ELSECTCP<=CTCP+1;END IF;END IF;END PROCESS;PROCESS(CPO,R)BEGINCLK_1MHZ<=CPO;IF R='1' THENRST<='0';S<=S0;CTCPO<=0; KEYOUT<="0000000000000000";ELSIF CPO='1' AND CPO 'EVENT THENIF CTCPO /= 4999 THENCTCPO<=CTCPO+1;ELSECTCPO<=0;CASE S ISWHEN S0 =>RST<='0';IF VALIDKEY='1' THENS<=S1;CASE KEY ISWHEN"0000"=>KEYOUT<="0000000000000001";WHEN"0001"=>KEYOUT<="0000000000000010";WHEN"0010"=>KEYOUT<="0000000000000100";WHEN"0011"=>KEYOUT<="0000000000001000";WHEN"0100"=>KEYOUT<="0000000000010000";WHEN"0101"=>KEYOUT<="0000000000100000";WHEN"0110"=>KEYOUT<="0000000001000000";WHEN"0111"=>KEYOUT<="0000000010000000";WHEN"1000"=>KEYOUT<="0000000100000000";WHEN"1001"=>KEYOUT<="0000001000000000";WHEN"1010"=>KEYOUT<="0000010000000000";WHEN"1011"=>KEYOUT<="0000100000000000";WHEN"1100"=>KEYOUT<="0001000000000000";WHEN"1101"=>KEYOUT<="0010000000000000";WHEN"1110"=>KEYOUT<="0100000000000000";WHEN"1111"=>KEYOUT<="1000000000000000";WHEN OTHERS=>NULL;END CASE;ELSES<=S0;KEYOUT<="0000000000000000";END IF;WHEN S1=>RST<='1';S<=S2;WHEN S2=>RST<='0';S<=S0;WHEN OTHERS=> NULL;END CASE;END IF;END IF;END PROCESS;end architecture JGT;生成的电路符号如下图:数据装载模块的设计(键盘译码)将键盘转换为按键以后,需要根据需要重新定义键盘,即按下哪个键表示什么含义,我们重新设计键盘后,模拟图如下:MADD MSUB R SETTIMESADD SSUB SETCOOK COOKBAKE THAW相应程序为:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY ZZQ ISPORT ( KEYOUT:IN STD_LOGIC_VECTOR(15 DOWNTO 0);CPIN,R:IN STD_LOGIC;RST,SET_TIME,MADD,MSUB,SADD,SSUB,SET_COOK,COOK,BAKE,THAW:OUT STD_LOGIC);END ENTITY ;ARCHITECTURE BB OF ZZQ ISBEGINPROCESS(CPIN,R)BEGINIF R='1' THENRST<='0';SET_TIME<='0';MADD<='0';MSUB<='0';SADD<='0';SSUB<='0';SET_COOK<='0';COOK<='0';BAKE<='0';THAW<='0';ELSIF CPIN='1' AND CPIN 'EVENT THENCASE KEYOUT ISWHEN"0000000000000001"=>MADD<='1';WHEN"0000000000000010"=>SADD<='1';WHEN"0000000000000100"=>RST<='1';WHEN"0000000000001000"=>SET_TIME<='1';WHEN"0000000000010000"=>MSUB<='1';WHEN"0000000000100000"=>SSUB<='1';WHEN"0000000001000000"=>SET_COOK<='1';WHEN"0000000010000000"=>COOK<='1';WHEN"0000000100000000"=>BAKE<='1';WHEN"0000001000000000"=>THAW<='1';WHEN"0000000000000000"=>SET_TIME<='0';MADD<='0';MSUB<='0';SADD<='0';SSUB<='0';SET_COOK<='0';COOK<='0';BAKE<='0';THAW<='0';WHEN OTHERS=>NULL;END CASE;END IF;END PROCESS;END BB;生成电路符号为:控制模块的设计控制模块是整个微波炉控制系统的核心。