1、数字系统设计与硬件描述语言期末考试作业题目: 洗衣机控制器的设计 学院: 电子信息工程学院 专业: 物联网工程 学号: 3014204328 姓名: 刘涵凯 2016-12-10一、 选题设计描述1. 功能介绍洗 衣 机 控 制 器 , 能 够 实 现 开 始 与 暂 停 、 注 水 , 洗 涤 、 排 水 、 脱 水 和 警 报 提 醒 的功 能 , 并 且 可 以 随 时 更 改 洗 衣 模 式 。 洗 衣 机 提 供 两 种 模 式 : 模 式 1: 注 水 -洗 涤 -排水 -注 水 -洗 涤 -排 水 -脱 水 ; 模 式 2: 脱 水 。 洗 衣 模 式 决 定 洗 衣 时 间 。
2、 默 认 模 式 为 模 式2。洗 衣 机 界 面 如 下 图 所 示 :运 转 方 式 如 下 图 所 示 :2. 算法简介总程序描述:总程序通过调用 5 种模块,在洗衣机控制器输入变化时,立刻转换模式并产生对应输出。当开关关闭时,所有输出为 0;暂停时,除显示开关状态的输出外,所有输出为 0。开关开启后,设置洗衣模式,之后按下“开始”即可开始工作。在洗衣机控制器输入变化时,立刻转换模式并产生对应输出。电 子 元 器 件 模 型 如 下 图 所 示 :switch 为开关信号,modelselect 为开关选择信号,clkin 为系统时序脉冲信号,sorp 为开始/暂停信号。watersta
3、te 为注水程序的工作状态,washrstate 为洗涤程序的工作状态,drainstate为排水程序的工作状态,drystate 为脱水程序的工作状态。alarmout 为警报提醒的状态。switchstate 为数码管显示的开关的状态(0/1) ,spstate 为数码管显示的开始/暂停的状态(0/1), state 为数码管显示的洗衣机工作状态(04),currentmodel 为数码管显示的当前模式(02),timedecade 为数码管显示的剩余时间的十位,timeunit 为数码管显示的剩余时间的个位。下面介绍各模块功能与算法:1)开关与模式选择模块a 接收开关信息, b 接收模式
4、选择信息。c 输出总电路的开关信息(开启洗衣机并且设置完毕电路后,即可准备工作,等待“开始”信号) 。e 为开关信息,将输入到数码管中显示。time1 与 time2 分别代表洗衣时间的十位和个位,将输入到计数器与警报模块中。y 为模式信息,将输入到码管中显示。2)开始/暂停模块a 接收开关信息, b 接收开始 /暂停信息,clk 接收系统时序脉冲信号。startorpause 输出受开始 /暂停信息调控的系统时序脉冲信号。y 为开始/暂停信息,将输入到码管中显示。3)计数器与警报模块clk 接收受开始/暂停信息调控的系统时序脉冲信号, a 接收开关信息,time1 和time2 分别接收洗衣
5、时间的十位和个位。alarm 输出警报信息;outtime1 和 outtime2 分别为剩余时间的十位和个位,将输入到数码管中显示,同时将输入到控制模块中。 。在脉冲信号的控制下,剩余时间逐渐减少,当剩余时间为 0 时,停止减小,并开启警报。4)控制模块a 接收开关信息, b 接收开始 /暂停信息,time1 和 time2 分别接收剩余时间的十位和个位。water、 wash、drain 、dry 分别输出注水、洗涤、排水、脱水的控制信息。act 为模块内部使用的 BUFFER 量。控制模块根据剩余时间的多少决定工作状态。如:剩余时间为 16-30 分钟时洗涤,31-35 分钟时注水。则剩
6、余时间 33 分钟时,water 为 1,其他控制信息为 0;剩余时间21 分钟时,wash 为 1,其他控制信息为 0。5)译码器与数码管显示模块b 接收开关信息,a 接收 4 位二进制数据。q 在数码管上显示字形。二、 程序源代码及说明程序代码由主程序及 5 个模块代码组成1)主程序LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL ;ENTITY xyj ISPORT(switch,modelselect,clkin,sorp: IN STD_LOGIC; -电源开关、模式选择、时钟、开始/暂
7、停按键状态的输入waterstate,washstate,drainstate,drystate,alarmout: OUT STD_LOGIC; -注水程序、洗涤程序、排水程序、脱水程序、警报状态的输出switchstate,spstate,state,currentmodel,timedecade,timeunit: OUT STD_LOGIC_VECTOR(6 DOWNTO 0); -工作状态、工作模式、剩余时间的输出END ENTITY xyj;ARCHITECTURE behave OF xyj ISCOMPONENT model -调用开关与模式选择模块PORT(a,b: IN S
8、TD_LOGIC;c: OUT STD_LOGIC;e,time1,time2,y: OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );END COMPONENT model; COMPONENT count -调用计数器与警报模块 PORT(clk,a: IN STD_LOGIC;time1,time2: IN STD_LOGIC_VECTOR(3 DOWNTO 0);alarm: OUT STD_LOGIC;outtime1,outtime2: OUT STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT count; COMPONEN
9、T BCD7 -调用译码器与数码管显示模块 PORT(b: IN STD_LOGIC;a: IN STD_LOGIC_VECTOR(3 DOWNTO 0); q : OUT STD_LOGIC_VECTOR(0 TO 6) ); END COMPONENT BCD7; COMPONENT startpause -调用开始/暂停模块 PORT(a,b,clk: IN STD_LOGIC;startorpause: OUT STD_LOGIC;e: OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 );END COMPONENT startpause; COMPONENT con
10、trol -调用控制模块 PORT(a,b: IN STD_LOGIC;time1,time2: IN STD_LOGIC_VECTOR(3 DOWNTO 0);water,wash,drain,dry: OUT STD_LOGIC;act: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0);END COMPONENT control; SIGNAL sig1,sig2,sigBCD7_1,sigBCD7_2,sigBCD7_3,sigBCD7_4,sigBCD7_5,sigBCD7_6:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL aout,b
11、out:STD_LOGIC;BEGINU1: model PORT MAP(a=switch,b=modelselect,c=aout,y=sigBCD7_1,time1=sig1,time2=sig2,e=sigBCD7_5); U2: startpause PORT MAP(a=aout,b=sorp,clk=clkin,startorpause=bout,e=sigBCD7_6); U3: control PORT MAP(a=aout,b=sorp,time1=sigBCD7_2,time2=sigBCD7_3,water=waterstate,wash=washstate,drain
12、=drainstate,dry=drystate,act=sigBCD7_4); U4: count PORT MAP(a=aout,clk=bout,time1=sig1,time2=sig2,alarm=alarmout,outtime1=sigBCD7_2,outtime2=sigBCD7_3); U5: BCD7 PORT MAP(b=aout,a=sigBCD7_1,q=currentmodel); U6: BCD7 PORT MAP(b=aout,a=sigBCD7_2,q=timedecade); U7: BCD7 PORT MAP(b=aout,a=sigBCD7_3,q=ti
13、meunit); U8: BCD7 PORT MAP(b=aout,a=sigBCD7_4,q=state); U9: BCD7 PORT MAP(b=aout,a=sigBCD7_5,q=switchstate); U10: BCD7 PORT MAP(b=aout,a=sigBCD7_6,q=spstate);END ARCHITECTURE behave;2)开关与模式选择模块LIBRARY IEEE ;USE IEEE.STD_LOGIC_1164.ALL;ENTITY model IS -开关与模式选择模块PORT(a,b: IN STD_LOGIC; -定义开关和模式选择按键的输入
14、c: OUT STD_LOGIC; -洗衣机工作开关的输出e,time1,time2,y: OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 ); -定义所需时间/min,time1 为十位,time2 为各位END ENTITY model;ARCHITECTURE behave OF model ISBEGINPROCESS(a,b)BEGINIF(a=1)THEN -开关开启时执行CASE b ISWHEN 1 = y y startorpause startorpause“01010101“)THENact“01000000“)THENact“00110101“)THENact“00110000“)THENact“00010101“)THENact“00010000“)THENact“00000000“)THENact=“0100“; -脱水