




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、数字电路与逻辑设计课程实验报告学 院: 信息与通信工程学院学生姓名: C学 号:NULL班 级:NULL 2015 年 11 月 目录数字电路与逻辑设计课程实验报告4第1章 任务要求4第2章 系统设计42.1 设计思路42.2 总体框图52.2.1 系统结构图52.2.2 模块方框图62.2.3 状态转移图62.3 分块设计72.3.1 分频器72.3.2 倒计时72.3.3 模式选择及LED显示72.3.4 数码管显示72.3.5 点阵动画72.3.6 暂停及开始72.3.7 蜂鸣器82.3.8 防抖动8第3章 仿真及波形分析83.1分频器模块83.1.1 仿真波形83.1.2 波形分析83
2、.2 倒计时模块93.2.1 仿真波形93.2.2 波形分析93.3 模式选择及LED显示模块93.3.1 仿真波形93.3.2 波形分析103.4 数码管显示模块103.4.1 仿真波形103.4.2 波形分析103.5 点阵动画模块113.5.1 仿真波形113.5.2 波形分析123.6 暂停及开始模块123.6.2 波形分析123.7 蜂鸣器模块133.7.1 仿真波形133.7.2 波形分析133.8 防抖动模块133.8.1 仿真波形133.8.2 波形分析13第4章 源程序(含注释)144.1 主程序Washer144.2 分频器clk_div164.3 倒计时CountDown
3、184.4 模式选择及LED显示ModelPart244.5 数码管显示Display254.6 点阵动画Flash274.7 暂停及开始Pause_Start334.8 蜂鸣器BeepPart344.9 防抖动Shake35第5章 功能说明及资源利用情况364.1 功能说明364.2 资源利用情况37第6章 故障及问题分析374.1 问题一倒计时无法倒数至037问题描述37解决方法374.2 问题二蜂鸣器不能连续触发38问题描述38解决方法384.3 问题三点阵显示亮度问题38问题描述38解决方法38总结38参考文献39数字电路与逻辑设计课程实验报告作者:C 学号:NULL第1章 任务要求题
4、目一 基于CPLD的简易洗衣机控制器的设计与实现基本要求:1、 洗衣机的工作步骤为洗涤、漂洗和脱水三个过程,工作时间分别为:洗涤30 秒(进水5 秒,洗衣15 秒,排水5 秒,甩干5 秒),漂洗25 秒(进水5 秒,漂洗10 秒,排水5 秒,甩干5 秒),脱水15 秒(排水5 秒,甩干10 秒);2、 用一个按键实现洗衣程序的手动选择:A、单洗涤;B、单漂洗;C、单脱水;D、漂洗和脱水;E、洗涤、漂洗和脱水全过程;3、 用发光二极管显示洗衣机的工作状态(洗衣、漂洗和脱水),并倒计时显示每个状态的工作时间,全部过程结束后,应有声音提示使用者,并保持在停止状态,直至再次开始;4、 用点阵动画显示洗
5、衣机工作过程中进水、波轮或滚筒转动、排水和甩干等的工作情况,四种工作情况的动画显示要有区别且尽可能的形象。5、 用一个按键实现暂停洗衣和继续洗衣的控制,暂停后继续洗衣应回到暂停之前保留的状态;提高要求:1、 三个过程的时间有多个选项供使用者选择。2、 可以预约洗衣时间。3、 自拟其它功能。第2章 系统设计2.1 设计思路分析题目,这次实验设计的简易洗衣机主要需要实现的是洗衣机的倒计时功能,其中显示部分由数码管(显示时间)和点阵(显示洗衣动画)以及发光二极管(显示模式)组成,声音提示由蜂鸣器组成。每次洗衣机开始工作之前可以进行模式选择,一共有洗衣、漂洗、脱水、漂洗+脱水和洗涤+漂洗+脱水五种模式
6、,每种分别对应不同的工作时间,并且包含有进水、洗衣、排水和甩干四种不用的洗衣过程。每种洗衣模式结束后,洗衣机停止工作待命,并且蜂鸣器产生声音提示信号。另外还需要设计一个暂停按键,实现随时暂停和继续洗衣。初步确定思路,利用VHLD设计此简易洗衣机,大致需要的模块有分频器模块、模式选择模块、倒计时模块、数码管显示模块、点阵动画模块、LED显示模块、暂停功能模块、蜂鸣器模块。为节省资源将LED显示模块与模式选择模块合并为模式选择及显示模块。为实现洗衣机的使用,需要用到的按键有模式切换按键、复位按键和暂停及开始按键,其中暂停和开始设为同一按键。为了实现按键稳定,特别添加按键防抖模块。综上,最终设计为用
7、8个模块实现洗衣功能(分频器、模式选择及显示、倒计时、数码管显示、点阵动画、暂停及开始、蜂鸣器、防抖动),利用3个按键完成洗衣操作(模式切换、复位、暂停/开始)。用三个LED灯分别表示洗涤、漂洗和脱水,由灯亮的不同来表示不同的模式。数码管6位分为三个部分,高两位显示01到05分别标示每个状态,中间两位显示总体时间的倒计时(如洗涤30秒、漂洗25秒等),低两位显示分步过程的倒计时(如进水4秒、洗衣15秒等)2.2 总体框图2.2.1 系统结构图开始按下复位键 Y复位?按模式切换按键,进行选择模式选择完成? N N结束继续? Y 蜂鸣器响按下开始按钮 Y 保持某种状态开始/继续 某种工作 N 按下
8、暂停按钮计时结束?暂停? Y N2.2.2 模块方框图防抖动模块按键防抖动暂停及开始模块暂停/开始按键蜂鸣器模块蜂鸣器复位按键点阵显示模块点阵动画模式选择按键控制器LED显示模式选择及显示模块数码管显示模块数码管时钟输入倒计时分频器倒计时模块分频器模块2.2.3 状态转移图设A、B、C分别表示洗衣、漂洗、脱水三种状态,1表示高电平,0表示低电平。 Shift=0 Shift=0 Shift=0洗涤ABC=100初始ABC=000漂洗ABC=010 Shift=1 Shift=1洗涤+漂洗+脱水ABC=111漂洗+脱水ABC=011脱水ABC=001 Shift=1 Shift=1 Shift=
9、1 Shift=1 Shift=0 Shift=0 Shift=02.3 分块设计2.3.1 分频器一共需要五个信号clk_dz(1000赫兹),clk_500(500赫兹),clk_x(100赫兹),clk_10(10赫兹)和clk_1(1赫兹)。其中clk_dz用于点阵动画扫描,clk_500用于数码管扫描和蜂鸣器报警,clk_x用于按键防抖动,clk_10用于点阵动画显示(0.1s为一帧),clk_1用于倒计时。2.3.2 倒计时 用变量将每种模式倒计时的初始值存起来。进行模式选择后,每个模式对应的变量值在clk_1(1s)的时钟沿到来时减1,一直减到结果为0时停止倒计时。当遇到暂停信号
10、,倒计时停止,每个变量的值停留在当前数值不变,等待操作。当遇到复位信号时,每个变量回到一开始所设的初始值,从而可以重新开始计时。2.3.3 模式选择及LED显示 设置一个Model按键和一个模值为6的计数器Model_tmp(从0到5)。每按下一次Model,计数器Model_tmp加1,标识当前状态(例如0为初始态、1为洗涤等等)。当计数器Model_tmp计到5时又重新返回0。并且根据Model_tmp的值,来确定所设的三个发光二极管的对应显示(例如Model_tmp=1时,LED=100,即只亮第一个灯;Model_tmp=2时,LED=010,即只亮第二个灯),具体对应关系如状态转移图
11、所示。2.3.4 数码管显示 将数码管6位分为三段,高两位根据Model_tmp的值显示从00到05,分别对应初始状态和洗衣的5种模式,中间两位对应该模式下总时间的倒计时显示,低两位对应该洗衣过程中每种具体工作状态的分部倒计时(如进水5s、洗衣15s等)。然后通过译码,将对应的数字传递给数码管,并且利用clk_500(500赫兹)信号作扫描频率,对数码管进行扫描显示。2.3.5 点阵动画 一共设计了4种动画,分别对应进水、洗衣、排水和甩干四种具体的洗衣状态。每种动画有5到6帧,每帧动画由clk_10(10赫兹)信号控制显示(即每帧动画停留约0.1s),并且循环播放。通过译码部分将动画传递给点阵
12、,利用clk_dz(1000赫兹)进行按行扫描显示。2.3.6 暂停及开始 设置一个P_S按键(暂停/开始按键)和一个模值为2的变量pause_tmp。每按下以此P_S按键,pause_tmp进行一次翻转。利用pause_tmp的当前值来控制洗衣功能的开始和暂停:当pause_tmp=1时执行洗衣功能,当pause_tmp=0时停止当前洗衣动作待命。2.3.7 蜂鸣器 设置一个beep信号,当洗衣时间倒计时到0时,蜂鸣器模块发生响应,beep信号(接实验板的蜂鸣器引脚)按clk_X(100赫兹)的频率在0、1间翻转,以此来实现蜂鸣。考虑到实际洗衣机的报警提示不会一直响,所以设计为蜂鸣器响5s然
13、后停止。为此设计了一个模值为5的计数器count,利用clk_1(1赫兹)信号进行每秒加1来实现5秒计时,当count等于5时beep信号会停止翻转。2.3.8 防抖动为了防止按键出现抖动情况,故添加此模块进行按键防抖动。输入为普通按键信号,利用clk_X(100赫兹)信号从检测到的按键信号中进行抽样取值,并利用触发器进行对按键信号的检测,最终输出添加完防抖动以后的准确信号。第3章 仿真及波形分析3.1分频器模块3.1.1 仿真波形3.1.2 波形分析因为真实分频器模块分频系数过大导致无法仿真,所以用分频系数为2和10的分频器来测试真实分频器效果(两者代码结构完全相同)。clk为时钟输入信号,
14、clk_500为2分频时钟输出信号, clk_dz为10分频时钟输出信号,reset为复位信号。从仿真图上可以看出经过初始的复位信号以后,clk_500和clk_dz分别完成了对clk信号进行2分频和10分频。当reset信号为1时,分频信号清0;当reset信号为1时,又开始正常进行分频工作。说明分频器可以正常进行分频操作。3.2 倒计时模块 仿真波形 波形分析cl_beeper为蜂鸣器输入信号(低电平时表示蜂鸣器正常打开),clk_1为时钟输入信号,model_tmp为当前模式输入,pause_tmp为暂停和开始输入信号(高电平时洗衣机开始工作),reset为复位信号(高电平复位)。S1S
15、6为数码管从高到低6位的显示输出,show为点阵对应输出,beep_flag为蜂鸣器触发信号输出(高电平表示触发蜂鸣器)。这次仿真是模仿脱水模式(总时间15s:排水5s,甩干10s)。从仿真波形可以看出,切换模式到模式3(即脱水模式)后,此时S1和S2(数码管高两位)显示0、3表示为模式三(脱水),S3和S4(数码管中间两位)显示1、4表示15s倒计时起始时间。当接收到开始信号后(pause_tmp变为1),S3和S4开始总时间倒计时(从14倒数至0),S5和S6(数码管低两位)标示当前状态的倒计时(排水5s,从4倒数至0;甩干10s,从9倒数至0),show在排水状态是为0010(对应点阵排
16、水动画),在甩干时候为0100(对应点阵甩干动画)。中间当暂停信号pause_tmp变为0时,倒计时停止,总体倒计时保持原有状态;当pause_tmp重新回到1时,各倒计时又重新开始。当倒计时结束后,beep_flag变为1,此时会触发蜂鸣器。输入reset信号为1后,所有信号清零。说明倒计时模块工作正常。3.3 模式选择及LED显示模块3.3.1 仿真波形 波形分析clk_x为发光二级管扫描信号,model为按键信号,reset为复位信号,model_tmp是模值为5的计数器,记录当前所选择的模式(model_tmp=0为初始态、model_tmp=1为洗涤等等),LED是三个发光二极管(高
17、电平表示亮,低电平表示灭)。如仿真波形所示,当检测到model按键信号时,model_tmp进行加计数,每个model_tmp对应一种LED显示,表示当前所选择的洗衣模式。当reset为高电平时,各输出信号复位。说明模式选择模块工作正常。3.4 数码管显示模块3.4.1 仿真波形图图3.4.2 波形分析clk_500为500赫兹数码管译码扫描信号,reset为复位信号,S1S6分别标识数码管对应每一位的数字, Disp为7段数码管的译码输出,CAT为数码管选通信号输出。仿真波形的S1S6选用模式三(单脱水)的倒计时显示作为输入,由图可以看出当S1S6输入为不同的值时,数码管会根据扫描信号clk
18、_500的频率进行扫描译码。最后当reset为高电平是,信号复位。图3.4.2是对图前半段进行了放大,可以看出Disp和CAT根据clk_500的频率进行扫描和译码工作。由此看见数码管显示工作正常。3.5 点阵动画模块3.5.1 仿真波形图3.5.1图3.5.2图3.5.33.5.2 波形分析clk_10为10HZ信号,用于点阵动画的逐帧显示;clk_dz为1000赫兹信号,用于点阵扫描;reset为复位信号,show为洗衣机当前状态所对应的输入信号(show分别用0000表示初始态、0001表示进水、 0010表示排水、0011表示洗衣、0100表示甩干)A0A7用八位二进制码分别对应点阵每
19、行的显示内容(1表示亮,0表示暗),ROW点阵行输出信号,COL为点阵列输出信号。仿真波形所显示的为模式三(5s排水,10s甩干)下的点阵显示,由图可以看出根据show的值的不同,A0A7会产生响应的变化,即每一帧的动画显示,当reset为高电平时各信号复位。图是图的局部放大图,从中我们可以看出随着clk_10的点阵动画显示信号,A0A7发生变化,即点阵显示每一行的变化。图是图的再次放大,从中我们可以看出根据点阵扫描信号clk_dz的频率,点阵模块在进行着行扫描。由此可见点阵模块可以正常工作。3.6 暂停及开始模块3.6.1 仿真波形 波形分析clk_x为100HZ信号,p_s为暂停/开始按键
20、输入信号,reset为复位信号。pause_tmp为暂停/开始状态输出信号(高点平时洗衣机工作)。 由仿真波形可以看出,每当p_s按键触发一次,pause_tmp发生一次翻转,及洗衣机从工作到暂停或者从暂停继续工作。当接收到reset信号时,pause_tmp复位。可见暂停及开始模块工作正常。3.7 蜂鸣器模块3.7.1 仿真波形图3.7.1图3.7.2 波形分析clk_1为1赫兹信号,clk_500为500赫兹信号,beep_flag为蜂鸣器触发信号(当检测到高点平时触发蜂鸣器),reset为复位信号。Beep是蜂鸣器输出信号,cl_beeper为蜂鸣器开关信号(低电平时表示蜂鸣器打开)。根
21、据仿真波形的图3.7.1可知,当检测到beep_flag为高电平时,beep会有响应。图是图的局部放大图,由图可以看出,beep信号是随着clk_500分频信号发生0、1翻转,以此来产生蜂鸣报警。由此看见蜂鸣器工作正常。3.8 防抖动模块3.8.1 仿真波形 波形分析clk_x为100赫兹信号,d_in为需要添加防抖动的输入信号,d_out为添加完防抖动以后的输出信号。由输出波形可以看出,当输入信号不稳定发生抖动是,防抖动模块可以利用clk_x信号的频率对输出信号进行采样,然后用触发器原理进行比较判别,能够有效的区分出来接收到输入信号是否为真实输入信号,可见防抖动模块工作正常。第4章 源程序(
22、含注释)4.1 主程序Washer-主程序-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-最顶层结构体定义-ENTITY Washer ISPORT (clk:IN STD_LOGIC;-时钟信号-reset,model,p_s:IN STD_LOGIC;-复位按键,模式选择按键,开始/暂停按键-Disp:OUT STD_LOGIC_VECTOR(6 DOWNTO 0);-数码管显示的数字的信号-CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0);-数码管选通信号-LED
23、:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);-LED显示-Col:out std_logic_vector(7 downto 0);-点阵列-Row:out std_logic_vector(7 downto 0);-点阵行-Beep:OUT STD_LOGIC);-蜂鸣器-END Washer;-SIGNAL-clk_500,clk_1,clk_x,clk_10,clk_dz分别对应500HZ信号,1HZ信号,100HZ信号,10HZ信号,1000HZ信号-Show对应当前点阵显示状态-model_tmp:对应当前模式-S1,S2,S3,S4,S5,S6:对应从左到右
24、6位数码管的每一位-pause_tmp:开始暂停的标志信号,1开始0暂停-beep_flag:蜂鸣器是否响了5秒的标志信号-cl_beeper:cl_beeper的0、1决定beep_flag的1、0-ARCHITECTURE a OF Washer ISSIGNAL clk_500,clk_1,clk_x,clk_10,clk_dz:STD_LOGIC;SIGNAL Show:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL model_tmp:INTEGER RANGE 0 TO 5;SIGNAL S1,S2,S3,S4,S5,S6:INTEGER RANGE 0 T
25、O 9;SIGNAL pause_tmp:STD_LOGIC;SIGNAL beep_flag:STD_LOGIC;SIGNAL cl_beeper:STD_LOGIC;-COMPONENT-COMPONENT clk_div-分频器PORT(reset,clk:IN STD_LOGIC; clk_500,clk_1,clk_x,clk_dz,clk_10:OUT STD_LOGIC);END COMPONENT;COMPONENT Flash is -点阵显示 PORT(clk_dz,reset: in std_logic ; clk_10: IN STD_LOGIC; Show:IN ST
26、D_LOGIC_VECTOR(3 DOWNTO 0); Row:out std_logic_vector(7 downto 0); Col:out std_logic_vector(7 downto 0); END COMPONENT;COMPONENT Display-数码管显示PORT(clk_500:IN STD_LOGIC; reset:IN STD_LOGIC; S1,S2,S3,S4,S5,S6:IN INTEGER RANGE 0 TO 9; CAT:OUT STD_LOGIC_VECTOR(5 DOWNTO 0); Disp:OUT STD_LOGIC_VECTOR(6 DOW
27、NTO 0);END COMPONENT;COMPONENT Pause_Start -暂停/开始按键PORT(reset,p_s,clk_x:IN STD_LOGIC; pause_tmp:OUT STD_LOGIC);END COMPONENT;COMPONENT ModelPart -模式选择PORT(model,reset,clk_x:IN STD_LOGIC; model_tmp:OUT INTEGER RANGE 0 TO 5; LED:OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END COMPONENT;COMPONENT BeepPart -蜂鸣器PO
28、RT(clk_1,clk_x:IN STD_LOGIC; model:IN STD_LOGIC; clk_500:IN STD_LOGIC; beep_flag:IN STD_LOGIC; cl_beep:OUT STD_LOGIC; BEEP:OUT STD_LOGIC);END COMPONENT;COMPONENT CountDown-时间倒数器PORT(clk_1:IN STD_LOGIC;-1HZ方波信号- reset:IN STD_LOGIC;-复位按键- model_tmp:IN INTEGER RANGE 0 TO 5; pause_tmp:IN STD_LOGIC; cl_b
29、eeper:IN STD_LOGIC; S1,S2,S3,S4,S5,S6:OUT INTEGER RANGE 0 TO 9; -分别对应数码管的每一位- Show:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); beep_flag:OUT STD_LOGIC);END COMPONENT;-PORT MAP-BEGINu1:clk_div PORT MAP(reset=>reset,clk=>clk,clk_500=>clk_500,clk_1=>clk_1,clk_x=>clk_x, CLK_DZ=>CLK_DZ,clk_10=>
30、;clk_10);u2:Flash PORT MAP (reset=>reset,clk_10=>clk_10,clk_dz=>clk_dz,Show=>Show,Col=>Col,Row=>Row); u3:Display PORT MAP(clk_500=>clk_500,reset=>reset,S1=>S1,S2=>S2,S3=>S3,S4=>S4,S5=>S5, S6=>S6,CAT=>CAT,Disp=>Disp);u4:Pause_Start PORT MAP(clk_x=>cl
31、k_x,reset=>reset,p_s=>p_s,pause_tmp=>pause_tmp);u5:ModelPart PORT MAP(clk_x=>clk_x,model=>model,reset=>reset,LED=>LED,model_tmp=>model_tmp);u6:BeepPart PORT MAP(beep_flag=>beep_flag,clk_1=>clk_1,clk_x=>clk_x,model=>model, clk_500=>clk_500,cl_beep=>cl_beeper,
32、Beep=>Beep);u7:CountDown PORT MAP(reset=>reset,clk_1=>clk_1,model_tmp=>model_tmp,pause_tmp=>pause_tmp,cl_beeper=>cl_beeper,beep_flag=>beep_flag,S1=>S1,S2=>S2,S3=>S3,S4=>S4, S5=>S5,S6=>S6,Show=>Show);END a;4.2 分频器clk_div-分频器-LIBRARY IEEE;USE IEEE.STD_LOGIC_11
33、64.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY clk_div ISPORT(reset,clk:IN STD_LOGIC; -复位信号和时钟信号- clk_500,clk_x,clk_1,clk_10:BUFFER STD_LOGIC; -500HZ,100HZ,1HZ,10HZ- clk_dz:out std_logic -1000HZ- );END clk_div;ARCHITECTURE a OF clk_div ISCONSTANT DIV1:INTEGER:=100000; -从clk分出500HZ,用于数码管和蜂鸣器-CONSTANT
34、DIV2:INTEGER:=500; -从500HZ分出1HZ,用于倒计时-CONSTANT DIV3:INTEGER:=5; -从500HZ分出100HZ,用于防抖动-CONSTANT DIV4:INTEGER:=50000; -从clk分出1000HZ,用于点阵扫描-CONSTANT DIV5:INTEGER:=50; -从500HZ分出10HZ,用于点阵动画显示-SIGNAL tmp1:INTEGER RANGE 0 TO DIV1;SIGNAL tmp2:INTEGER RANGE 0 TO DIV2;SIGNAL tmp3:INTEGER RANGE 0 TO DIV3;signal
35、 tmp4:INTEGER RANGE 0 TO DIV4;signal tmp5:INTEGER RANGE 0 TO DIV5; signal clktmp: std_logic;BEGINp1:PROCESS(reset,clk) -分出500HZBEGINIF reset='1' THENtmp1<=1;clk_500<='0'ELSIF clk'event AND clk='1' THENIF(tmp1>DIV1/2)THEN clk_500<='1'ELSE clk_500<=
36、39;0'END IF;IF(tmp1=DIV1) THENtmp1<=1;elsetmp1<=tmp1+1;END IF;END IF;END PROCESS p1;p2:PROCESS(clk_500,reset) -分出1HZBEGINIF reset='1' THENtmp2<=1;clk_1<='0'ELSIF clk_500'event AND clk_500='1' THENIF(tmp2>DIV2/2)THEN clk_1<='1'ELSE clk_1<=&
37、#39;0'END IF;IF(tmp2=DIV2) THENtmp2<=1;elsetmp2<=tmp2+1;END IF;END IF;END PROCESS p2;p3:PROCESS(clk_500,reset) -分出100HZBEGINIF reset='1' THENtmp3<=1;clk_x<='0'ELSIF clk_500'event AND clk_500='1' THENIF(tmp3>DIV3/2)THEN clk_x<='1'ELSE clk_x<
38、;='0'END IF;IF(tmp3=DIV3) THENtmp3<=1;elsetmp3<=tmp3+1;END IF;END IF;END PROCESS p3;P4:PROCESS(clk,reset) -分出1000HZBEGINIF reset='1' THENtmp4<=1;clk_dz<='0'ELSIF clk'event AND clk='1' THENIF(tmp4>DIV4/2)THEN clk_dz<='1'ELSE clk_dz<=
39、9;0'END IF;IF(tmp4=DIV4) THENtmp4<=1;elsetmp4<=tmp4+1;END IF;END IF;END PROCESS p4;P5:PROCESS(clk_500,reset) -分出10HZBEGINIF reset='1' THENtmp5<=1;clk_10<='0'ELSIF clk_500'event AND clk_500='1' THENIF(tmp5>DIV5/2)THEN clk_10<='1'ELSE clk_10<
40、;='0'END IF;IF(tmp5=DIV5) THENtmp5<=1;elsetmp5<=tmp5+1;END IF;END IF;END PROCESS p5;END a;4.3 倒计时CountDownLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY CountDown ISPORT (clk_1:IN STD_LOGIC;-1HZ方波信号-reset:IN STD_LOGIC;-复位按键-model_tmp:IN INTEGER RANGE 0
41、TO 5;-model_tmp:对应当前模式-pause_tmp:IN STD_LOGIC;-pause_tmp:开始暂停的标志信号,1开始0暂停-cl_beeper:IN STD_LOGIC;-beep_flag:蜂鸣器是否响了5秒的标志信号-S1,S2,S3,S4,S5,S6:BUFFER INTEGER RANGE 0 TO 9; -分别对应数码管的每一位-Show:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);-Show对应当前点阵显示状态-beep_flag:OUT STD_LOGIC);-beep_flag:蜂鸣器是否响了5秒的标志信号-END CountDow
42、n;ARCHITECTURE Controler OF CountDown ISSIGNAL ini_1: INTEGER RANGE 0 TO 40 := 29 ;-ini1对应30s倒计时的初始值-SIGNAL ini_2: INTEGER RANGE 0 TO 30 := 24 ;-ini2对应25s倒计时的初始值-SIGNAL ini_3: INTEGER RANGE 0 TO 20 := 14 ;-ini3对应15s倒计时的初始值-SIGNAL ini_4: INTEGER RANGE 0 TO 50 := 39 ;-ini4对应40s倒计时的初始值-SIGNAL ini_5: IN
43、TEGER RANGE 0 TO 80 := 69 ;-ini5对应70s倒计时的初始值-SIGNAL ini_6: INTEGER RANGE -1 TO 20 := 4 ;-ini6对应5s倒计时的初始值-SIGNAL ini_7: INTEGER RANGE 0 TO 30:= 15 ;-ini7对应15s倒计时的初始值-SIGNAL ini_8: INTEGER RANGE 0 TO 20:= 10 ;-ini8对应10s倒计时的初始值-SIGNAL ini_9: INTEGER RANGE -1 TO 20 := 4 ;-ini9对应5s倒计时的初始值-BEGINCountDown:
44、PROCESS(reset,clk_1,model_tmp,pause_tmp,cl_beeper)BEGINIF reset='1' THEN-复位信号-S1<=0;S2<=0;S3<=0;S4<=0;S5<=0;S5<=0; ini_1<=29;ini_2<=24;ini_3<=14;ini_4<=39;ini_5<=69; ini_6<= 4;ini_7<=15;ini_8<=10;ini_9<= 4;Show<="0000"beep_flag<=
45、39;0'ELSIF(clk_1'EVENT AND clk_1='1') THEN -开始-CASE model_tmp IS-0,初始状态-WHEN 0 =>S1<=2;S2<=9;S3<=0;S4<=7;S5<=9;S6<=9;Show<="0000"-1,洗涤-WHEN 1 =>S1<=0;S2<=1;S3<=ini_1 / 10;S4<=ini_1 rem 10;S5<=0;S6<=0;IF(pause_tmp='1')THEN
46、 IF(ini_1>0) THEN -总计时30s ini_1<=ini_1-1; IF(ini_6>=0) THEN -5s进水 Show<="0001" ini_6<=ini_6-1; S5<=0;S6<=ini_6 ; ELSIF(ini_7>0) THEN -15s洗衣 Show<="0011" ini_7<=ini_7-1; S5<=(ini_7-1) / 10;S6<=(ini_7-1) rem 10 ; ELSIF(ini_6+5>=0) THEN -5s排水 S
47、how<="0010" ini_6<=ini_6-1; S5<=0;S6<=ini_6+5; ELSE -5s甩干 Show<="0100" S5<=S3;S6<=S4-1; END IF; END IF; IF(S3 = 0 AND S4 = 1) THEN -蜂鸣器响 CASE cl_beeper IS WHEN '1'=> beep_flag<='0' WHEN OTHERS=> beep_flag<='1'END CASE;S6<
48、;=S4-1;Show<="0000" END IF;ELSE NULL;END IF;-2,漂洗-WHEN 2 =>S1<=0;S2<=2;S3<=ini_2 / 10;S4<=ini_2 rem 10;S5<=0;S6<=0;IF(pause_tmp='1')THEN IF(ini_2>0) THEN -总计时25 ini_2<=ini_2-1; IF(ini_6>=0) THEN -5s进水 Show<="0001" ini_6<=ini_6-1; S5&
49、lt;=0;S6<=ini_6; ELSIF(ini_8>0) THEN -10s漂洗 Show<="0011" ini_8<=ini_8-1; S5<=(ini_8-1) / 10;S6<=(ini_8-1) rem 10 ; ELSIF(ini_6+5>=0) THEN -5s排水 Show<="0010" ini_6<=ini_6-1; S5<=0;S6<=ini_6+5; ELSE -5s甩干 Show<="0100" S5<=S3;S6<=S
50、4-1; END IF; END IF; IF(S3 = 0 AND S4 = 1) THEN -蜂鸣器响 CASE cl_beeper IS WHEN '1'=> beep_flag<='0' WHEN OTHERS=> beep_flag<='1'END CASE;S6<=S4-1;Show<="0000" END IF;ELSE NULL;END IF;-3,脱水-WHEN 3 =>S1<=0;S2<=3;S3<=ini_3 / 10;S4<=ini_3 rem 10;S5<=0;S6<=0;IF(pause_tmp='1')THEN IF(ini_3>0) THEN -总计时15 in
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 检验员考试中的综合素养与技能要求分析试题及答案
- 2024年国际美术设计师考试题目及答案
- 学习技巧与2024年纺织品检验员试题及答案
- 2024年纺织工程师考试的参赛策略与试题及答案
- 2024年如何进行广告效果评估试题及答案
- 未来婚礼测试题及答案
- 村干部面试试题及答案
- 2024年助理广告师广告创意力测评试题及答案
- 助理广告师考试客户关系培养试题及答案
- 2024年助理广告师考试知识体系融合试题及答案
- 防洪度汛检查表
- 手术通知单模板
- GB∕T 26077-2021 金属材料 疲劳试验 轴向应变控制方法
- GB∕T 3853-2017 容积式压缩机 验收试验
- 招商合同范本4篇-合同范本
- 《二次函数图像与性质》学习评价量规
- 2019版人教版教材习题高中物理必修3
- 直肠类癌rectalcarcinoid课件
- 关于互联网金融对商业银行风险影响的实证研究会计学专业
- 第1课 古代埃及-部编版历史九年级上册课件(共16张PPT)
- 十八项电网重大反事故措施
评论
0/150
提交评论