智能洗衣机Word格式文档下载.docx
《智能洗衣机Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《智能洗衣机Word格式文档下载.docx(18页珍藏版)》请在冰点文库上搜索。
洗衣->
排水->
甩干->
漂洗->
甩干
->
甩干。
【模式4】:
【模式5】:
【要求】:
实现逻辑控制过程,可以选择性的加入注水口无水报警等人性化的状态提示,操作完毕使用蜂鸣器鸣叫两秒提示。
3、画出洗衣机控制器的状态机,写出状态编码方案。
4、用Verilog语言对设计进行描述,设计一个测试方案,并能够下载到实验板上调试成功。
5、写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。
并谈谈此次实验的收获、感想及建议
3、分析设计
1、五个模式:
模式1、模式2、模式3、模式4、模式5
四个状态:
注水、洗衣(漂洗)、排水、甩干
2、端口描述:
输入端口:
Cp:
输入50Mhz的频率信号
Cr:
清零信号
Model1—5:
模式选择
输出端口:
Export:
显示模式
Light:
洗衣完成显示灯
3、状态流程图
4、模块设计
1、分频模块
因为出入的是频率为50Mhz的方波,要变成频率为1hz的方波,必须对其进行分频。
代码如下:
modulefenpin(in,out);
inputin;
outputout;
reg[24:
0]cnt;
regout;
always@(posedgein)
begin
if(cnt>
='
d249999)
out<
=~out;
cnt<
=0;
end
else
=cnt+1;
Endmodule
波形仿真如下:
(由于50M是一个很大的数字,故仿真时看不到输出波形的跳变)
2、译码模块
时间需要用数码管显示出来,故必须对由七段显示器组成的数码管进行译码。
moduleyima(out,in);
input[3:
0]in;
output[6:
0]out;
reg[6:
always@(in)
begin
case(in)
4'
h0:
out=7'
b1000000;
4'
h1:
b1111001;
h2:
b0100100;
h3:
b0110000;
h4:
b0011001;
h5:
b0010010;
h6:
b0000010;
h7:
b1111000;
h8:
b0000000;
h9:
b0011000;
endcase
end
Endmodule
仿真波形如下(假设输入为十进制5)
说明:
输入为0101(即十进制数5),输出的为十进制数18(二进制0010010,即第二位和第五位为1),显示在数码管上的恰好是十进制数5。
3、计数模块(60进制减计数器)
程序片段:
begin
if(Second[3:
0]!
=0)
Second[3:
0]<
=Second[3:
0]-4'
d1;
elseif(Second[3:
0]==0&
Second[7:
4]!
=0)
=4'
d9;
4]<
=Second[7:
4]-4'
elseif(Second[7:
4]==0&
Minute[3:
=0)
=4'
d5;
=Minute[3:
end
Minute[7:
4]!
=Minute[7:
4]-4'
End
5、各个模式的仿真
1、模式1的仿真
2、模式2的仿真
3、模式3的仿真
4、模式4的仿真
5、模式5的仿真
六、总结和感想
本次课程设计我做的是智能洗衣机控制系统,一共花了四个礼拜的时间。
刚开始选定题目之后,自己还是无从下手。
跟以前做c语言课程设计一样,一开始总是很迷茫。
后来在网上查到,要做这样的一个课程设计,必须先弄清楚要做的是什么,需要实现哪些功能,然后通过所需要的功能,画出设计流程图,这个是很重要的。
在这种思想的指导下,我先对智能洗衣机控制系统做了详细的分析,把这个设计主要分为五个模式,四个状态。
这样分析之后,工作就变得很明确起来。
首先,必须先完成分频模块和译码模块,这两个模块没有什么难度,很快就完成了。
虽然一共有五个模式,四个状态,但是我知道,只要完成了其中的一个模式和一个状态,其他的就可以很快的做出来。
由于以前对verilog语言不是很熟悉,因此遇到了一些困难。
比如,我不清楚case语句里面还能不能继续镶嵌case语句,但是通过编写了一个简单程序实验之后,我发现这是可以的。
我知道,verilog语言是这次课程设计的基础,没有坚实的verilog语言基础是不能完成这次课程设计的,为此,我还重新去吧verilog语言看了一遍,以强化自己的基础。
尽管这是一次个人独立的课程设计,但是我认为同学之间的交流和讨论还是很重要的。
通过交流和讨论,我们可以各取所长,以弥补自己的不足,这样可以减少很多弯路。
但是我也知道绝知此事要躬行,我们不能完全参考同学的,我们必须有自己的想法,遇到那种不确定的问题,最好自己去亲自试验一次,这个才能得到自己想要的东西,而且还会从中获取意想不到的乐趣。
从刚拿到题目时候的无从下手,到现在做完之后感觉其实这次课程设计还是蛮简单的。
我觉得这就是一种能力的增加,一种知识的积累。
课程设计结束了,我们都有了自己的课设产品。
但是我想说的是通过这样的课程设计,我们所获得的不仅仅是结果,而是这样一个过程,一个学习、进步、分享、享受、积累的过程。
对于我们来说,在这次课程设计中学习到得东西才是最重要的。
无论是知识还是方法,都让我们受益匪浅。
附:
程序详细代码
modulefenpin(in,out);
inputin;
outputout;
reg[24:
regout;
always@(posedgein)
if(cnt>
else
moduleyima(out,inG);
reg[6:
0]out;
moduleWash(cp,rct,moshi,out,over,hm,lm,hs,ls);
inputcp,rct;
input[4:
0]moshi;
output[4:
outputover;
output[6:
0]hm,lm,hs,ls;
reg[4:
regover;
reg[7:
0]sec,min;
regxop;
0]zhuangtai;
reg[3:
0]bu;
wireFinish;
parameter
zhuangtai1=4'
b0001,zhuangtai2=4'
b0010,
zhuangtai3=4'
b0011,zhuangtai4=4'
b0100,Cloze=4'
b0110;
assignFinish=((sec[3:
0]==0)&
(sec[7:
4]==0)&
(min[3:
(min[7:
4]==0));
always@(posedgecps)
if(~rct)
begin
zhuangtai<
=zhuangtai1;
xop<
=1'
b0;
sec[3:
0]<
sec[7:
4]<
min[3:
min[7:
bu<
end
if(zhuangtai==Cloze)
over<
b0001;
else
over<
b0000;
if(sec[3:
sec[3:
=sec[3:
elseif(sec[3:
sec[7:
=sec[7:
elseif(sec[7:
min[3:
=min[3:
min[7:
=min[7:
if((Finish==1)&
(rct==1))
case(moshi)
5'
b00001:
case(zhuangtai)
zhuangtai1:
begin
if(bu>
b1100)zhuangtai<
=Cloze;
else
begin
min[7:
=5;
sec[3:
=9;
zhuangtai<
=zhuangtai2;
bu<
=bu+2'
b1;
end
end
zhuangtai2:
if(xop==0)
beginmin[7:
=2;
=zhuangtai3;
xop<
end
=4;
end
zhuangtai3:
beginmin[7:
zhuangtai<
=zhuangtai4;
bu<
zhuangtai4:
default:
zhuangtai<
endcase
5'
b00010:
=1;
b00100:
b01000:
zhuangtai1:
b0111)zhuangtai<
beginmin[7:
b10000:
case(zhuangtai)
zhuangtai<
default:
zhuangtai<
endcase
always@(zhuangtai)
case(zhuangtai)
zhuangtai1:
out<
=5'
b01000;
zhuangtai2:
b00001;
zhuangtai3:
b00010;
zhuangtai4:
b00100;
Cloze:
b10000;
yima(lm,min[3:
0]);
yima(hm,min[7:
4]);
yima(ls,sec[3:
yima(hs,sec[7:
fenpin(cp,cps);
endmodule