2. 完整过程仿真波形 ? 波形1:
有上面的波形分析,cat为数码显示管的选通,在实验中,使用了cat1和cat0两个显示管,在start开始信号拉高之后,cat信号显示。Nextt为工作模式选择Led为模式选择灯,clr为复位按钮,拉高有效。
? 波形2:
由上面波形分析, start信号开始之后,开始工作,pause为暂停按钮,当pause拉高之后, pause_show灯亮,并停止当前的工作,由波形可看出数码显示管在停止期间没有变,当Pause变低之后,工作继续进行,pause_show灯灭。
第6页,共16页
? 波形3:
由上面波形,工作模式选的是第五种,洗衣、漂洗、脱水顺序进行,由state_now显示当前的工作状态,当洗衣、漂洗、脱水过程都结束之后,out_beeper发出警报声提醒使用者工作结束。
四. 源程序
(1)核心控制显示模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY controller IS
PORT( clk1s,pause:IN STD_LOGIC; 接收的时钟信号和暂停信号
start:IN STD_LOGIC; 工作开关
s1,s2,s3:IN INTEGER RANGE 0 TO 3; 从模式选择器接收来的三个基本状态的组合序
列
cl_beeper:IN STD_LOGIC; 清空和从报警器接受的报警信号
tim_out:OUT INTEGER RANGE 0 TO 30;输出时间
pause_show:OUT STD_LOGIC; 暂停显示
state_now:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);显示当前工作模式 startbeeper:OUT STD_LOGIC ;发给报警器的报警信号
第7页,共16页
);
END controller;
ARCHITECTURE a OF controller IS SIGNAL tim_tmp:INTEGER RANGE 0 TO 30;
SIGNAL state_over:INTEGER RANGE 0 TO 1; 某一工作状态完成后的反馈信号 SIGNAL s_now,s_next,s_last:INTEGER RANGE 0 TO 3; 内部信号,存储3个工作状
态
BEGIN
p1:PROCESS(clk1s,start,cl_beeper,state_over,pause,s_now) BEGIN
IF (clk1s'EVENT AND clk1s='1') THEN
CASE start IS WHEN '0'=> --开关置零
state_over<=1; s_now<=s1; s_next<=s2; s_last<=s3; WHEN '1'=>
--开关置1,开始工作
IF state_over=1 THEN state_over<=0; CASE s_now IS
WHEN 0=>
CASE cl_beeper IS
WHEN '1'=> startbeeper<='0'; WHEN OTHERS=> startbeeper<='1'; END CASE;
tim_tmp<=0;state_now<=\ WHEN 1=> tim_tmp<=20;state_now<=\
WHEN 2=> tim_tmp<=30;state_now<=\ WHEN 3=> tim_tmp<=15;state_now<=\ WHEN OTHERS=> NULL; END CASE;
CASE pause IS
WHEN '0'=> --暂停信号无效时,正常工作
pause_show<='0'; IF tim_tmp>0 THEN tim_out<=tim_tmp; tim_tmp<=tim_tmp-1; ELSE
第8页,共16页
ELSE
tim_out<=0; s_now<=s_next; s_next<=s_last; s_last<=0; state_over<=1;
END IF;
WHEN '1'=> pause_show<='1'; --暂停有效时,保持时间不变,WHEN OTHERS=> NULL;
同时点亮暂停状态灯
END CASE;
END IF;
WHEN OTHERS=> NULL;
END CASE; END IF;
END PROCESS; END;
(2)工作方式选择模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY choice IS
PORT( nextt:IN STD_LOGIC; 工作模式选择开关 start:IN STD_LOGIC;开始工作
s1,s2,s3:OUT INTEGER RANGE 0 TO 3; 选择后的初始状态,送到控制器
led:OUT STD_LOGIC_VECTOR(2 DOWNTO 0));显示当前模式 END choice;
ARCHITECTURE bodyofchoice OF choice IS TYPE choice_state IS (A,B,C,D,E); SIGNAL cs:choice_state;
BEGIN
P1:PROCESS(nextt) BEGIN
IF(nextt'EVENT AND nextt='1') THEN IF start='0' THEN
CASE cs IS --用一个按钮实现不同模式的选择,把相应初始状态组合装到s1-s3中,送到控制器去
when A=> s1<=1;s2<=0;s3<=0;led<=\ when B=> s1<=2;s2<=0;s3<=0;led<=\ when C=> s1<=3;s2<=0;s3<=0;led<=\
第9页,共16页
when D=> s1<=2;s2<=3;s3<=0;led<=\
when E=> s1<=1;s2<=2;s3<=3;led<=\ when others=>null; END CASE; END IF; END IF; END PROCESS P1; END bodyofchoice;
(3)分频模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY clk1000 IS
PORT(
clkcl:IN STD_LOGIC; clk1000:OUT STD_LOGIC); END clk1000;
ARCHITECTURE bodyofclk1000 OF clk1000 IS SIGNAL count1:INTEGER RANGE 0 TO 499; SIGNAL buf:STD_LOGIC; BEGIN
P1:PROCESS(clkcl) BEGIN
IF(clkcl'EVENT AND clkcl='1') THEN IF count1=499 THEN
buf<=NOT buf;clk1000<=buf; ELSE
clk1000<=buf; END IF;
count1<=count1+1; END IF;
END PROCESS P1;
END bodyofclk1000;
(4)选通译码模块
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY seg7 IS
PORT( start,en_app:IN STD_LOGIC; cp:IN STD_LOGIC;
第10页,共16页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库洗衣机VHDL控制器实验报告(2)在线全文阅读。
相关推荐: