电子电子课程设计-智能洗衣机控制器的设计_第1页
电子电子课程设计-智能洗衣机控制器的设计_第2页
电子电子课程设计-智能洗衣机控制器的设计_第3页
电子电子课程设计-智能洗衣机控制器的设计_第4页
电子电子课程设计-智能洗衣机控制器的设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2013-2014学年度第二学期电子电子课程设计智能洗衣机控制器全套设计加扣 3346389411或3012250582院 系: 自动化学院 班 级: 自动化1104班 姓 名: 学 号: 指导教师: 一、课程设计名称智能洗衣机控制器的设计二、设计内容与要求 设计一个智能洗衣机控制器,能够实现洗衣,漂洗和脱水的功能。要求能够使用按键模拟对洗衣机的控制,能够设置工作模式,为了便于观察,将洗衣机设定的工作模式(15)和整个过程所剩的工作时间用数码管显示出来(时间分辨率为1分钟),能够将洗衣机当前所处的状态(注水,洗衣,排水,甩干)用发光管或者数码管显示出来。【模式1】 :洗衣模式强力洗( 洗衣30

2、分钟)【模式2】 :洗衣模式普通洗(洗衣20分钟)【模式3】 :洗衣模式轻柔洗(洗衣10分钟)【模式4】 :漂洗模式【模式5】 :甩干模式注:在以上5个模式中,每次注水1分钟,漂洗5分钟,排水1分钟,甩干1分钟,模式13的洗衣时间如上所示,具体的洗衣步骤如下:【模式13】:注水->洗衣->排水->甩干->注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。【模式4】:注水->漂洗->排水->甩干->注水->漂洗->排水->甩干。【模式5】:甩干。【要求】:实现逻辑控制过程,可以

3、选择性的加入注水口无水报警等人性化的状态提示,操作完毕使用蜂鸣器鸣叫两秒提示。 画出洗衣机控制器的状态机,写出状态编码方案。 用Verilog语言对设计进行描述,设计一个测试方案,并能够下载到实验板上调试成功。 写出设计性实验报告,并打印各层次的源文件和仿真波形,然后作简要说明。 并谈谈此次实验的收获、感想及建议洗衣机控制器输出显示核心运算模块输入控制模块数码管显示LCD显示拨码开关控制时序控制状态转换三、系统设计1.系统框图与说明本次设计的重点在于智能控制器的状态转换和时序控制状态之间的条件和关系,并且在此基础上输出相应的显示算法。2.状态转换图洗衣机共分为5个模式,4个状态。模式分别为MO

4、DE1强力洗,MODE2普通洗,MODE3轻柔洗,MODE4漂洗,MODE5甩干;状态分别为state0注水,state1洗衣,state2排水,state3甩干。另外,为使洗衣机增添功能,添加了两个个状态,一个为初始状态state00,另一个为finish,即为洗衣完成时的状态。State1漂洗State2排水State3甩干Dry完成FinishState0注水AddState00初始等待状态转换图3.输入输出设计(按键,数码管,LCD,键盘,蜂鸣器)(1)输出显示部分:A.LCD显示屏(拓展):用于显示洗衣机出于何种工作模式,采用的型号为1602显示屏,4位数据输入,接5V供电电源。模块

5、: lcd lcd(R, clk, LCD_E, LCD_RW, LCD_RS, SF_D);lcd_pre lcd_pre(clk, state_dis, R);显示内容: 7'b1100000: R <= " Strong " 强力洗 7'b1000000: R <= " Middle " 普通洗 7'b0100000: R <= " Soft " 轻柔洗 7'b0010000: R <= " Add " 注水 7'b0001000: R <

6、= " Potch " 漂洗 7'b0000100: R <= " Drain " 排水 7'b0000010:R <= " Dry " 甩干 7'b0000001:R <= " Finish " 完成 default R <= " Welcome " 初始状态B.数码管:用于显示剩余时间,使用开发板自带的4个数码管。将四位时间分别写入四个数码管中。(2)输入控制部分:拨码开关(8个键):5个键控制5种模式,复位键(reset1)个,时间速度控制键

