




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微波炉可编程逻辑控制系统设计资料内容仅供参考,如有不当或者侵权,请联系本人改正或者删除。目录TOC\o"2-2"\h\z\t"标题1,1"第1章概述 31.1VHDL介绍 31.2QuartusⅡ开发平台 31.3选题背景 41.4选题的技术现状 4第2章微波炉控制器的设计要求 52.1基本要求 52.2发挥部分 52.3方案设想 5第3章系统硬件的设计 73.1系统硬件的组成原理图 73.2 电源电路 73.3有源晶体 83.4数码管 83.5LED 93.6按键使用 93.7报警电路 103.88X8点阵 103.98路拨码开关输入 11第4章系统软件设计 114.1分频程序设计 114.2数码管显示设计程序设计 124.3报警提示设计程序设计 164.4门是否关紧程序设计 164.5开关按键处理程序设计 17第5章管脚分配及显示结果 185.1管脚分配图 185.2管脚分配表 195.3硬件显示结果 195.4用户使用方法 20第6章总结 21参考文献 22附录一电路原理图 23附录二微波炉控制器系统程序清单 26摘要随着社会的发展与科学的进步微波炉在人们的生活中使用非常普遍。微波炉内部的电子元件有不多,本设计只设计其中的核心部分控制器,该控制器具有系统复位、状态控制、时间设定、火力档位、烹饪计时、温度控制、显示译码和音响效应等功能,基于CPLD芯片实现。本设计完成微波炉控制器的设计与分析。以VHDL语言为开发工具,QuartusⅡ作为程序运行平台。经过设计和实验,对开发的程序进行调试运行和波形仿真测试验证,初步实现了设计目标。运用硬件描述语言VHDL,大大降低了硬件数字系统设计,使得程序设计直观简洁,设计效率高。
关键词微波炉、控制器、VHDLQuartusⅡ仿真第1章概述本文所设计的电子钟系统是运行在QuartusⅡ环境下的一个小型的数字系统。我采用了自顶向下的设计方法,应用功能强大的硬件描述语言VHDL完成系统的设计仿真。下面就本设计所用到的技术作一下简单的介绍。1.1VHDL介绍VHDL是VeryHighSpeedIntegratedCircuitHardwareDescriptionLanguage的缩写,是在ADA语言的基础上发展起来的硬件描述语言。VHDL诞生于1983年,1987年12月,VHDL被接纳为标准硬件描述语言,即IEEE1076标准。经过不断更改和改进,1993年,VHDL重新修订并增加了一些功能,即IEEE1076-93标准。当前在电子工程领域,作为IEEE的工业标准硬件描述语言,VHDL已成为事实上的通用硬件描述语言。电路设计的描述层次可分为系统级、算法级、寄存器传输级、门级和晶体管级,VHDL的建模范围能够从最抽象的系统级一直到门级,从多个层次对电路进行模拟仿真。它除了具有硬件特征的语句外,其语言形式和描述风格以及句法和一般的计算机高级语言相当类似,然而它又有同软件语言完全不同的性质。以下是一个VHDL的实例:这个程序是一个简单的2选1多路选择器的VHDL完整描述。它体现出了VHDL程序的一般结构:使用库(Use)定义区——实体(Entity)定义区——结构(Architecture)定义区。其中Use定义区描述的是这个程序使用的定义库,类似于C语言的头文件包括;Entity定义区描述的电子的外部结构,就是指元件的输入和输出接口,它用以定义一个芯片的管脚状态;Architecture定义区里面是这个程序的关键部分,包括算法,功能,硬件的行为等都是在Architecture区里面描述的。一个完整的VHDL程序是对一个功能元件从外部和内部两个方面来进行描述,由于元件本身具有层次性,因此它既能够作为完成某一功能的逻辑电路单元而独立存在,也能够作为一个部件,和其它功能元件一起构成更复杂的功能元件或数字系统,因此其单元的概念很清晰,能够灵活地应用于自顶向下的数字系统设计流程。1.2QuartusⅡ开发平台QuartusII是Altera公司的第四代可编程逻辑器件集成开发环境,提供从设计输入到器件编程的全部功能。QuartusII能够产生并识别EDIF网表文件、VHDL网表文件,为其它EDA工具提供了方便的接口;能够在QuartusII集成环境中自动运行其它EDA工具。QuartusII软件的开发流程可概括为以下几步:设计输入、设计编译、设计时序分析、设计仿真和器件编程,具有FPGA和CPLD芯片设计的所有阶段的解决方案。(1)设计输入QuartusII软件在File菜单中提供”NewProjectWizard...”向导,引导设计者完成项目的创立。当设计者需要向项目中添加新的VHDL文件时,能够经过”New”选项选择添加。(2)设计编译QuartusII编译器完成的功能有:检查设计错误、对逻辑进行综合、提取定时信息、在指定的Altera系列器件中进行适配分割,产生的输出文件将用于设计仿真、定时分析及器件编程。(3)设计定时分析单击Project菜单下的”TimingSettings...”选项,能够方便地完成时间参数的设定。QuartusII软件的时序分析功能在编译过程结束之后自动运行,并在编译报告的TimingAnalyses文件夹中显示。(4)设计仿真QuartusII软件允许设计者使用基于文本的向量文件(.vec)作为仿真器的激励,也能够在QuartusII软件的波形编辑器中产生向量波形文件(.vwf)作为仿真器的激励。(5)器件编程设计者能够将配置数据经过MasterBlaster或ByteBlasterMV通信电缆下载到器件当中,经过被动串行(PassiveSerial)配置模式或JTAG模式对器件进行配置编程,还能够在JTAG模式下给多个器件进行编程。1.3选题背景随着生活水平的不断提高,人们对家用电器的功能和质量的要求越来越高。而现有市售的微波炉其主要弊端为:不能按既有程序进行烹调,需要使用者根据食物的类型、数量、温度等因素去设定微波炉的工作时间,若设定的工作时间过长,含水分较多的食物可能会产生过热碳化的现象,若时间过短则达不到预期的烹调效果。不但在节能方面未做过多考虑,使用者还需要经常翻看使用说明书才能完成操作过程。针对这些问题,笔者认为有必要研制一种操作简单且烹调效果好的微波炉,根据一些家常菜按固定程序烹调的现象,可采取分时、分档火力加热,节时又节能。1.4选题的技术现状应用CPLD芯片和硬件描述语言(VHDL)设计该微波炉控制器系统,该系统用VHDL编程实现各底层模块的功能,顶层设计用图形输入完成。设计依据如下:1)技术可行性:采用EDA作为开发方法,VHDL语言为开发工具,经过设计和实验,对开发的程序进行调试运行和波形仿真测试验证,实现设计目标;2)经济可行性:合理利用实验室已有软件、实验箱、开发板,对该微波炉控制器设计进行开发、调试运行、仿真测试,以及结果验证等;3)以现有网络资源为依据,以辅导老师的指导为参考,根据已学知识,综合该控制器设计要求,具体细化设计;第2章微波炉控制器的设计要求2.1基本要求制定一个在不同功能时火力的控制时序表。具有三档微波加热功能,分别表示微波炉工作状态为烹调、烘烤、解冻,试验使用LED模拟。实现工作步骤:复位待机——〉检测显示电路——〉设置输出功能和定时器初值——〉启动定时和工作开始——〉结束烹调、音响提示。在上电或手动按复位键时,控制器输出的微波功率控制信号为0,微波加热处于待机状态,时间显示电路显示为00.00。具有4位时间预置电路,按键启动时间设置,最大预设数为99分99秒。设定初值后,按开启键,一方面按选择的挡位启动相应的微波加热;另一方面使计时电路以秒为单位作倒计时。当计时到时间为0则断开微波加热器,并给出声音提示,即扬声器输出2~3s的双音频提示音。若在待机状态时按测试键,则4位数码管交替显示全亮和全灭两种状态,以检测数码管各发光段的好坏。2.2发挥部分微波炉火力档位的增加。输出显示方面的扩展。实现智能控制、信息控制。2.3方案设想根据该微波炉的功能设计要求,和慎重的思考后,我的方案确定为以EPM240芯片为核心的基础上结合外围电路,再加上软件上的设计,从而实现可编程逻辑微波炉控制设计。在EPM240的学习板上,我运用了板上的时钟电路、数码管显示电路、按键控制电路、电源电路、点阵显示电路、报警提示电路。在程序编程方面采用了分频器、计数器、点阵显示、调节控制、显示译码器、彩灯控制、门是否关紧。系统预计操作流程如下图2.3系统流程图其相应的键盘控制布局如下所示:图2.4系统控制键布局图第3章系统硬件的设计3.1系统硬件的组成原理图数码管显示电路键盘控制电路Max数码管显示电路键盘控制电路MaxⅡEMP240T100C5电源电路下载电路50M时钟振荡电路LED电路提示报警电路点阵显示电路 电源电路电源能够采用USB上电,也能够外接5VDC电源。外接5VDC电源时请注意正负极性.内正外负。3.3有源晶体采用有源晶体频率为50MHz给CPLD的I/O12(CLKIN)提供时钟。我们在使用时钟的时候要分配对应的脚。3.4数码管本设计采用共阴极动态显示驱动。因为CPLD的I/O驱动能力比较强,因此能够直接驱动数码管,但为了保护I/O口在一个回路之中串接100欧姆的限流电阻。为了灵活使用I/O口,采用了插针方式,硬件上并没有直接连接上去。3.5LED注意:在LED发光二极管的时候,要把二极管的J10用跳冒短接起来,J10是LED发光二极管的电源跳线设置.如果你不用LED发光二极管也能够把J10的跳冒取下来,当然也能够不用取。3.6按键使用注意:板子上面的几个独立按键都能够作为程序的复位脚,CPLD和其它的51单片机或者ARM或者DSP不一样的。可编程CPLD器件每一个可编程的I/O口都能够作为复位脚。而其它的MPU就是一个固定的脚,这个大家要分清楚。3.7报警电路BELL当I/O15为低电平时BELL发出嘟嘟的声音。3.88X8点阵为了让用户在选择档位调节火候大小的时候能更加明显显示,我也设计一个8*8共阴极的点阵显示,经过程序不断进行扫描,使得行高列低。从而实现要显示的符号。具体电路如图3-9-1。3.98路拨码开关输入经过拨码开关可做相应的输入等实验,拨码开关和按键的用途差不多,只不过拨码开关能够固定电平,而按键一松手又回到以前的状态了。第4章系统软件设计4.1分频程序设计在接口电路中,时钟信号的作用至关重要,一般CPLD的外部时钟信号可达到几十MHZ,可是由于一些接口电路的特性所致,这样高频率的时钟不适合电路工作,因此应该引入时钟分频电路产生适合接口的工作频率。时钟发生器的输入是全局时钟clk,是从50MHZ的晶振得到的信号。为了产生合适的扫描时钟、计数时钟和闪烁时钟,因此要让50MHZ信号变成clk1为50000hz和clk2为1hz。具体程序如下:--***********50000hz分频信号***********process(clk)variablecntt:integerrange1to500;beginif(clk'eventandclk='1')thenifcntt=500thencntt:=1;clk1<=notclk1;elsecntt:=cntt+1;endif;endif;endprocess;***************1hz钟信号****************process(clk1)variablecnt:integerrange1to25000;beginif(clk1'eventandclk1='1')thenifcnt=25000thencnt:=1;clk2<=notCLK2;elsecnt:=cnt+1;endif;endif;endprocess;在产生1HZ信号的进程中之因此用了上一个进程中产生的5000hz的clk1,这样用的目的是为让系统剩下资源,因为EPM240的系统资源原来就是很少的,为了更好的实现更加智能化,因此要尽量节约系统资料。因此用clk1来产生clk2。4.2数码管显示设计程序设计根据要求,经过数码管的显示来显示倒计时的其实时间,客户调节时间的显示,调节火候的显示,因此程序必须设计一个能够进行倒计时的计数器,一个调节时间功能的进程。让用户经过调节时间来制定要进行倒计时的开始时间。一开始时我原本打算经过设计一个4*4矩阵键盘来实现更加智能化设计,让用户能够很轻松经过键盘上的数字按键来控制显示数字来设置全自动时间以及其它功能。程序及硬件电路图都设计好了,可是由于EPM240的系统资源极其有限,矩形键盘所需的系统资源大。因此让我不得不放弃用矩形键盘来控制。因此最终选择用6个独立按键来控制。再说EPM240的端口又多,6个端口对它也只是小菜一碟。整个程序中需要一个倒计时进程来控制数码管到显示计时,原理很简单就是相当计时秒表一样,只是把条件的当0就变为9,变成当9变为0就好了,这样就能实现数码管倒计时功能了。为了控制指示灯和防止用户忘记关门就直接开始工作导致微波伤害人体健康,因此在进行倒计时工作时我加上了一个条件判断是否要进行计时工作。为了实现假如用户调节时间的时候不用一定要调节四位,就直接能够按开始按钮,数码管就不会不停止那里闪烁。因此又要在工作计时时加上一个判断条件。具体程序如下ELSIF(CLK2'EVENTANDCLK2='1')THENif(L='0'andkaimeng='0')then为了控制指示灯和防止用户忘记关门就直接开始工作导致微波伤害人体健康cnt1<=0;为了实现假如用户调节时间的时候不用一定要调节四位,就直接能够按开始按钮,数码管就不会不停止那里闪烁。caseled3iswhen"0000"=>led3<="1001";caseled4iswhen"0000"=>led4<="0101";caseled5iswhen"0000"=>led5<="1001";caseled6iswhen"0000"=>led6<="0000";led5<="0000";led4<="0000";led3<="0000"; whenothers=>led6<=led6-1;endcase;whenothers=>led5<=led5-1;endcase;whenothers=>led4<=led4-1;endcase;whenothers=>led3<=led3-1;endcase;endif;在写这段程序是要对全局思路要很清晰,特别是这里用到信号量最多,每个信号要知道它的具体作用。调节时间进程我的主要思路是利用一个移位和两个分别为递增和递减的按键来控制,利用case语句来控制数码管的位置,利用case语句也有一个好处就是能够节约系统资源。例如实现递增功能的程序如下:elsif(dizeng='0')THENdizeng=0时递增调时casecnt1iswhen4=>caseled3iswhen"1001"=>led3<="0000";whenothers=>led3<=led3+1;endcase;when3=>caseled4iswhen"0101"=>led4<="0000";whenothers=>led4<=led4+1;endcase;when2=>caseled5iswhen"1001"=>led5<="0000";whenothers=>led5<=led5+1;endcase;when1=>caseled6iswhen"1001"=>led6<="0000";whenothers=>led6<=led6+1;endcase;whenothers=>null;endcase;同理就能够编写实现递减功能的程序。因为我的数码管到管脚是统一连在一起的,目的是为了节约IO口,因此要用不断扫描数码管才能让数码管显示你想要的数字,扫描数码管到方法有很多种,为了让用户知道她调节时间时所控制数码管到位置,因此我加上了当那个数码管受到控制时,还会不断闪烁,加以显示。这因为加上了这个功能,因此要打破传统的扫描方法。顺便节约系统资源。编写程序如下:--********-调整闪烁时间*******************process(cnt,en_xhdl,data4)beginif(clk1'eventandclk1='1')thenifcnt=4thencnt<=0;elsecnt<=cnt+1;endif;endif;casecntiswhen0=>en_xhdl<="111110";dian<='0';when1=>casecnt1iswhen4=>en_xhdl<=(2=>clk2,others=>'1');dian<='1';whenothers=>en_xhdl<="111011";dian<='0';为0时数码管的小数点就不显示endcase;when2=>casecnt1iswhen3=>en_xhdl<=(3=>clk2,others=>'1');dian<='1';whenothers=>en_xhdl<="110111";dian<='0';endcase;when3=>casecnt1iswhen2=>en_xhdl<=(4=>clk2,others=>'1');dian<='0';whenothers=>en_xhdl<="101111";dian<='1';endcase;when4=>casecnt1iswhen1=>en_xhdl<=(5=>clk2,others=>'1');dian<='1';whenothers=>en_xhdl<="011111";dian<='0';endcase;whenothers=>null;endcase;caseen_xhdliswhen"111110"=>data4<=led1;when"111011"=>casedingshiiswhen'1'=>DATA4<=led31;whenothers=>data4<=led3;endcase;when"110111"=>casedingshiiswhen'1'=>DATA4<=led41;whenothers=>data4<=led4;endcase;when"101111"=>casedingshiiswhen'1'=>DATA4<=led51;whenothers=>data4<=led5;endcase;when"011111"=>casedingshiiswhen'1'=>DATA4<=led61;whenothers=>data4<=led6;endcase;whenothers=>null;endcase;ENDPROCESS;前面完成编码后肯定要完成译码显示,因此一定要一个译码进程来经过对数码管管脚的输出进行编码。我选择的数码管是8段共阴极。当为”1”时该管对应的段显示变亮。具体程序--*******************译码******************process(data4)begincasedata4isWHEN"0000"=>dataout_xhdl1<="0111111";--0WHEN"0001"=>dataout_xhdl1<="0000110";--1WHEN"0010"=>dataout_xhdl1<="1011011";--2WHEN"0011"=>dataout_xhdl1<="1001111";--3WHEN"0100"=>dataout_xhdl1<="1100110";--4WHEN"0101"=>dataout_xhdl1<="1101101";--5WHEN"0110"=>dataout_xhdl1<="1111101";--6WHEN"0111"=>dataout_xhdl1<="0000111";--7WHEN"1000"=>dataout_xhdl1<="1111111";--8WHEN"1001"=>dataout_xhdl1<="1101111";--9WHENOTHERS=>null;ENDCASE;ENDPROCESS;4.3报警提示设计程序设计根据要求,当用户设置微波炉加热时间到时要产生报警提示,因此我就设计一个当倒计时到最后两秒钟的时间就开始提示加热时间以到的报警信号,经过蜂鸣器来提示。具体程序的原理就是当数码管显示到最后两秒的时间就激活一个信号让蜂鸣器产生鸣叫报警,用绿色的LED点亮来让用户知道加热结束了,红灯灭。软件设计的提示报警程序应该是在数码管正常倒计时的程序进程里面的,原因是为了控制绿灯显示。因此这里不能单独作为一个进程处理。具体程序如下:提示语音if(led6="0000"andled5="0000"andled4="0000"and(led3="0001"orled3="0010"))thenbell<='1';提示时间到了,响声2sgreen<='1';led1<="0000";elsebell<='0';endif;4.4门是否关紧程序设计炉门是食品的进出口,也是微波炉炉腔的重要组成部分。对它要求很高,绝对不能让微波泄漏出来。炉门由金属框架和玻璃观察窗组成。观察窗的玻璃夹层中有一层金属微孔网,既可透过它看到食品,又可防止微波泄漏。由于玻璃夹层中的金属网的网孔大小是经过精密计算的,因此完全能够阻挡微波的穿透。钛膜也多作为微波炉炉门的材料。为了防止微波的泄漏,微波炉的开关系统由多重安全联锁微动开关装置组成。炉门没有关好,就不能使微波炉工作,微波炉不工作,也就谈不上有微波泄漏的问题。因此为了让用户使用的更加放心舒心和符合现代家用电器的制作理念。我也设置一个开门按钮,当用户不小心或者忘记关门的时候能够及时让微波炉不工作,以致对用户的安全负责。当用户不小心或者忘记时,微波炉的倒计时进程就不能实现,这个在上面的数码管显示那里就已经设置了,加上了一句检测是否开门,如果开门,它就不能进行倒计时工作。为了更加明显告诉用户门是否关紧,我还设计了一个进程负责处理,关不紧的时候,黄色的LED就会以1s钟不停闪烁来更加明显告诉用户。具体程序如下:***************检查门有没有关好**************process(kaimeng,CLK2)beginIF(CLK2='1'andkaimeng='1')then当kaishi为1时为危险使用黄灯1s不停闪烁yellow<='1';elseyellow<='0';endif;endprocess;4.5开关按键处理程序设计开关按钮就是当用户将时间设置和档位选择好了之后就能够按下按钮就能够让微波炉正常启动工作具体程序如下:******************开关按键处理***********--process(start,P)variablen:integerrange0to1:=0;用于锁存beginIF(CLK2'EVENTANDCLK2='1')THENif(start='0'andn=0)thenL<='0';是为了让倒计时能是否正常工作的信号指示n:=n+1;red<='1';elsif(start='0'andn=1)OR(led6="0000"andled5="0000"andled4="0000"andled3="0000")then当倒计时结束时,红灯能自动灭。n:=n+1;L<='1';red<='0';endif;endif;ENDPROCESS;第5章管脚分配及显示结果5.1管脚分配图图5-3-1管脚分配图5.2管脚分配表表5-3-2管脚分布表5.3硬件显示结果这里所用到的硬件是天祥电子CPLD/FPGA系列TX-2A的开发板,所用的芯片是EPM240T100C5。先测试一下数码管,看看闪烁时数码管显示是否正常,测试好之后复位,测试和复位都是用按键开关,之后调档位,用按钮开关控制火力档位,火力显示为一个数码管,和点阵显示,火力为0时不能工作(不能倒计时),档位调好之后就是设置时间,设置时间只用一个按键调节按键来控制位置,按递加或递减按键进行自加,自减。自加或者自减的频率是一秒加或着减一次,加或减到想要的时间后按下开始按钮,红灯变亮。检测关门键(拨码开关)如果门关和开始按键按下则就能够开始工作,即能够进行倒数。如果工作中突然关门按键开着则就不能进行工作,而且黄灯以1s一下闪烁提醒用户,关门键其实是对微波炉系统的扩展,这里只能简单的用一个拨码开关进行描述,设想关门键是装在微波炉的门那边,用来感应微波炉的门是否关紧,如没关紧,则不能工作。倒计时进行时,红灯亮,说明正处于工作状态,当倒计时完毕时,亮绿灯,说明工作已完毕,最后二秒蜂鸣器还会进行报警。5.4用户使用方法1、把需放入微波炉的食物放入,关好微波炉的门2、.上电按下复位按钮(数码管显示00.000,前四位表示时间,最后一位表示当前选择档位)。3、.选择火力(有三个档位,每按一下选档按钮,数码管就会改变数字0-3,点阵就会产生不同的图案形象告诉用户你选择的火候大小)4、.按下移位按键(先按下调节按键,看对应是那个数码管在闪烁,那个闪烁就表示对应控制那位数码管显示,经过按下递增或者递减来控制闪烁那位数码管对应的数字显示。调节范围为00∶00到99∶59)。5、按下开始按键(当按下开始按键时,对应的红灯会亮,表示在加热中,当加热到最后两秒时红灯就会灭,绿灯亮,蜂鸣器会产生两秒钟报警提示,从而提示用户加热结束能够安全打开。当然假如用户操作不当,中途打开门,那么黄灯亮,红灯也亮。微波炉暂停工作)。第6章总结会选择可编程微波炉这个课题是因为我对可编程这门课还是比较喜欢的,为了完成这个设计,我由查阅资料编辑设计总体框架,再完成代码编辑,到最后的程序仿真成功。用了两周的时间完成,在完成的过程中经历了一次又一次的挫折,从开始只有计时功能到慢慢的能够调时,报警,彩灯,点阵,看着最后全部功能都实现的那一下,我真的是觉得很有成就感。下面是我对实现每个功能的一些设计技巧在产生1HZ信号的进程中之因此用了上一个进程中产生的5000hz的clk1,这样用的目的是为让系统剩下资源,为了更好的实现更加智能化,因此要尽量节约系统资料。因此用clk1来产生clk2。在数码管显示调时反面,最大的定时是59.59.而调时我是采用了按键,同时有递增递减功能,能够让用户更快捷方便的进行定时。具体程序的原理就是当数码管显示到最后两秒的时间就激活一个信号让蜂鸣器产生鸣叫报警,用绿色的LED点亮来让用户知道加热结束了,红灯灭。开关按钮就是当用户将时间设置和档位选择好了之后就能够按下按钮就能够让微波炉正常启动工作在微波炉工作状态的选档方面,除了数码管会显示选当的号码,在点阵反面也会给予提示经过这次的毕业设计,让我在可编程这门课程有了更深的了解,而且也提高了我的专业知识,总的来说这样的课程设计比上课有意思多了,在实际中还是有很多不是在课本上能学的到的东西,这个需要自己去理解,去总结的。参考文献谭会生,瞿遂春.EDA技术综合应用实例与分析西安电子科技大学出版社,廖日坤CPLD/FPGA应用开发技术白金手册.中国电力出版社,张友汉.数字电子技术基础[M].北京:高等教育出版社,顾斌.数字电路EDA设计[M].西安:西安电子科技大学出版社,徐志军.CPLD/FPGA的开发与应用[M].北京:北京电子工业出版社,李国丽.EDA与数字系统设计[M].北京:北京机械工业出版社,罗朝霞.CPLD/FPGA设计及应用[M].北京:人民邮电出版社,辛春燕.VHDL硬件描述语言.北京:国防工业出版社,龚兰芳.EDA技术课程设计及实训指导书.广东水利电力职业技术学院,龚兰芳.EDA技术实验指导书.广东:广东水利电力职业技术学院,尹常永.EDA技术与数字系统设计.西安:电子科技大学出版社,韩亚萍.ProtelDXP基础教程.北京:清华大学出版社,附录一电路原理图附录二微波炉控制器系统程序清单libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYseg73ISPORT(clk:INstd_logic;时钟信号12 jiance,yiwei,dizeng,dijian,start,kaimeng:INSTD_LOGIC;分别是上电检测,移位,递增,递减,开始,开门53,58,57,56,52,39 rst,xuandang:INstd_logic;复位,火候选挡61,55 dataout:OUTstd_logic_vector(6DOWNTO0);数码管的段输出(99-91)-- en:outstd_logic_vector(5DOWNTO0);数码管管脚(1-6) dian:outstd_logic;数码管的点输出100 bell:outstd_logic;蜂鸣器7Lie:outstd_logic_vector(7downto0);点阵列(82-73)hang:outstd_logic_vector(7downto0);点阵行(90-83)red,green,yellow:outstd_logic;--72-70-71彩灯tishi:outstd_logic_vector(3downto0));69-66--彩灯组位置ENDseg73;ARCHITECTUREarchOFseg73ISsignalclk1,clk2,dingshi,L,P:std_logic;频率1和2,调时信号,绿色指示灯信号,开始信号,绿灯信号signalcnt,cnt1:integerrange0to4;用于计时signaldata4:std_logic_vector(3downto0);signaldataout_xhdl1:std_logic_vector(6downto0);数码管段显示signalen_xhdl:std_logic_vector(5downto0);数码管使能端的信号signalled1,led3,led4,led5,led6,led21,led31,led41,led51,led61:std_logic_vector(3downto0);signalt:std_logic_vector(2downto0);点阵扫描信号传输begindataout<=dataout_xhdl1;数码管端输出en<=en_xhdl;数码管位输出tishi<="0111";只显示北面三盏灯***********5000hz分频***********process(clk)variablecntt:integerrange1to500;beginif(clk'eventandclk='1')thenifcntt=500thencntt:=1;clk1<=notclk1;elsecntt:=cntt+1;endif;endif;endprocess;***************1s钟信号****************process(clk1)variablecnt:integerrange1to25000;beginif(clk1'eventandclk1='1')thenifcnt=25000thencnt:=1;clk2<=notCLK2;elsecnt:=cnt+1;endif;endif;endprocess;--***********************正常时间倒计时设置*************************process(clk2,rst,L)beginIF(rst='0')THENled1<="0000";green<='0';led3<="0000";led4<="0000";led5<="0000";led6<="0000";cnt1<=0;dingshi<='1';P<='1';ELSIF(CLK2'EVENTANDCLK2='1')THENif(L='0'andkaimeng='0')then为了控制指示灯和防止用户忘记关门就直接开始工作导致微波伤害人体健康cnt1<=0;为了实现假如用户调节时间的时候不用一定要调节四位,就直接能够按开始按钮,数码管就不会不停止那里闪烁。 caseled3is when"0000"=>led3<="1001"; caseled4is when"0000"=>led4<="0101"; caseled5is when"0000"=>led5<="1001"; caseled6is when"0000"=>led6<="0000"; led5<="0000"; led4<="0000"; led3<="0000"; whenothers=>led6<=led6-1; endcase; whenothers=>led5<=led5-1;endcase;whenothers=>led4<=led4-1;endcase;whenothers=>led3<=led3-1;endcase;elsifxuandang='0'then火候选挡 caseled1iswhen"0011"=>led1<="0000";whenothers=>led1<=led1+1;endcase;endif;--******************调时******************--ifdingshi='1'THENif(yiwei='0')THEN ifcnt1=4thencnt1<=0; elsecnt1<=cnt1+1; endif;elsif(dizeng='0')THENdizeng=0时递增调时casecnt1is when4=>caseled3iswhen"1001"=>led3<="0000";经过移移位按钮控制要调节的数码管,whenothers=>led3<=led3+1;endcase; when3=>caseled4is when"0101"=>led4<="0000"; whenothers=>led4<=led4+1; endcase; when2=>caseled5iswhen"1001"=>led5<="0000";whenothers=>led5<=led5+1;endcase; when1=>caseled6iswhen"1001"=>led6<="0000";whenothers=>led6<=led6+1;endcase; whenothers=>null;endcase;elsif(dijian='0')THENdijian=0时递减调时casecnt1is when4=>caseled3iswhen"0000"=>led3<="1001";whenothers=>led3<=led3-1;endcase; when3=>caseled4iswhen"0000"=>led4<="0101";whenothers=>led4<=led4-1;endcase; when2=>caseled5iswhen"0000"=>led5<="1001";whenothers=>led5<=led5-1;endcase; when1=>caseled6iswhen"0000"=>led6<="1001";whenothers=>led6<=led6-1;endcase; whenothers=>null;endcase; endif;endif;endif;上电检查IFjiance='0'then led1<="1000"; led3<="1000";led4<="1000"; led5<="1000";led6<="1000";else led1<="0000"; led3<="0000";led4<="0000"; led5<="0000";led6<="0000";endif;提示语音if(led6="0000"andled5="0000"andled4="0000"and(led3="0001"orled3="0010"))thenbell<='1';提示时间到了,响声2sgreen<='1';led1<="0000";elsebell<='0';endif;ENDPROCESS;***************检查门有没有关好**************process(kaimeng,CLK2)begin IF(CLK2='1'andkaimeng='1')then当kaishi为1时为危险使用黄灯1s不停闪烁 yellow<='1'; elseyellow<='0'; endif;endprocess;******************开关按键处理***********--process(start,P)variablen:integerrange0to1:=0;用于锁存beginIF(CLK2'EVENTANDCLK2='1')THEN if(start='0'andn=0)then L<='0'; n:=n+1; red<='1';1 elsif(start='0'andn=1)OR(led6="0000"andled5="0000"andled4="0000"andled3="0000")then当倒计时结束时,红灯能自动灭。 n:=n+1; L<='1'; red<='0'; endif;endif;ENDPROCESS;--********-调整闪烁时间*******************process(cnt,en_xhdl,data4)beginif(clk1'eventandclk1='1')thenifcnt=4then cnt<=0;else cnt<=cnt+1;endif;endif;casecntiswhen0=>en_xhdl<="111110";dian<='0';when1=>casecnt1iswhen4=>en_xhdl<=(2=>clk2,others=>'1');dian<='1';whenothers=>en_xhdl<="111011";dian<='0';为0时数码管的小数点就不显示endcase;when2=>casecnt1iswhen3=>en_xhdl<=(3=>clk2,others=>'1');dian<='1';数码管还处于选择状态,处于闪烁whenothers=>en_xhdl<="110111";when3=>casecnt1isdian<='0';endcase;when2=>en_xhdl<=(4=>clk2,others=>'1');dian<='0';whenothers=>en_xhdl<="101111";dian<='1';endcase;when4=>casecnt1iswhen1=>en_xhdl<=(5=>clk2,others=>'1');dian<='1';whenothers=>en_xhdl<="011111";dian<='0';endcase;whenothers=>null;endcase;caseen_xhdlis when"111110"=>data4<=led1; when"110111"=>casedingshiiswhen'1'=>DATA4<=led41;whenothers=>data4<=led4;endcase; when"101111"=>casedingshiiswhen'1'=>DATA4<=led51;whenothers=>data4<=led5;endcase; when"011111"=>casedingshiiswhen'1'=>DATA4<=led61;whenothers=>data4<=led6;endcase; whenothers=>null;endcase;ENDPROCESS;*********点阵显示********process(clk1) variablecount:integerrange0to8; begin ifclk1'eventandclk1='1'then ifcount<=8thencount数用于循环扫描行用,由于变量只在进程内出现,故不用担心变量重名情况 ifcount=8then count:=0; endif; casecountis when0=>hang<="00000001";t<="000";扫描第一行,并把t赋予000由于信号t的变化触发下一个进程 when1=>hang<="00000010";t<="001";扫描第二行 w
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 抗焦虑中药注射液行业跨境出海战略研究报告
- 微生物生态失调诊断与治疗行业跨境出海战略研究报告
- 弹力带全身力量训练企业制定与实施新质生产力战略研究报告
- 生物药品智能产线行业深度调研及发展战略咨询报告
- 石油高效利用工程AI应用行业深度调研及发展战略咨询报告
- 抗震抗压医药泡沫箱企业制定与实施新质生产力战略研究报告
- 温州商学院专职辅导员招聘真题2024
- 招聘护士工作总结
- 屋面施工安全监测与评估措施
- 学生社团活动保证金合同
- 商业综合体商业项目立项报告
- 油库消防安全知识培训
- 车辆调度及驾驶员管理办法全套
- 淋巴静脉吻合术后护理课件
- 山东省烟台市牟平区(五四制)2023-2024学年七年级上学期期中考试历史试题
- 钣金车间生产流程图
- 地铁保洁服务投标方案
- 先进模具设计与制造技术
- 老旧小区雨污分流改造工程施工组织设计方案
- 人教版《道德与法治》二年级下册全册优秀课件
- 江苏省四星级高中评估标准及评价细则
评论
0/150
提交评论