《基于51单片机洗衣机课程设计报告11270.pdf》由会员分享,可在线阅读,更多相关《基于51单片机洗衣机课程设计报告11270.pdf(16页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、.-.可修编-单片机原理及系统课程设计 专 业:自动控制 班 级:控 1102 姓 名:学 号:指导教师:交通大学自动化与电气工程学院 2014 年 1 月 13 日 基于 51 单片机的洗衣机设计 1 设计目的、要求及原理 1.1 设计目的 评语:考勤 10 分 守纪 10 分 过程 30 分 设计报告 30 分 辩论 20 分 总成绩(100 分).1 由单片机控制实现洗衣机的各项功能,单片机的体积小,控制功能灵活,因此,设计出基于单片机的全自动洗衣机控制电路系统具有很强的实用性。用单片机设计出简单操作省水省电的洗衣机,在方便日常生活和节约资源方面都有重要意义。由于个人能力有限,我能设计的
2、洗衣机比前沿科技产品要差很多。所以我这次课设的主要目的在于通过亲手操作,查找资料,培养自己的分析设计能力。把这学期课程中零散的知识进展整合,将理论的知识联系到实际的生活中。在实例中深入理解一些理论知识,并从中有所收获,就是意义所在。1.2 设计要求 通过仿真软件模拟洗衣机的根本工作过程,如进水、洗涤、排水、漂洗、脱水等。1.3 设计方法 利用 89C51 单片机的 P0,P1,P2,P3 串行输入输出功能,控制数码管、电机、发光二极管的工作状态模拟洗衣机的根本工作过程。2 设计方案及原理 2.1 设计方案 洗衣机的主要工作程序是:进水洗涤排水进水漂洗排水脱水排水。上述工作程序中,主要包含三个过
3、程,洗涤过程、漂洗过程、脱水过程。(1)洗涤过程:放好待洗物,启动开关,进水阀通电,向洗衣机供水,当供水到达预定时间后,进水阀断电关闭,停顿供水。洗涤电动机接通电源,带动波轮(或桶)旋转,产生各种形式的水流搅动衣物进展洗涤。通过电动机不停的正转、反转,形成洗涤水对洗涤物产生强烈的翻滚作用。同时,衣物之间、衣物与四周桶壁之间产生互相摩擦和撞击力,以次到达洗涤衣物的目的。(2)漂洗过程:漂洗的目的在于去除衣物上的洗涤液。因此,在洗涤完毕之后,换水进展漂洗。漂洗过程与洗涤过程的电器动作是完全一样的。为了完全漂净衣服上的洗衣粉等,所以要屡次漂洗,在这次设计中漂洗次数设定为三次。(3)脱水过程:漂洗后,
4、需要对衣物进展脱水以便晾干,节省水资源,所以脱水是洗衣过程中必不可少的环节。漂洗过程完毕后,电动机停顿转动,排水阀通电,翻开排水阀门排水。当排水到达预定时间后,脱水电动机接通,电机带动脱水桶高速旋转,利用离心力把衣服上的水从桶壁的小眼里甩出。全部洗衣工作完成后,表示完毕的 LED 灯点亮,表示衣物已经洗好,洗衣机在这时就会自动停顿.1 工作。2.2 设计原理 本设计用 51 单片机实现对洗衣机的控制,通过功能选择开关可以选择洗衣机的工作模式。中选择好模式后洗衣机进入相应的工作状态。该模式的参数已装入单片机中,洗衣机在单片机中预先装入程序的控制下进展工作。程序实现的主要功能是洗涤,漂洗和脱水的控
5、制。其中洗涤时间设为96s,用sec 和 min 控制,其中 sec 代表分钟 min 代表秒。并且通过改变它们的值可以改变洗涤时间。用 P3.2 和 P3.3 控制电机的正反转通过它们上下不同的电平控制电流的方向,从而改变电机的转向。漂洗过程和洗涤过程较为相似,由于漂洗要屡次进展,所以用进水次数标志位flag1 控制漂洗的次数,当 flag1=2、3、4 时为漂洗过程。脱水过程是在出水次数 flag2 的控制下进展。当 flag2=4 时脱水,当脱水时间到达 0 后,脱水完毕,洗衣完毕,表示停顿的指示灯亮。图 1 系统组成框图 3 硬件设计 3.1 系统主要元器件 在本设计中主要使用了以下元
6、器件:AT89C51 芯片、74LS245 芯片、四数码管、发光二极管、直流电动机、三极管等。3.2 设计原理图 洗衣机的各项功能是由单片机控制实现的,单片机的体积小,控制功能灵活,因此,设计出基于单片机的全自动洗衣机控制电路系统具有很强的实用性采用 5l系列单片机作为控制核心,主要包括功能选择及控制电路、洗衣机工作状态显示 ATA89C51 按键输入 工作状态显示 电机控制 时间显示.1 及输出控制电路。控制电机正反转以及进水阀和排水阀的开启和关闭。如图 2 所示为设计原理图。图 2 硬件连接图 4 软件设计 4.1 主程序流程图 按下 K1 键,洗衣机从待命状态。当按下 K2 键后,51
7、单片机通过预先装入的程序控制各引脚的状态,让洗衣机才进入工作状态,以实现进水、洗衣、排水、漂洗、脱水、报警等根本功能。主程序流程图如图 3 所示。图 3 主程序流程图.-.可修编-5 系统仿真及实际调试 5.1 仿真结果 图 4 :系统仿真结果 5.1 问题分析 本电路为模拟洗衣机工作过程,所以进水和排水局部只能用输出引脚上的发光二极管表示工作状态,报警电路为脱水过程的保护电路,当脱水未完毕翻开洗衣机盖的时候,报警电路工作并断开电机电源,防止发生事故。6 总结 在本设计过软,硬件的配合设计,很好的实现了洗衣机的控制功能。本系统构造简单,控制功能强大,自动化程度高等特点。系统软硬件设计采用模块化
8、的设计方法,各模块功能相对独立,最后把它们整合在一起,大大的缩短了系统的设计周期。为保证洗衣机及人身平安,设计了报警电路。本设计还考虑半自动的设计,用户可以根据自己的需求自由选择洗衣机的工作方式,这一点是通过功能选择键实现的。通过这次单片机课程设计,不仅稳固了课本上所学的知识,而且更加深刻地认识到了单片机在生活中的重要地位,通过这次课程设计让我对单片机系统设计的过程与方法有了一定的认识,很好的培养了自己的创新设计能力。.-.可修编-参考文献 1 朝青.单片机原理及接口技术M.:航空航天,1999.2 顾滨.单片微计算机原理、开发及应用M.:高等教育,2000.3 王思明,金敏,苟军年等.单片机
9、原理及应用系统设计M:科学,2021.4 房小翠.单片机实用系统设计技术M.:国防工业,1990.-.可修编-附录 1 源程序*include*define uchar unsigned char*define uint unsigned int/*/sbit mo_r=P32;/电机右控制线 sbit mo_l=P33;/电机左控制线/*/sbit key_menu=P34;/菜单按键 sbit key_on=P35;/开场按键 sbit key_off=P36;/完毕按键 sbit key_se=P37;/菜单项选择择按键/*/sbit led_in=P00;/进水指示灯 sbit led
10、_*i=P01;/洗衣指示灯 sbit led_pao=P02;/泡洗指示灯 sbit led_*=P03;/脱水指示灯 sbit led_out=P04;/出水指示灯 sbit led_over=P05;/洗衣完毕指示灯 sbit led_work=P06;/电机工作指示灯 sbit led_wring=P07;/报警指示灯 sbit other=P31;/脱水电源控制开关 sbit anther=P30;/洗衣电源控制开关/*/uchar code num10=0*c0,0*f9,0*a4,0*b0,0*99,0*92,0*82,0*f8,0*80,0*90;/*/char sec=0;/
11、时间秒 char min=0;/时间分 uchar count=0;/中断计数 uchar flag0=0;/洗衣机工作状态标志 uchar flag1=0;/进水次数标志 uchar flag2=0;/出水次数标志 uchar flag3=0;/泡洗次数标志 uchar err=0;/报警标志 uchar quan=0;/正反转计数.1/*/void delay();/延时函数 void in();/进水子程序 void out();/出水子程序 void over();/完毕子程序 void*i();/洗衣子程序 void pao();/泡衣子程序 void*();/脱水子程序 void
12、on();/工作 on 处理子程序 void se();/显示菜单项选择择 void SEG_display();/显示时间子程序 void key_scan();/按键扫描子程序 void delay(uint i)uint*,y;for(*=i;*0;*-)for(y=120;y0;y-);/*工作 on 处理子程序*/void on()TMOD=0*01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;EA=1;ET0=1;TR0=1;P0=0*ff;if(flag0=0)in();if(flag0=1)*i();if(flag0=2)pao();
13、if(flag0=3)*();if(flag0=4)out();.1/*完毕子程序*/void over()other=0;anther=0;P0=0*ff;mo_r=0;mo_l=0;led_over=0;EA=0;/*进水子程序*/void in()anther=0;other=0;P0=0*ff;led_in=0;flag1+;mo_r=0;mo_l=0;min=0;sec=8;/*洗衣子程序*/void*i()anther=1;other=0;P0=0*ff;led_work=0;led_*i=0;mo_r=1;mo_l=0;min=1;sec=36;quan=0;/*泡衣子程序*/v
14、oid pao().1 anther=1;other=0;P0=0*ff;led_pao=0;led_work=0;flag3+;mo_r=1;mo_l=0;min=1;sec=35;quan=0;/*脱水子程序*/void*()other=1;anther=0;P0=0*ff;led_*=0;mo_r=0;mo_l=1;min=0;sec=50;/*出水子程序*/void out()anther=0;other=0;P0=0*ff;led_out=0;flag2+;mo_r=0;mo_l=0;min=0;sec=5;/*显示菜单项选择择*/void se()P0=0*ff;.1 if(fla
15、g0=5)flag0=0;if(flag0=0)led_in=0;if(flag0=1)led_*i=0;if(flag0=2)led_pao=0;if(flag0=3)led_*=0;if(flag0=4)led_out=0;/*菜单处理子程序*/void menu()min=0;sec=0;mo_r=0;mo_l=0;SEG_display();while(1)if(key_on=0)delay(5);if(key_on=0)while(!key_on);.1 on();break;/*/if(key_off=0)delay(5);if(key_off=0)while(!key_off);
16、over();break;/*/if(key_se=0)delay(5);if(key_se=0)while(!key_se);flag0+;se();/*按键扫描子程序*/void key_scan()if(key_menu=0)delay(5);if(key_menu=0)while(!key_menu);menu();.1 /*/if(key_on=0)delay(5);if(key_on=0)while(!key_on);on();/*/if(key_off=0)delay(5);if(key_off=0)while(!key_off);over();/*显示子程序*/void SEG
17、_display()P1=0*01;P2=nummin/10;delay(10);P1=0*02;P2=nummin%10;delay(10);P1=0*04;P2=numsec/10;delay(10);P1=0*08;P2=numsec%10;delay(10);/*主函数*/.1 void main()led_in=0;anther=0;other=0;while(1)SEG_display();key_scan();/*定时器 0 中断处理程序*/void timer0()interrupt 1 TH0=(65536-50000)/256;TL0=(65536-50000)%256;c
18、ount+;if(count=20)count=0;sec-;if(flag0=1)|(flag0=2)quan+;switch(quan)case 1:mo_r=1;mo_l=0;break;case 10:mo_r=0;mo_l=0;break;case 15:mo_r=0;mo_l=1;break;case 25:mo_r=0;mo_l=0;break;default:;if(quan=30)quan=0;/*/if(sec=0)&(min!=0).1 min-;sec=59;/*/if(sec0)&(min=0)&(flag0=0)/进水完毕 switch(flag1)case 1:f
19、lag0=1;*i();break;case 2:flag0=2;pao();break;case 3:flag0=2;pao();break;case 4:flag0=2;pao();break;default:err=1;led_wring=0;/*/if(sec0)&(min=0)&(flag0=1)/洗衣完毕 flag0=4;out();/*/if(sec0)&(min=0)&(flag0=2)/泡衣完毕 switch(flag3)case 1:flag0=4;out();break;case 2:flag0=4;out();break;case 3:flag0=4;out();break;default:err=1;led_wring=0;/*/if(sec0)&(min=0)&(flag0=4)/出水完毕 switch(flag2)case 1:flag0=0;in();break;.1 case 2:flag0=0;in();break;case 3:flag0=0;in();break;case 4:flag0=3;*();break;default:err=1;led_wring=0;/*/if(sec0)&(min=0)&(flag0=3)sec=0;over();