7、1个,无水警报键1个;模块:Module act(clk1,clk2,clk_sel,clr,sel,warn,state_dis,dis_ts1,dis_ts2,dis_tm1,dis_tm2,LEDW);4.核心运算模块(1)时序控制:通过设置tm1,tm2,ts1,ts2四个变量,对每个状态进行计时,达到时序控制的作用。B.状态转换:三、系统仿真1 各工作模式仿真波形 mode1状态转换 mode2状态转换 mode3状态转换 mode4状态转换 mode5状态转换四、实验总结1.概况:本次课设为期5周,在经历了选题和换题之后,我最终选择了智能洗衣机控制器这一题。通过查阅资料,上网搜索类

8、似的代码作为参考,我最终完成了该项课程设计的工作。2.反思:这次课程设计暴露了自己很多问题。之前大二时学的Verilog语言已经忘记差不多了,所以课设的时候算是重新捡起。开始的时候很浮躁,不知道该怎样去搭建整个程序的框架,之后真正静下心来去做才逐渐理解了电路设计的特点以及方法。另外自己缺乏钻研精神,课设是一次很好的锻炼机会,但自己更多的只是完成了题目以内的东西,没能想办法弄出有特色、更加切合于现实应用的成果。3.收获:这次的课程设计让我熟悉了有关电路设计方面的工作,实现了将所学和所用相结合的效果。首先,关于Verilog HDL语言,我有了比之前实验课所学更深刻的认识。其次,通过搭构一个系统,

9、清楚了电路实现系统功能的整体过程。另外,由于很多资料需要自己从网络等渠道查找,这个过程锻炼了我对信息的筛选和检索能力,更加清楚自己需要什么。最后,这次电子课设让我明白任何事情的成功都贵在坚持,只有抗住压力、直面问题,才能最终将其解决,获得理想的结果。附录:源程序1.顶层模块module washing(clk,clr,clk_sel,sel,state_dis,warn,led0,led1,led2,led3,LEDW,LCD_E, LCD_RW, LCD_RS, SF_D);input clk,clr,warn,clk_sel; /时钟,清零,警告,时钟选择input 4:0 sel; /模

10、式选择output 7:0 led0,led1,led2,led3; /数码管显示剩余时间output LEDW; /警告灯output 6:0 state_dis; /目前状态 output LCD_E, LCD_RW, LCD_RS; output 11:8 SF_D; /LCD_transversewire LEDW;wire7:0 led;wire clk1,clk2,clk3; /不同频率时钟wire6:0 state_dis; /状态标量 wire3:0 state;wire3:0 ts1,ts2,tm1,tm2; /每个状态剩余时间 wire79:0 R;reg 3:0 mode

11、; division div(clk,clk1,clk2,clk3,num); lcd lcd(R, clk, LCD_E, LCD_RW, LCD_RS, SF_D);lcd_pre lcd_pre(clk, state_dis, R);display dis(led0,led1,led2,led3,ts1,ts2,tm1,tm2);act main(clk1,clk2,clk_sel,clr,sel,warn,state_dis,ts1,ts2,tm1,tm2,LEDW);endmodule2.核心运算模块: module act(clk1,clk2,clk_sel,clr,sel,war

12、n,state_dis,dis_ts1,dis_ts2,dis_tm1,dis_tm2,LEDW);input clk1,clk2,clk_sel,clr,warn;input4:0 sel;output LEDW;output6:0 state_dis;output3:0 dis_ts1,dis_ts2,dis_tm1,dis_tm2;reg3:0 dis_ts1,dis_ts2,dis_tm1,dis_tm2;reg3:0 ts1,ts2,tm1,tm2;reg LEDW;reg6:0 state_dis;reg3:0 state;reg3:0 mode;reg1:0 step;reg f

13、lag;wire clk;wire fin;parameter state0=4'b0001, state1=4'b0010,/*状态编码,采用二进制编码方式*/ state2=4'b0011, state3=4'b0100, state11=4'b0110, state12=4'b0111, state13=4'b1000, close=4'b0101, state00=4'b0000;assign fin=(ts2=0) & (ts1=0) & (tm2=0) & (tm1=0);/一个模式完成

14、后方可读取下一个输入 assign clk =(clk_sel=0)?clk2:clk1); /时间速度调节always (posedge clk)/*该进程定义起始方式*/beginLEDW <= warn; /*无水报警时发光管发光*/if(!warn)begin case(state) state11: state_dis<=7'b1100000; state12: state_dis<=7'b1000000; state13: state_dis<=7'b0100000; state0: state_dis<=7'b0010

15、000; state1: state_dis<=7'b0001000; state2: state_dis<=7'b0000100; state3: state_dis<=7'b0000010; close: state_dis<=7'b0000001; endcase beginif(state = state00)|(state=close)case(sel) /*模式编码,采用二进制编码方式*/5'b00001:begin mode<=4'b0001; dis_tm1<=4;dis_tm2<=8;

16、dis_ts1<=5; dis_ts2<=9; end5'b00010:begin mode<=4'b0010; dis_tm1<=3;dis_tm2<=8; dis_ts1<=5; dis_ts2<=9; end5'b00100:begin mode<=4'b0011; dis_tm1<=2;dis_tm2<=8; dis_ts1<=5; dis_ts2<=9; end5'b01000:begin mode<=4'b0100; dis_tm1<=1;dis_tm

17、2<=5; dis_ts1<=5; dis_ts2<=9; end5'b10000:begin mode<=4'b0101; dis_tm1<=0;dis_tm2<=0; dis_ts1<=5; dis_ts2<=9; enddefault: begin mode<=4'b0000; dis_tm1<=0;dis_tm2<=0; dis_ts1<=0; dis_ts2<=0;endendcaseend /*初始化*/if(clr) beginstate<=state00;flag<

18、=1'b0;step<=2'b00;tm1<=0;tm2<=0;ts1<=0;ts2<=0;state_dis<=7'b0000000;dis_tm1<=0;dis_tm2<=0; dis_ts1<=0; dis_ts2<=0;end/*该部分控制数码管总倒计时*/begin if(dis_ts2!=0) dis_ts2 <= dis_ts2 - 4'd1; else if(dis_ts2=0 & dis_ts1 != 0) begin dis_ts2 <=4'd9; dis

19、_ts1 <= dis_ts1-4'd1; end else if(dis_ts2=0 & dis_ts1=0 & dis_tm2!=0) begin dis_ts2 <= 4'd9; dis_ts1 <= 4'd5; dis_tm2 <= dis_tm2 - 4'd1; end else if(dis_ts2=0 & dis_ts1=0 & dis_tm2=0 & dis_tm1!=0) begin dis_ts2 <= 4'd9; dis_ts1 <= 4'd5; d

20、is_tm2 <= 4'd9; dis_tm1 <= dis_tm1 - 4'd1; endend/*该部分控制各状态分别倒计时*/begin if(ts2!=0) ts2 <= ts2 - 4'd1; else if(ts2=0 & ts1 != 0) begin ts2 <=4'd9; ts1 <= ts1-4'd1; end else if(ts2=0 & ts1=0 & tm2!=0) begin ts2 <= 4'd9; ts1 <= 4'd5; tm2 <

21、= tm2 - 4'd1; end else if(ts2=0 & ts1=0 & tm2=0 & tm1!=0) begin ts2 <= 4'd9; ts1 <= 4'd5; tm2 <= 4'd9; tm1 <= tm1 - 4'd1; endend /*该进程控制各模式状态之间的转换*/if(fin)case(mode) 4'b0001:case(state)/*MODE1的状态转换*/state00:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;

22、 state<=4'b0001; endstate0:beginif(flag=0)begintm1<=2;tm2<=9;ts1<=5;ts2<=9;state<=4'b0110;flag<=1'b1;endelsebegintm1<=0;tm2<=4;ts1<=5;ts2<=9;state<=4'b0010;endend4'b0110:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0011;end4

23、9;b0010:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0011;end4'b0011:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0100;end4'b0100:beginif(step=2'b10)beginstate<=close;flag<=1'b0;step<=2'b00;endelsebegintm1<=0;tm2<=0;ts1<=5;ts2&l

24、t;=9;state<=state0;step<=step+2'b1;endenddefault:state<=close;endcase4'b0010:case(state)/*MODE2的状态转换*/state00:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0001;endstate0:beginif(flag=0)begintm1<=1;tm2<=9;ts1<=5;ts2<=9;state<=4'b0111;flag<=1'

25、;b1;endelsebegintm1<=0;tm2<=4;ts1<=5;ts2<=9;state<=4'b0010;end end4'b0111:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0011;end4'b0010:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0011;end4'b0011:begintm1<=0;tm2<=0;ts1<=5;ts2&

26、lt;=9;state<=4'b0100;end4'b0100:beginif(step=2'b10)beginstate<=close;flag<=1'b0;step<=2'b00;endelsebegintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=state0;step<=step+2'b1;endenddefault:state<=close;endcase4'b0011:case(state)/*MODE3的状态转换*/state00:be

27、gintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0001;endstate0:beginif(flag=0)begintm1<=0;tm2<=9;ts1<=5;ts2<=9;state<=4'b1000;flag<=1'b1;endelsebegintm1<=0;tm2<=4;ts1<=5;ts2<=9;state<=4'b0010;endend4'b1000:begintm1<=0;tm2<=0;ts1<=

28、5;ts2<=9;state<=4'b0011;end4'b0010:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0011;end4'b0011:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0100;end4'b0100:beginif(step=2'b10)begin state<=close;flag<=1'b0; step<=2'b00;ende

29、lsebegintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=state0;step<=step+2'b1;endenddefault:state<=close;endcase 4'b0100:begin /*MODE4的状态转换*/case(state)4'b0000:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=state+4'b0001; end4'b0001:begintm1<=0;tm2<=4;ts1&l

30、t;=5;ts2<=9;state<=state+4'b0001;end4'b0010:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=state+4'b0001;end4'b0011:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=state+4'b0001;end4'b0100: begin if(flag=0) begintm1<=0;tm2<=0;ts1<=5;ts2<=9;sta

31、te<=4'b0001;flag<=flag+1'b1;endelse beginstate<=close;flag<=1'b0;endenddefault:state<=close;endcaseend4'b0101:begin /*MODE5的状态转换*/case(state)4'b0000:begintm1<=0;tm2<=0;ts1<=5;ts2<=9;state<=4'b0100;end4'b0100:beginstate<=close;enddefaultsta

32、te<=close;endcaseenddefault:state<=state00;/*default语句,避免锁存器的产生*/ endcaseendendendmodule3.数码管显示模块:module display(segout0,segout1,segout2,segout3,ts1,ts2,tm1,tm2);input 3:0 ts1,ts2,tm1,tm2;output 7:0 segout0,segout1,segout2,segout3;reg 7:0 segout0,segout1,segout2,segout3;always(ts13:0)begincase

33、(ts13:0)4'b0000 : segout1 <= 8'b11000000;4'b0001 : segout1 <= 8'b11111001;4'b0010 : segout1 <= 8'b10100100;4'b0011 : segout1 <= 8'b10110000;4'b0100 : segout1 <= 8'b10011001;4'b0101 : segout1 <= 8'b10010010;4'b0110 : segout1 <=

34、8'b10000010;4'b0111 : segout1 <= 8'b11111000;4'b1000 : segout1 <= 8'b10000000;4'b1001 : segout1 <= 8'b10010000;4'b0000 : segout1 <= 8'b11000000;default : segout1 <= 8'bxxxxxxxx;endcaseendalways(ts23:0)begincase(ts23:0)4'b0000 : segout0 <=

35、 8'b11000000;4'b0001 : segout0 <= 8'b11111001;4'b0010 : segout0 <= 8'b10100100;4'b0011 : segout0 <= 8'b10110000;4'b0100 : segout0 <= 8'b10011001;4'b0101 : segout0 <= 8'b10010010;4'b0110 : segout0 <= 8'b10000010;4'b0111 : segou

36、t0 <= 8'b11111000;4'b1000 : segout0 <= 8'b10000000;4'b1001 : segout0 <= 8'b10010000;4'b0000 : segout0 <= 8'b11000000;default : segout0 <= 8'bxxxxxxxx;endcaseendalways(tm13:0)begincase(tm13:0)4'b0000 : segout3 <= 8'b11000000;4'b0001 : sego

37、ut3 <= 8'b11111001;4'b0010 : segout3 <= 8'b10100100;4'b0011 : segout3 <= 8'b10110000;4'b0100 : segout3 <= 8'b10011001;4'b0101 : segout3 <= 8'b10010010;4'b0110 : segout3 <= 8'b10000010;4'b0111 : segout3 <= 8'b11111000;4'b100

38、0 : segout3 <= 8'b10000000;4'b1001 : segout3 <= 8'b10010000;4'b0000 : segout3 <= 8'b11000000;default : segout3 <= 8'bxxxxxxxx;endcaseendalways(tm23:0)begincase(tm23:0)4'b0000 : segout2 <= 8'b11000000;4'b0001 : segout2 <= 8'b11111001;4'b00

39、10 : segout2 <= 8'b10100100;4'b0011 : segout2 <= 8'b10110000;4'b0100 : segout2 <= 8'b10011001;4'b0101 : segout2 <= 8'b10010010;4'b0110 : segout2 <= 8'b10000010;4'b0111 : segout2 <= 8'b11111000;4'b1000 : segout2 <= 8'b10000000;4

40、'b1001 : segout2 <= 8'b10010000;4'b0000 : segout2 <= 8'b11000000;default : segout2 <= 8'bxxxxxxxx;endcaseendendmodule4.LCD显示模块module lcd_pre(clk, state_dis, R); /lcd显示信息处理input clk;input 6:0 state_dis;output79:0 R;reg79:0 R;always(posedge clk) case(state_dis)/ R <= &q

41、uot; Welcome! " 7'b1100000: R <= " Strong " 7'b1000000: R <= " Middle " 7'b0100000: R <= " Soft " 7'b0010000: R <= " Add " 7'b0001000: R <= " Potch " 7'b0000100: R <= " Drain " 7'b0000010:

42、R <= " Dry " 7'b0000001: R <= " Finish " default R <= " Welcome! " endcaseendmodulemodule lcd(R, clk_50, LCD_E, LCD_RW, LCD_RS, SF_D);input clk_50;input 79:0 R;output LCD_E, LCD_RW, LCD_RS;output 11:8 SF_D;/transversereg79:0 r;reg7:0 bus;reg lcd_e = 1'b

43、0;reg lcd_rw;reg lcd_rs;reg3:0 sf_d;reg7:0 ddram;reg9:0 state = 10'b00_0000_0000;reg19:0 cnt = 20'd0;assign LCD_E = lcd_e;assign LCD_RW = lcd_rw;assign LCD_RS = lcd_rs;assign SF_D = sf_d;/flagreg3:0 i = 4'b0000;parameter/initiationIdle = 10'b00_0000_0000,Init1 = 10'b00_0000_0001,

44、Init3 = 10'b00_0000_0011,Init5 = 10'b00_0000_0101,Init7 = 10'b00_0000_0111,/clear screenClear = 10'b01_0000_0001,Clear_upper = 4'b0000,Clear_lower = 4'b0001,/return cursorReturn_cursor = 10'b01_0000_0010,Return_cursor_upper = 4'b0000,Return_cursor_lower = 4'b0010,

45、/entry mode set/bit db1 choose incrementa ddress(1) or decrement address(0)/bit db0 choose shift disable(0) or shift(1)Entry_mode = 10'b01_0000_0110,Entry_mode_upper = 4'b0000,Entry_mode_lower = 4'b0110,/display on/off/bit db2 choose display on character(1) or no charaacters displayed(0)

46、/bit db1 choose display(1) cursor or no display(0)/bit db0 choose blink(1) cursor or no blink(0)Display = 10'b01_0000_1110,Display_upper = 4'b0000,Display_lower = 4'b1100, /cursor and display shiftCursor_display = 10'b01_0001_0011,Cursor_display_upper = 4'b0001,Cursor_display_low

47、er = 4'b0011,/function setFunctionset = 10'b01_0010_1000,Functionset_upper = 4'b0010,Functionset_lower = 4'b1000,Set_ddram1 = 10'b10_1000_0000,Set_ddram2 = 10'b10_1000_0001,Write = 10'b10_0000_0000,Wait = 10'b11_1111_1111;reg inited;reg79:0 mm;reg a0;/assign S_LED7:0

48、= R79:72;always (posedge clk_50)beginbeginif(!inited)begincase(state)Idle:beginif(cnt = 20'd760000)/15.2msbeginstate <= Init1;cnt <= 20'd0;endelsecnt <= cnt+1;endInit1:beginif(cnt = 20'd210015)/wait4.2msbeginstate <= Init3;cnt <= 20'd0;endelsecnt <= cnt+1;endInit3:b

49、eginif(cnt = 20'd5115)beginstate <= Init5;cnt <= 20'd0;endelsecnt <= cnt+1;endInit5:beginif(cnt = 20'd2115)beginstate <= Init7;cnt <= 20'd0;endelsecnt <= cnt+1;endInit7:beginif(cnt = 20'd2115)beginstate <= Functionset;cnt <= 20'd0;endelsecnt <= cnt+1;endF

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论