基于单片机的洗衣机设计Word格式.docx
《基于单片机的洗衣机设计Word格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的洗衣机设计Word格式.docx(24页珍藏版)》请在冰豆网上搜索。
![基于单片机的洗衣机设计Word格式.docx](https://file1.bdocx.com/fileroot1/2023-1/9/96d4436a-3137-40f5-84d2-88d6b2034fa8/96d4436a-3137-40f5-84d2-88d6b2034fa81.gif)
进水—洗涤—漂洗—换水—漂洗—换水—漂洗—换水—脱水—结束。
上述工作过程中,包含三个过程:
洗涤过程、漂洗过程、脱水过程。
(1)洗涤过程:
放好待洗物,启动开关,进水阀通电,向洗衣机供水,供水结束后,洗涤电动机接通电源,通过电机不停的正转、反转,形成洗涤水对洗涤物产生强烈的翻滚作用;
同时衣物之间、衣物与四周桶壁之间产生互相摩擦和撞击力,达到洗涤衣物的目的。
(2)漂洗过程:
漂洗的目的在于清除衣物上的洗涤液,因此,漂洗过程与洗涤过程的电机动作是完全相同的。
(3)脱水过程:
漂洗过程结束后,电动机停止转动,排水阀通电,打开排水阀门排水。
当排水到一定程度,满足安全条件时,脱水电动机接通,电机带动脱水桶高速旋转,利用离心力把衣服上的水从桶壁的小眼里甩出。
全部洗衣工作完成后,结束指示的LED灯点亮,表示衣物已经洗好,洗衣机就会自动停止工作。
2.2设计原理
系统设计包括晶振和复位模块,电机驱动模块,LED显示模块,按键控制模块以及数码管显示模块五部分。
利用AT89C51单片机芯片,芯片左排引脚外接晶振和复位电路,通过74LS245锁存器连接至数码管,控制数码管稳定显示。
右排引脚外接电机驱动电路和各开关以及LED灯。
通过人工按压相应的开关,接通电机驱动电路相应的接线端子,实现电机正反转以及LED显示。
总体设计原理框图如图1所示。
图1系统原理框图
通过对开关的操作实现选择想要进行的任何操作。
当选择好模式后进入该模式。
该模式的参数已装入在单片机中,在单片机中程序的控制下进行工作。
程序实现的主要功能是洗涤,漂洗和脱水的控制。
其中洗涤时间设初值为136s,由于洗衣过程中电机要不停的正反转,所以用P3.2和P3.3控制。
通过流经电机两端电平的高低控制电流的流向,从而改变电机的转向,实现正反转。
漂洗过程和洗涤过程较为相似,由于漂洗要多次进行,所以用进水次数标志位flag1控制,当flag1为2,3,4时为漂洗过程。
脱水过程是在出水次数flag2的控制下进行。
当flag2为4时脱水,当脱水时间到达0后,脱水结束,洗衣结束。
上述三个过程中电机工作利用晶体管组成的驱动电路进行驱动。
3硬件设计
3.1主要元器件
在本设计中主要使用了以下元器件:
AT89C51单片机芯片、74LS245芯片、晶体振荡器、数码管、发光二极管、直流电动机、三极管。
3.2硬件连接图
该设计主要应用80C51单片机,外接一些必要的扩展电路,构成系统电路原理图,如图2所示。
图2硬件连接图
3.3系统设计原理
该设计采用模块化的方法,系统原理图分为五个模块,分别为晶振和复位模块,电机驱动模块,LED显示模块,按键控制模块以及数码管显示模块。
晶振和复位模块主要通过51单片机的内部振荡方式,产生原始的时钟频率。
电机驱动模块主要包含电阻、三极管放大器和一个电机,通过与51单片机的P3.0-P3.3引脚连接,用于驱动相应的洗衣、漂洗和脱水程序。
LED显示模块主要通过与51单片机的P0口8个引脚连接,当按下相应按键时,对应的LED指示灯点亮,实现对洗衣机控制过程的指示。
按键控制模块,其连接于P3口部分引脚上,实现对洗衣过程的选择及控制。
数码管显示模块,其直接与单片机的P2口相连。
4软件设计
4.1主程序流程图
按下K1键,洗衣机进入待命状态;
当按下K2键后,洗衣机才进入工作状态。
其主程序及流程图见附录2.1。
4.2洗涤过程流程图
电机正反转均为15s,程序及流程图见附录2.2。
4.3漂洗过程流程图
漂洗前先打开排水阀排水5s。
然后启动电动机漂洗,一次漂洗结束后,接着判断漂洗次数即flag3的值,若flag3为3则漂洗结束,若flag3不为3,则再次执行漂洗操作,进入下一循环。
程序及流程图见附录2.3。
5系统仿真及实际调试
系统仿真结果图如图3所示。
图3系统仿真结果图
6总结
经过一个学期的时间完成了基于单片机的洗衣机控制系统的设计,本系统是基于单片机及其接口技术、计算机技术、微电子技术综合应用的设计。
实现了对洗衣机整个洗衣过程的控制包括用户参数输入、洗衣、脱水和结束演奏四个阶段。
控制系统主要由电源电路、控制电路两大模块构成。
电源电路为控制电路提供稳定的5V直流电压,为电动机提供电;
控制电路负责控制洗衣机的工作过程,主要由AT89C51单片机、四位共阳数码管、按键、LED指示灯、电动机、进水排水电磁阀组成。
在系统设计中查阅了大量相关的中文和外文资料以及各芯片的厂家技术资料手册借鉴了很多前人成熟的经验。
对于以上之粗浅体会进一步的总结和提高,需要有更多的社会实践来提供,我也相信在不久的将来踏入社会,类似这样的设计绝不在少数,只要我们努力学习、勇于实践、勤学好问我们就会懂得以前不明白或不懂的道理,就会很快地成长和成熟起来。
我也相信凭着我自强不息勇于拼搏的精神一定能够很快的适应类似设计的需要,适应这个多变的社会,充分发挥长处朝我们的方向不断前进前进再前进!
参考文献
[1]王思明,张金敏,苟军年等单片机原理及应用系统设计[M]科学出版社2012:
176-189
[2]谭浩强C程序设计(第四版)[M]清华大学出版社2010:
36-60
附录
附录一
源程序
#include<
reg51.h>
#defineucharunsignedchar
#defineuintunsignedint
//***************************//
sbitmo_r=P3^2;
//电机右控制线
sbitmo_l=P3^3;
//电机左控制线
//****************************//
sbitkey_menu=P3^4;
//菜单按键
sbitkey_on=P3^5;
//开始按键
sbitkey_off=P3^6;
//结束按键
sbitkey_se=P3^7;
//菜单选择按键
sbitled_in=P0^0;
//进水指示灯
sbitled_xi=P0^1;
//洗衣指示灯
sbitled_pao=P0^2;
//泡洗指示灯
sbitled_xx=P0^3;
//脱水指示灯
sbitled_out=P0^4;
//出水指示灯
sbitled_over=P0^5;
//洗衣结束指示灯
sbitled_work=P0^6;
//电机工作指示灯
sbitother=P3^1;
//脱水电源控制开关
sbitanther=P3^0;
//洗衣电源控制开关
//******************************//
ucharcodenum[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//*****************************//
charsec=0;
//时间秒
charmin=0;
//时间分
ucharcount=0;
//中断计数
ucharflag0=0;
//洗衣机工作状态标志
ucharflag1=0;
//进水次数标志
ucharflag2=0;
//出水次数标志
ucharflag3=0;
//泡洗次数标志
ucharquan=0;
//正反转计数
//**********************************//
voiddelay();
//延时函数
voidin();
//进水子程序
voidout();
//出水子程序
voidover();
//结束子程序
voidxi();
//洗衣子程序
voidpao();
//泡衣子程序
voidxx();
//脱水子程序
voidon();
//工作on处理子程序
voidse();
//显示菜单选择
voidSEG_display();
//显示时间子程序
voidkey_scan();
//按键扫描子程序
voiddelay(uinti)
{
uintx,y;
for(x=i;
x>
0;
x--)
for(y=120;
y>
y--);
}
//工作on处理子程序
//********************************//
voidon()
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P0=0xff;
if(flag0==0)
in();
if(flag0==1)
xi();
if(flag0==2)
pao();
if(flag0==3)
xx();
if(flag0==4)
out();
//结束子程序
//*********************************//
voidover()
{other=0;
anther=0;
P0=0xff;
mo_r=0;
mo_l=0;
led_over=0;
EA=0;
//进水子程序
voidin()
{anther=0;
other=0;
led_in=0;
flag1++;
min=0;
sec=8;
//洗衣子程序
voidxi()
{anther=1;
led_work=0;
led_xi=0;
mo_r=1;
min=1;
sec=36;
quan=0;
//泡衣子程序
voidpao()
{
anther=1;
led_pao=0;
flag3++;
sec=35;
//脱水子程序
voidxx()
{other=1;
led_xx=0;
mo_l=1;
sec=50;
//出水子程序
voidout()
led_out=0;
flag2++;
sec=5;
//显示菜单选择
voidse()
if(flag0>
=5)
flag0=0;
{
led_in=0;
}
led_xi=0;
led_pao=0;
led_xx=0;
led_out=0;
//菜单处理子程序
voidmenu()
sec=0;
SEG_display();
while
(1)
if(key_on==0)
{
delay(5);
if(key_on==0)
{
while(!
key_on);
on();
break;
}
}
//**************************//
if(key_off==0)
if(key_off==0)
key_off);
over();
if(key_se==0)
if(key_se==0)
key_se);
flag0++;
se();
}
//按键扫描子程序
voidkey_scan()
if(key_menu==0)
delay(5);
if(key_menu==0)
while(!
key_menu);
menu();
if(key_on==0)
on();
if(key_off==0)
over();
//显示子程序
voidSEG_display()
P1=0x01;
P2=num[min/10];
delay(10);
P1=0x02;
P2=num[min%10];
P1=0x04;
P2=num[sec/10];
P1=0x08;
P2=num[sec%10];
//主函数
voidmain()
while
(1)
SEG_display();
key_scan();
//定时器0中断处理程序
voidtimer0()interrupt1
count++;
if(count==20)
{
count=0;
sec--;
if((flag0==1)||(flag0==2))
quan++;
switch(quan)
case1:
mo_r=1;
mo_l=0;
break;
case10:
mo_r=0;
case15:
mo_l=1;
case25:
default:
;
if(quan==30)
quan=0;
//**********************************//
if((sec==0)&
&
(min!
=0))
min--;
sec=59;
if((sec<
0)&
(min==0)&
(flag0==0))//进水结束
{
switch(flag1)
flag0=1;
xi();
case2:
flag0=2;
pao();
case3:
case4:
(flag0==1))//洗衣结束
flag0=4;
out();
(flag0==2))//泡衣结束
switch(flag3)
flag0=4;
out();
(flag0==4))//出水结束
switch(flag2)
flag0=0;
in();
flag0=3;
xx();
//***********************************//
(flag0==3))
{sec=0;
附录2
附录2.1主程序
fl