北京邮电大学-数字电路与逻辑设计-洗衣机控制器实验报告
- 格式:doc
- 大小:224.00 KB
- 文档页数:21
1数字电路与逻辑设计实验报告题目: 洗衣机控制器设计2一、洗衣机控制器要求设计制作一个全自动洗衣机的控制器:_ 洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20 秒,漂洗30 秒,脱水15 秒;_ 用一个按键实现洗衣程序的手动选择:A 、单洗涤;B 、单漂洗;C 、单脱水; D 、漂洗和脱水;E 、洗涤、漂洗和脱水全过程;_ 用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个 状态的工作时间,全部过程结束后,应提示使用者;_ 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前 保留的状态;_ 选做:三个过程的时间有多个选项供使用者选择。
_ 选做:可以预约洗衣时间。
_ 选做:自拟其它功能。
二、系统设计基本思想电路由模式选择、计数器、报警模块以及译码驱动电路和数字显示电路等模块组成。
1、模式选择模块五种洗衣模式可供用户选择,模式选择模块将用户的选择信息传递到控制模块。
2、减计数计数器模块计数器洗衣以倒计时模块的方式提示用户当前剩余的洗衣时间,该计数器能读取不同的模值进行计数。
计时单位为一秒钟。
3、译码和数码显示电路译码和数码显示电路是将计时状态直观清晰地反映出来,被人们的视觉器官所接受。
显示器件选用LED 七段数码管。
在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。
4、报警模块当系统运行到“报警”状态时,蜂鸣器将会报警,时间为5 秒。
4、分频器模块设计一个大小合适的分频器使得系统能够正确的实现一秒的计时。
三、总体设计图以及转移图流程图示:3状态选择开始信号输入变量A 为1YESNO进行洗涤变量B 为1YESNO进行漂洗变量C 为1YES进行脱水NO完成洗衣后报警提示完成4总体逻辑设计图:状态转移图示:控制器分频器OSC时间计数器洗涤漂洗脱水译码时间显示ClkClk1Clk2T15 T20 T2Cnt clr 报警Pause状态选择 译码5管脚设计图:WAITA =’1’进行洗涤进行漂洗A =’0’ B=‘1’B =’0’B =’1’进行脱水A =’0’ B=‘0’C =’1’C =’0’完成洗衣报警提示仿真情况:6简要说明:本次仿真执行的是第五个状态即洗涤、漂洗和脱水全过程。
数字电路和逻辑设计综合实验实验报告实验名称:洗衣机控制器班级:班内序号:姓名:学号:数电设计综合实验—洗衣机控制器一.设计课题的任务要求设计制作一个全自动洗衣机的控制器:●洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20秒,漂洗30 秒,脱水15 秒;●用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;●用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;●用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;●选做:三个过程的时间有多个选项供使用者选择。
●选做:可以预约洗衣时间。
●选做:自拟其它功能。
二.系统设计(包括设计思路、总体框图、分块设计)◆设计思路首先从题目进行分析,采用VHDL模块化的设计方法来进行洗衣机控制器的设计,即自顶向下,从系统总体要求出发,自上至下地将设计任务分解为不同的功能模块.最后将各功能模块连接形成顶层模块,完成系统硬件的整体设计。
本控制器基本功能描述洗衣机控制器可工作于五种模式下:单洗涤、单漂洗、单脱水、漂洗十脱水、洗涤十漂洗+脱水,可以使洗衣机控制器工作在任意一种模式,并显示出洗衣机的工作状态和剩余工作时间,在剩余时间结束后有报警声提示使用者,并且可实现暂停洗衣和继续的功能,此外,加入附加功能,可自选三个过程是使用时间并且可预约洗衣时间。
由此分析可将洗衣机控制器分为控制模块、倒计时模块,初始模式选择模块,报警模块,洗衣时间选择模块,选通译码模块和分频器模块。
【设计过程】:1)审题,初步确定思路。
2)用VHDL语言进行编程。
3)适时对程序进行修改。
4)编译成功后,进行仿真,观察波形图。
5)将程序下载到实验板上,调试各功能。
6)通过计算机仿真和下载调试,发现问题,返回原程序进行修改。
7)进行总体的调试。
数字逻辑综合性实验设计报告课程名称数字逻辑实验题目名称洗衣机定时控制器班级 20150615学号 2015061506学生姓名黄伟同组班级 20150615同组学号 2015061502 同组姓名郭伟指导教师武俊鹏、孟昭林、刘书勇、赵国冬摘要关键词:预置洗涤时间;倒计时显示;发出信号提醒用户;洗衣机状态转换提示功能;甩干功能洗衣机已经进入了千家万户,其控制逻辑和功能也为人熟知,本课题要求设计一个带有洗涤时间设定并显示功能的简易洗衣机控制电路,当时间到后,报警提醒。
根据要求,该电路需要有三个基础功能:第一,能在10分钟内自行设定洗涤时间;第二,用三位数码管显示预置洗涤时间,并对洗涤过程做倒计时显示,直到时间到零;第三,当时间到达终点时,会发出信号提醒用户注意。
在实现了基础功能的基础上,我们小组又扩展添加了三个功能:第一,在洗衣机洗衣功能进行到倒数第九秒时,会有一个小灯亮起提醒用户洗衣即将结束,且洗衣结束后,该灯保持闪亮直至洗衣功能被关闭;第二,为洗衣机状态转换提示功能,每十秒让设定好的小灯闪亮一次;第三,我们增加了甩干功能,因为,用户可能只需要甩干,所以甩干功能并未与洗衣功能自动连接起来,在甩干的倒数第八秒时,设定好的一个小灯会闪亮一下,提醒用户甩干即将完成,甩干结束后,此小灯会保持闪亮直至甩干功能被关闭。
该实验用到八种芯片,即74LS192、74LS11、74LS00、74LS04、74LS08、74LS27、74LS32、7490。
主要用到了反馈预置法,实现了六十进制,结合了组合逻辑电路与时序逻辑电路,以1hz的连续脉冲控制整个电路的运转,较好实现了洗衣机定时控制器常见的功能。
目录1 需求分析........................................................................................................................................... - 5 -1.1 基本功能要求......................................................................................................................... - 5 -1.2 创新拓展功能......................................................................................................................... - 5 -1.3 设计原理.................................................................................................................................. - 6 -1.4 实验原理图 ............................................................................................................................. - 6 -2 系统设计........................................................................................................................................... - 7 -2.1 系统逻辑结构设计................................................................................................................. - 7 -2.2 系统物理结构设计............................................................................................................... - 15 -3 系统实现......................................................................................................................................... - 24 -3.1 系统实现过程....................................................................................................................... - 24 -3.2系统测试............................................................................................................................ - 26 -3.3 系统最终电路图.................................................................................................................. - 30 -3.4系统团队分工........................................................................................................................ - 35 -4 总结.................................................................................................................................................. - 37 -5 引脚图附录 .................................................................................................................................... - 38 -1 需求分析1.1 基本功能要求1)洗涤时间在10分钟内由用户自行设定。
数字电路综合实验预习报告洗衣机控制器信息与通信工程学院xxxxx班xx号xxx洗衣机控制器一、实验目的1. 熟练掌握VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用EDA 工具进行自顶向下的电子系统设计方法;二、设计任务要求:制作一个简易全自动洗衣机控制器::1. 洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20 秒,漂洗25 秒,脱水15 秒;2. 用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3. 用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;4. 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留三、设计思路1)总体思路:洗衣机分为主要分为四个部分,预置部分,输入部分,控制部分,输出部分。
输入部分:负责输入洗衣机的模式选择信号,开始信号,暂停信号,时钟信号。
预置部分:通过一个按键的改变来控制洗衣模式的选择,在开始信号为一的上升沿,读取预置的模式,并初始化总时间,以及控制部分需要用到的信号,并把初始状态送输出部分显示。
输出部分:负责输出洗衣机的当前洗衣模式,剩余时间,以及洗衣结束时的报警信号。
控制部分:根据预置部分的状态开始工作,对输入部分的控制信号进行相应,控制洗衣机的运行中模式的转变,并将改变的输出信号传递给输出部分显示。
方框图状态转移图:洗衣过程中的状态转移,转移的时候改变temp 的值,作为下次转移的标志时间: State=111时temp=40; State=110时temp=25; State=100时temp=0; State=010时temp=0;State=001时temp=0;流程图四、电路设计1、分频模块:PROCESS(CLOCK) --由输入时钟进行100分频产生洗衣时钟BEGINIF (CLOCK'EVENT AND CLOCK='1') THENCOUNT<=COUNT + 1;IF (COUNT=499999) THENCOUNT<=0;CLK<= NOT CLK;END IF;END IF;END PROCESS;功能说明:由于数电实验开发板上的系统时钟为1MHz,想要的到频率为1hz的倒计时时钟,就要对输入时钟clock进行分频,产生计时时钟clk,分频模块中每个clock做count加一,加到499999时count归零,同时clk翻转就可以得到1Hz的时钟。
2015~2016 学年第一学期《数字电路与逻辑设计实验(下)》实验报告题目:基于 CPLD 的简易洗衣机控制器的设计与实现班级:学号:班内序号:学生姓名:一、设计课题的任务要求任务要求:基本要求:1、基于 CPLD 的简易洗衣机控制器的工作步骤为洗涤、漂洗和脱水三个过程,工作时间分别为:洗涤30 秒(进水5秒,洗衣15秒,排水5秒,甩干5秒),漂洗25秒(进水5秒,漂洗10秒,排水5秒,甩干5秒),脱水15秒(排水5秒,甩干10秒);2、用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3、用发光二极管显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应有声音提示使用者,并保持在停止状态,直至再次开始;4、用点阵动画显示洗衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情况,四种工作情况的动画显示要有区别且尽可能的形象。
5、用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;提高要求:1、三个过程的时间有多个选项供使用者选择。
2、可以预约洗衣时间。
3、自拟其它功能。
二、系统设计(包括设计思路、总体框图、分块设计)A.设计思路:本程序采用自顶向下的设计方法。
先从所需要实现的功能入手,把整个洗衣机的程序分为分频(cp)模块,模式设置(fset)模块,控制(foption)模块和点阵模块(dianzhen)等分别实现,最后再合成一个整的程序。
B.设计过程::1.计算机编程:按照上述设计,用VHDL语言进行编程实现,并通过编译,观察资源使用情况。
2.系统仿真:通过仿真软件仿真,观察波形图,如果不对,对程序进行反复推敲修改.3.下载调试:将程序下载到实验板上,调试各功能看是否满足设计要求。
4.修改程序:通过计算机仿真和下载调试,发现问题,返回原程序进行修改,再次进行下载调试,直到成功为止。
北京邮电大学实验报告题目:洗衣机控制器实验报告专业:信息与通信工程学院学号:09210670班级:2009211125姓名:刘明巍1.实验目的与实验要求2.实验原理及设计过程3.仿真波形及波形分析4.源程序5.元器件清单及资源利用情况6.故障及问题分析7.总结和结论一、实验目的与实验要求目的1. 熟练掌握 VHDL 语言和QuartusII 软件的使用;2. 理解状态机的工作原理和设计方法;3. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法;基本要求1.洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20秒,漂洗15秒,脱水10秒;2.用一个键实现洗衣程序的手动选择:A、单脱水;B、单漂洗;C、单洗涤;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3.用显示器显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全过程结束后,应提示使用者;4.用一个键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;提高要求1. 三个过程的时间有多个选项供使用者选择2. 可以预约洗衣时间3. 自拟其他功能二、实验原理及设计过程1.整个洗衣机的控制程序分为:状态控制及倒计时模块、初始模式选择模块、报警模块、洗衣时间选择模块、选通译码模块、分频器模块等分别实现,最后连接为整体。
(1)按键模块由防抖模块和按键信号产生模块构成:防抖模块用来增加按键的灵活性和有效性;按键控制信号产生模块是通过按键来产生模式选择信号、各模式时间选择信号和开始/暂停信号,形成控制模块需要的各种控制信号。
(2)显示模块由时间显示设置模块、数码管显示模块和选通信号模块以及指示灯构成:其中时间设置模块用来完成时间显示个位和十位信号的设计;数码管显示模块用用来完成模式选择选项的显示数字、模式时间选择选项的显示数字和倒计时时间的显示数字的信号设计;选通信号用来实现六个七段数码管的同时显示的设计;而指示灯用来完成对各种状态的指示的设计。
竭诚为您提供优质文档/双击可除数字电路与逻辑设计实验报告篇一:北邮数字电路与逻辑设计实验报告北京邮电大学数字电路与逻辑设计实验报告学院:班级:姓名:学号:实验一QuartusII原理图输入法设计与实现一、实验目的:(1)熟悉QuartusII原理图输入法进行电路设计和仿真;(2)掌握QuartusII图形模块单元的生成与调用;(3)熟悉实验板的使用;二、实验所用器材:(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。
三、实验任务要求(1)用逻辑门设计实现一个半加器,仿真验证其功能,并生成新的半加器图形模块单元。
(2)用(1)中生成的半加器模块和逻辑门设计实现一个全加器,仿真验证其功能,并下载到实验板测试,要求用拨码开关设定输入信号,发光二极管显示输出信号。
(3)用3线-8线译码器(74Ls138)和逻辑门设计实现函数,仿真验证其功能,并下载到实验板测试。
要求用拨码开关设定输入信号,发光二极管显示输出信号。
四、实验原理图及仿真波形图(1)半加器半加器原理图仿真波形仿真波形图分析:根据仿真波形对比半加器真值表,可以确定电路实现了半加器的功能。
但我们也可以发现输出so出现了静态功能冒险,要消除该冒险可以加入相应的选通脉冲。
(2)全加器全加器原理图仿真波形仿真波形图分析:根据仿真波形对比半加器真值表,可以确定电路实现了全加器的功能(2)741383线-8线译码器原理图仿真波形图仿真波形图分析;当且仅当Abc输入为000、010、100、111时,F=1,可知电路实现了函数。
实验二用VhDL设计与实现组合逻辑电路一、实验目的:(1)熟悉用VhDL语言设计时序逻辑电路的方法;(2)熟悉用QuartusII文本输入法进行电路设计;(3)熟悉不同的编码及其之间的转换。
二、实验所用器材:(1)计算机;(2)直流稳压电源;(3)数字系统与逻辑设计实验开发板。
三、实验任务要求(1)用VhDL语言设计实现一个共阴极7段数码管译码器;(2)用VhDL语言设计一个8421码转余三码的代码转换器;(3)用VhDL语言设计设计一个四位2进制奇校验器。
数字电路与逻辑设计实验报告题目:洗衣机控制器设计一、洗衣机控制器要求设计制作一个全自动洗衣机的控制器:_ 洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣20秒,漂洗30 秒,脱水15 秒;_ 用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;_ 用显示器件显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应提示使用者;_ 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;_ 选做:三个过程的时间有多个选项供使用者选择。
_ 选做:可以预约洗衣时间。
_ 选做:自拟其它功能。
二、系统设计基本思想电路由模式选择、计数器、报警模块以及译码驱动电路和数字显示电路等模块组成。
1、模式选择模块五种洗衣模式可供用户选择,模式选择模块将用户的选择信息传递到控制模块。
2、减计数计数器模块计数器洗衣以倒计时模块的方式提示用户当前剩余的洗衣时间,该计数器能读取不同的模值进行计数。
计时单位为一秒钟。
3、译码和数码显示电路译码和数码显示电路是将计时状态直观清晰地反映出来,被人们的视觉器官所接受。
显示器件选用LED 七段数码管。
在译码显示电路输出的驱动下,显示出清晰、直观的数字符号。
4、报警模块当系统运行到“报警”状态时,蜂鸣器将会报警,时间为5 秒。
4、分频器模块设计一个大小合适的分频器使得系统能够正确的实现一秒的计时。
三、总体设计图以及转移图流程图示:总体逻辑设计图:状态转移图示:管脚设计图:仿真情况:简要说明:本次仿真执行的是第五个状态即洗涤、漂洗和脱水全过程。
通过此仿真可以发现当输出选择模式信号change时,洗衣机模式开始发生变化。
输入第一个change信号的时候进入单洗涤状态,输入第二个change信号进入单漂洗状态,输入第三个change信号进入了单脱水的状态,输入第四个change信号进入了脱水和漂洗的状态,当输入最后一个change信号的时候进入洗涤、漂洗和脱水的全状态。
第1篇一、实验名称数字电路基础实验二、实验目的1. 熟悉数字电路的基本原理和组成。
2. 掌握常用数字电路元件(如逻辑门、触发器、计数器等)的功能和使用方法。
3. 培养动手能力和实验技能。
三、实验原理数字电路是由逻辑门、触发器、计数器等基本元件组成的。
逻辑门是数字电路的基本单元,用于实现基本的逻辑运算。
触发器是数字电路中的记忆单元,用于存储信息。
计数器是数字电路中的时序单元,用于实现计数功能。
四、实验仪器与设备1. 数字电路实验箱2. 万用表3. 导线4. 74LS00集成电路5. 74LS20集成电路五、实验内容1. 组合逻辑电路分析(1)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。
(2)搭建一个2输入与非门电路,输入端分别为A、B,输出端为Y。
(3)搭建一个4输入与非门电路,输入端分别为A、B、C、D,输出端为Y。
要求输出Y为A、B、C、D的异或运算结果。
2. 触发器应用(1)搭建一个D触发器电路,输入端为D,输出端为Q。
(2)搭建一个JK触发器电路,输入端为J、K,输出端为Q。
(3)搭建一个计数器电路,使用D触发器实现一个4位二进制计数器。
3. 计数器应用(1)搭建一个十进制计数器电路,使用74LS90集成电路实现。
(2)搭建一个任意进制计数器电路,使用74LS90集成电路实现。
(3)搭建一个分频器电路,使用计数器实现。
六、实验步骤1. 根据实验原理和电路图,在实验箱上搭建实验电路。
2. 使用万用表测试电路的各个节点电压,确保电路连接正确。
3. 根据实验要求,输入不同的信号,观察输出结果。
4. 记录实验数据,分析实验结果。
七、实验结果与分析1. 组合逻辑电路分析(1)4输入与非门电路:当A、B、C、D都为0时,Y为1;否则,Y为0。
(2)2输入与非门电路:当A、B都为0时,Y为1;否则,Y为0。
(3)4输入与非门电路:当A、B、C、D中有奇数个1时,Y为1;否则,Y为0。
数电实验报告——简易全自动洗衣机控制器03111班09号迟帅简易全自动洗衣机控制器实验报告摘要:我们制作的系统可以模拟全自动洗衣机控制器。
分为4个按键,分别为模式选择、暂停、开始和复位。
有五个指示灯来显示当前工作模式,分别为单洗涤、单漂洗、单脱水、漂洗和脱水以及洗涤漂洗脱水。
有三个指示灯显示当前工作状态,红灯是正在工作中,黄灯是暂停中,绿灯是停止中。
通过数码管显示当前操作的剩余时间,当操作完成时蜂鸣器会报警提示完成。
通过两个指示灯显示剩余操作数。
Abstract:We made a system that control washing machine. It has 4 buttons: mode choosing, pause, start, reset. We use 5 green lights to show working mode and it has 5 modes. It has one red light to show it is working, one yellow light to show it is pausing and one green light to show it is stopping. The system can show leaving-time and give an alarm when it has finished. It shows how many acts left by two light.设计任务要求:制作一个简易全自动洗衣机控制器:1、洗衣机的动作有洗涤、漂洗和脱水,每个动作持续的时间分别为20秒、15秒和10秒;2、用一个按键实现洗衣程序的手动选择:A、单洗涤B、单漂洗C、单脱水D、漂洗和脱水E、洗涤、漂洗和脱水全过程3、无论选择何种洗衣服的程序,在所选择的程序完成之后,控制器应处于暂停状态;4、用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前的状态;5、用发光二极管指示当前状态;6、用数码管以倒计时的方式显示当前状态的剩余时间。
北京邮电大学数字电路与逻辑设计实验题目:洗衣机控制器学院:信息与通信工程学院班级:学号:姓名:班内序号日期:2015年11月5日一、设计课题的任务要求:(1)实验目的:1、熟练掌握 VHDL 语言和QuartusII 软件的使用;2、理解状态机的工作原理和设计方法;3、掌握利用 EDA 工具进行自顶向下的电子系统设计方法;(2)实验内容:基本要求:1、洗衣机的工作步骤为洗衣、漂洗和脱水三个过程,工作时间分别为:洗衣 30 秒(进水5秒,洗衣15秒,排水5秒,甩干5秒),漂洗25 秒(进水5秒,漂洗10秒,排水5秒,甩干5秒),脱水15 秒(排水5秒,甩干10秒);2、用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3、用发光二极管显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应有声音提示使用者;4、用点阵动画显示洗衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情况,四种工作情况的动画显示要有区别且尽可能的形象;5、用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态。
提高要求:1、三个过程的时间有多个选项供使用者选择。
2、可以预约洗衣时间。
3、自拟其它功能。
二、系统设计:(1)设计思路和分块设计:实验的目的是模仿洗衣机的功能,设计出洗衣机控制器。
包括开关控制,工作暂停,工作模式的选择,工作状态的显示,倒计时工作时间并显示和工作结束报警等功能。
将整个控制器分为7个小模块,分别是分频模块、按键模块、控制器、防抖模块、报警模块、点阵显示和数码管译码输出显示,再将各个模块连接起来,实现洗衣机控制器功能。
分频模块:选取主时钟频率为1kHz,为了使倒计时输出为1s的时间周期,需要将主频率进行1kHz分频,使得到的频率为1Hz,输入给控制器的时钟。
按键模块:有模式选择、暂停和开始3个按键,模式选择可以选择5种洗衣模式,当开始按键按下并且有模式输入时,洗衣机开始工作。
当暂停按键按下时,洗衣机暂停工作并保持当前工作状态。
防抖模块:按键经过防抖后,可以输出时钟,去除了毛刺即抖动时钟。
报警模块:时钟输入为1kHz,当洗衣结束后,报警模块接收到控制器给它的输入信号,会以1000Hz的频率报警,(由于人耳能听到的频率为20-20000Hz)持续5秒后停止。
点阵显示:以1kHz的频率进行扫描,点阵上可以显示稳定的图案,在洗衣过程中分别显示进水、洗衣、漂洗、脱水和甩干5个小状态。
数码管译码输出显示:控制器将倒计时十位和个位输出到译码器,译码电路分别显示十位和个位,扫描频率为1kHz,数码管可以稳定显示。
控制器:控制器是整个电路的核心模块,控制各个模块的连接。
时钟频率为1Hz,输出为3个大状态(洗衣、漂洗、脱水),用发光二极管显示,5个小状态,十位个位输出和报警输出。
用状态转移控制各个过程的转换,控制各个小状态的转换,完成各个功能显示的连接。
(2)总体框图:系统框图状态转移图ASM图三、仿真波形及波形分析分频模块:clk为1000Hz的时钟,输出clkout为分频后的时钟,频率为1Hz。
防抖模块:输入reset信号有抖动,输出resetn为无抖动的时钟。
按键模块:输入pauseclk、startclk、stateclk分别为暂停、开始、模式输入按键,当按下暂停按键时,暂停输出pauseout变为高电平,洗衣机工作状态保持不变;当按下开始按键时,输出startout变为高电平,洗衣机开始工作;当按下模式按键时,可以选择5种工作模式,输出对应5种模式。
报警模块:时钟clk为1000Hz,为蜂鸣器工作频率,当输入信号alarmin为高电平时,输出alarmout变为高电平,维持5秒后变为低电平,结束报警。
数码管译码输出显示:clk为1kHz的扫描频率,gewei、shiwei分别为个位、十位输入,showout为数码管译码输出,十位个位交替显示,cat控制数码管的点亮,分别显示十位和个位输出。
控制器:时钟clk为1Hz,输入按键信号pause(暂停)、start(开始),洗衣工作模式state,输出mode为洗衣、漂洗、脱水三个大状态,输出mode_mini 为进水、洗衣、漂洗、排水、甩干五个小状态,输出time_gewei、time_shiwei 为个位、十位转换为二经制的输出,alarm为报警输出,当洗衣结束输出高电平。
四、源程序(1)、分频模块entity div isport(clk:in std_logic; --1kHzclkout:out std_logic --1Hz);end div;architecture div_arch of div issignal t : std_logic;signal count : integer range 0 to 499; --计数500个周期beginprocess(clk)beginif (clk' event and clk='1') thenif(count=499) --1000分频then count<=0;t<= not t;elsecount<=count+1;end if;end if;end process;clkout<=t;end;(2)、按键模块entity button isport(stateclk,pauseclk,startclk : in std_logic; --按键输入stateout: out std_logic_vector(2 downto 0); --5种模式输出pauseout,startout : out std_logic --暂停、开始输出);end button;architecture archi of button isbeginp1:process (stateclk) --5种模式variable cout1: integer range 0 to 5;beginif (stateclk'event and stateclk='1') thencout1 :=cout1+1;if(cout1>5) thencout1 := cout1 mod 5;end if;end if;case cout1 iswhen 1 => stateout <="001";when 2 => stateout <="010";when 3 => stateout <="011";when 4 => stateout <="100";when 5 => stateout <="101";when 0 => stateout <="000";end case;end process p1 ;p2:process(pauseclk) --当有按键按下,暂停工作,再次按下继续工作variable cout2: integer range 0 to 1;beginif (pauseclk'event and pauseclk='1') thencout2:=cout2+1;end if;if(cout2=1) thenpauseout<='1';elsepauseout<='0';end if;end process p2;p3:process(startclk) --按键按下开始工作variable cout3: integer range 0 to 1;beginif (startclk'event and startclk='1') thencout3:=cout3+1;end if;if(cout3=1) thenstartout<='1';elsestartout<='0';end if;end process p3;end archi;(3)、防抖模块entity doudong isport(clk,reset: in std_logic; --clk为1kHz,reset为按键信号resetn: out std_logic --防抖后的按键信号);end doudong;architecture a of doudong issignal tmp1,tmp2: std_logic;beginprocess (clk)beginif (clk'event and clk='0') thentmp2<=tmp1;tmp1<=reset;end if;end process;resetn<=clk and tmp1 and (not tmp2);end a;(4)、点阵显示entity dianzhen isport (clk_scan:in std_logic; --1kHz的时钟扫描频率condition:in std_logic_vector(2 downto 0); --5个小状态输入row: out std_logic_vector(7 downto 0); --行扫描col_R: out std_logic_vector(7 downto 0); --列扫描(红色亮)col_G: out std_logic_vector(7 downto 0) --列扫描(绿色亮));end dianzhen;architecture arc_dianzhen of dianzhen issignal scan_row: std_logic_vector(2 downto 0); --行扫描beginp1:process(clk_scan,condition)beginif clk_scan'event and clk_scan='1' thencase condition iswhen"000"=> --进水case scan_row iswhen "000"=>row<="10111111";col_R<="01111110";col_G<="01111110";when "001"=>row<="11011111";col_R<="01000010";col_G<="01000010";when "010"=>row<="11101111";col_R<="01000010";col_G<="11100010";when "011"=>row<="11110111";col_R<="01000010";col_G<="11010010";when "100"=>row<="11111011";col_R<="01000010";col_G<="01001010";when "101"=>row<="11111101";col_R<="01111110";col_G<="01111110";when others=>row<="11111111";col_R<="00000000";col_G<="00000000";end case;if scan_row="110" or scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;when"001"=>case scan_row is --洗衣when "000"=>row<="10111111";col_R<="01111110";col_G<="01111110";when "001"=>row<="11011111";col_R<="01011010";col_G<="01000010";when "010"=>row<="11101111";col_R<="01100110";col_G<="01000010";when "011"=>row<="11110111";col_R<="01100110";col_G<="01000010";when "100"=>row<="11111011";col_R<="01011010";col_G<="01000010";when "101"=>row<="11111101";col_R<="01111110";col_G<="01111110";when others=>row<="11111111";col_R<="00000000";col_G<="00000000";end case;if scan_row="110" or scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;when"010"=>--漂洗case scan_row iswhen "000"=>row<="10111111";col_R<="01111110";col_G<="01111110";when "001"=>row<="11011111";col_R<="01000010";col_G<="01011010";when "010"=>row<="11101111";col_R<="01000010";col_G<="01100110";when "011"=>row<="11110111";col_R<="01000010";col_G<="01000010";when "100"=>row<="11111011";col_R<="01000010";col_G<="01011010";when "101"=>row<="11111101";col_R<="01111110";col_G<="01111110";when others=>row<="11111111";col_R<="00000000";col_G<="00000000";end case;if scan_row="110" or scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;when"011"=> —-排水 case scan_row iswhen "000"=>row<="10111111";col_R<="01111110";col_G<="11111110";when "001"=>row<="11011111";col_R<="01000010";col_G<="11000010";when "010"=>row<="11101111";col_R<="01000010";col_G<="11000010";when "011"=>row<="11110111";col_R<="01000010";col_G<="11000010";when "100"=>row<="11111011";col_R<="01000010";col_G<="11111010";when "101"=>row<="11111101";col_R<="01111110";col_G<="01111110";when others=>row<="11111111";col_R<="00000000";col_G<="00000000";end case;if scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;when"100"=>--甩干case scan_row iswhen "000"=>row<="10111111";col_R<="10010000";col_G<="00000000";when "001"=>row<="11011111";col_R<="01010000";col_G<="00000000";when "010"=>row<="11101111";col_R<="00110000";col_G<="00000110";when "011"=>row<="11110111";col_R<="00010000";col_G<="00001001";when "100"=>row<="11111011";col_R<="00110000";col_G<="00001001";when "101"=>row<="11111101";col_R<="01010000";col_G<="00000110";when "110"=>row<="11111110";col_R<="10010000";col_G<="00000000";when "111"=>row<="01111111";col_R<="00010000";col_G<="00000000";end case;if scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;when others=> --没有状态,不显示case scan_row iswhen "000"=>row<="10111111";col_R<="00000000";col_G<="00000000";when "001"=>row<="11011111";col_R<="00000000";col_G<="00000000";when "010"=>row<="11101111";col_R<="00000000";col_G<="00000000";when "011"=>row<="11110111";col_R<="00000000";col_G<="00000000";when "100"=>row<="11111011";col_R<="00000000";col_G<="00000000";when "101"=>row<="11111101";col_R<="00000000";col_G<="00000000";when "110"=>row<="11111110";col_R<="00000000";col_G<="00000000";when "111"=>row<="01111111";col_R<="00000000";col_G<="00000000";end case;if scan_row="111" thenscan_row<="000";else scan_row<=scan_row+1;end if;end case;end if;end process p1;end arc_dianzhen;(5)、报警模块entity alarm isport(clk,alarmin : in std_logic; --clk为1kHz时钟频率,alarmin 为报警输入alarmout:out std_logic --报警输出,持续时间为5秒);end alarm;architecture a of alarm issignal cnt: integer range 0 to 4999;beginprocess(clk)beginif clk'event and clk='1' thenif alarmin='1' thenif( cnt/= 4999) then --5秒报警cnt<=cnt+1;alarmout<='1';else alarmout<='0';end if;else cnt<=0;alarmout<='0';end if;end if;end process;end a;(6)、数码管译码输出显示entity ledshow isport(clk: in std_logic; --1kHz扫描频率shiwei,gewei: in std_logic_vector(3 downto 0);--十位、个位二进制输入showout:out std_logic_vector(6 downto 0); --数码管译码输出cat:out std_logic_vector(5 downto 0) --控制数码管依次点亮);end ledshow ;architecture a of ledshow issignal cnt: integer range 0 to 1; --控制个位、十位交替点亮beginprocess(clk,shiwei,gewei)beginif(clk'event and clk='1') thencase cnt iswhen 0=>cat<="111101";cnt<=1; --第5个数码管显示十位case shiwei iswhen "0000"=>showout<="1111110"; --0when "0001"=>showout<="0110000"; --1when "0010"=>showout<="1101101"; --2when "0011"=>showout<="1111001"; --3when "0100"=>showout<="0110011"; --4when "0101"=>showout<="1011011"; --5when "0110"=>showout<="1011111"; --6when "0111"=>showout<="1110000"; --7when "1000"=>showout<="1111111"; --8when "1001"=>showout<="1111011"; --9when others=>showout<="0000000";end case;when 1=>cat<="111110"; cnt<=0; --第6个数码管显示个位case gewei iswhen "0000"=>showout<="1111110"; --0when "0001"=>showout<="0110000"; --1when "0010"=>showout<="1101101"; --2when "0011"=>showout<="1111001"; --3when "0100"=>showout<="0110011"; --4when "0101"=>showout<="1011011"; --5when "0110"=>showout<="1011111"; --6when "0111"=>showout<="1110000"; --7when "1000"=>showout<="1111111"; --8when "1001"=>showout<="1111011"; --9when others=>showout<="0000000";end case;end case;end if;end process ;end a;(7)、控制器entity control isport(clk,pause,start: in std_logic; --1Hz时钟频率,开始、暂停输入state: in std_logic_vector(2 downto 0); --5种模式输入mode: out std_logic_vector(2 downto 0); --3种大状态输出mode_mini: out std_logic_vector(2 downto 0); --5种小状态输出time_gewei,time_shiwei:out std_logic_vector(3 downto 0);--时间二进制输出alarm: out std_logic --报警信号);end control;architecture a of control issignal tmp1:std_logic_vector(2 downto 0); --5种小状态signal tmp2:integer range 0 to 30; --倒计时signal tmp3:std_logic_vector(2 downto 0); --3种大状态signal pre_state:integer range 0 to 4; --转移状态signal tmp5:std_logic; --报警signal cnt:integer range 0 to 8; --报警输入beginp1:process(clk)beginif(clk'event and clk='1') thenif(start='1') then --有开始信号,开始工作if (pause='0')then --无暂停if(tmp2=0) then --倒计时为0,判断新状态case pre_state is --当前状态when 0=> --当前处于开始状态if state="001"or state="101" thenpre_state<=1; tmp2<=30;elsif state<="011" thenpre_state<=3; tmp2<=15;elsif state<="010" or state<="100" thenpre_state<=2; tmp2<=25;end if;when 1=> --当前处于洗衣状态if state="101" thenpre_state<=2; tmp2<=25;elsif state<="001" thenpre_state<=4; tmp2<=0; tmp5<='1';alarm<=tmp5;end if;when 2=> --当前处于漂洗状态if state="101"or state="100" thenpre_state<=3; tmp2<=15;elsif state<="010" thenpre_state<=4; tmp2<=0; tmp5<='1';alarm<=tmp5;end if;when 3=> --当前处于脱水状态if state="011" or state="100"or state="101"thenpre_state<=4; tmp2<=0; tmp5<='1';alarm<=tmp5;end if;when 4=> --当前处于结束状态tmp2<=0; tmp5<='1'; alarm<=tmp5;if (tmp5='1') thenif (cnt<8) thencnt<=cnt+1;elsetmp5<='0'; alarm<=tmp5;cnt<=0;end if;elseif state="001" or state="010" or state="011" orstate="100" or state="101" thenpre_state<=0; --结束洗衣后,判断是否有新状态end if;end if;end case;end if;end if;if (tmp2/=0) then --倒计时tmp2<=tmp2-1;end if;if(pause='1')then --暂停pre_state<=pre_state;tmp2<=tmp2;end if;end if;end if;end process;p2:process(pre_state)begincase pre_state is --将当前状态对应到相应3个大状态when 1 =>tmp3<="001"; --洗衣when 2 =>tmp3<="010"; --漂洗when 3 =>tmp3<="100"; --脱水when others =>tmp3<="000";end case;mode<=tmp3;time_shiwei <= conv_std_logic_vector(tmp2/10,4); --将十进制转为二进制 time_gewei <= conv_std_logic_vector(tmp2 mod 10,4);end process;p3:process(pre_state,tmp2)begincase pre_state is --将每个状态对应到小状态when 1=>if (tmp2 >25) thentmp1<="000" ; --进水elsif (tmp2>10 and tmp2<=25) thentmp1<="001";elsif (tmp2>5 and tmp2<=10) thentmp1<="011"; --洗涤elsif (tmp2>0 and tmp2<=5) thentmp1<="100"; --排水else tmp1<="111"; --甩干end if;when 2=>if (tmp2 >20) thentmp1<="000" ; --进水elsif (tmp2>10 and tmp2<=20) thentmp1<="010"; --漂洗elsif (tmp2>5 and tmp2<=10) thentmp1<="011"; --排水elsif (tmp2>0 and tmp2<=5) thentmp1<="100"; --甩干else tmp1<="111";end if;when 3=>if (tmp2 >10) thentmp1<="011" ; --排水elsif (tmp2>0 and tmp2<=10) thentmp1<="100"; --甩干else tmp1<="111";end if;when others =>tmp1<="111";end case;mode_mini<=tmp1;end process;end a;顶层文件library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity laundry isport(clk_main,state,pause,start:in std_logic;--主时钟,模式、暂停、开始按键mode_out:out std_logic_vector(2 downto 0);--3种状态输出,用发光二极管显示ledshow_out:out std_logic_vector(6 downto 0);--数码管倒计时输出cat_out:out std_logic_vector(5 downto 0);--十位、个位交替点亮alarm_out:out std_logic; --报警输出(持续5秒)row_out: out std_logic_vector(7 downto 0);--行扫描col_R_out: out std_logic_vector(7 downto 0);--列扫描(红色)col_G_out: out std_logic_vector(7 downto 0)—列扫描(绿色));end laundry;architecture arch_laundry of laundry iscomponent alarm --报警模块port(clk,alarmin : in std_logic;alarmout:out std_logic);end component;component ledshow --数码管译码输出模块port(clk: in std_logic;shiwei,gewei: in std_logic_vector(3 downto 0);showout:out std_logic_vector(6 downto 0);cat:out std_logic_vector(5 downto 0));end component;component doudong --防抖模块port(clk,reset: in std_logic;resetn: out std_logic);end component;component div --分频模块port(clk:in std_logic;clkout:out std_logic);end component;component dianzhen --点阵模块port(clk_scan:in std_logic;condition:in std_logic_vector(2 downto 0);row: out std_logic_vector(7 downto 0);col_R: out std_logic_vector(7 downto 0);col_G: out std_logic_vector(7 downto 0));end component;component control --控制器port(clk,pause,start: in std_logic;state: in std_logic_vector(2 downto 0); --5zhong moshimode: out std_logic_vector(2 downto 0); --3zhong zhuangtaimode_mini: out std_logic_vector(2 downto 0); --5zhong xiaozhuangtai time_gewei,time_shiwei:out std_logic_vector(3 downto 0);alarm: out std_logic);end component;component button --按键模块port(stateclk,pauseclk,startclk : in std_logic;stateout: out std_logic_vector(2 downto 0);pauseout,startout : out std_logic);end component;signal clk11,cn1,cn2,cn3,cn4,cn5,cn6:std_logic; --连接线signal state1,state2:std_logic_vector(2 downto 0);signal ts,tg:std_logic_vector(3 downto 0);begin --各个模块连接u1:alarm port map (clk=>clk_main,alarmin=>cn6,alarmout=>alarm_out); u2:ledshow port map (clk=>clk_main,shiwei=>ts,gewei=>tg,showout=>ledshow_out,cat=>cat_out );u3:doudong port map (clk=>clk_main,reset=>start,resetn=>cn3);u4:doudong port map (clk=>clk_main,reset=>pause,resetn=>cn2);u5:doudong port map (clk=>clk_main,reset=>state,resetn=>cn1);u6:div port map (clk=>clk_main,clkout=>clk11);u7:dianzhen port map (clk_scan=>clk_main,condition=>state1,row=>row_out,col_R=>col_R_out,c ol_G=>col_G_out);u8:control port map (clk=>clk11,state=>state2,pause=>cn5,start=>cn4,mode=>mode_out,mode_mini=>state1, alarm=>cn6,time_shiwei=>ts,time_gewei=>tg);u9:button port map(stateclk=>cn1,pauseclk=>cn2,startclk=>cn3,stateout=>state2,pauseo ut=>cn5,startout=>cn4);end arch_laundry;五、功能说明及资源利用情况各个模块连接后,电路原理图如下图所示:顶层文件编译后,界面如下:资源占用率为18%功能说明:实现了洗衣机的基本功能,如下用按键选择(A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程)5个工作模式,用按键控制开始、暂停工作。