洗衣机人机界面的设计之自动洗衣机设计.docx
- 文档编号:25033246
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:23
- 大小:304.99KB
洗衣机人机界面的设计之自动洗衣机设计.docx
《洗衣机人机界面的设计之自动洗衣机设计.docx》由会员分享,可在线阅读,更多相关《洗衣机人机界面的设计之自动洗衣机设计.docx(23页珍藏版)》请在冰豆网上搜索。
洗衣机人机界面的设计之自动洗衣机设计
的主要任务:
(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)
1.设计一台包括洗涤过程、脱水转速、程序切换、及启动暂停等功能的洗衣机(20分)
2.用2个7段LED数码管显示剩余洗涤时间。
(30分)
3.设计一个“预约”键,用于定时启动洗衣机;(30分)
4.不同模式下的过程及转速组合[例如,在棉普通方式下,过程包括洗涤、脱水;脱水转速为800](10)。
5.其他功能(创新部分10分)
洗衣机人机界面的设计
——自动洗衣机设计
摘要
单片机是计算机家庭的一个重要分支,它具有体积小、价格低、面向控制的特点,适用于各种工业控制、仪器仪表装置,在人类生产和生活的各个领域都有极为广泛应用。
本洗衣机控制系统,采用目前常用的89C51单片机,用c语言的编程方法,完成对洗衣机洗衣全过程的自动控制,并采用LED数码显示洗衣剩余时间,洗衣完成后能自动报警。
使全自动洗衣机的使用更加简单、直观和方便。
本设计取材容易,结构简洁,易于制作,具有一定的实用价值。
关键字:
单片机、洗衣机、LED灯、c语言
目录
第一章绪论
1.洗衣机
1.1设计任务要求
1.1.1洗涤过程。
通电后,洗衣机进入暂停状态,以便放好衣物。
若不选择洗衣周期,则洗衣机从进水过程开始,进水过程完成后,自动进入洗涤,洗涤完成后进入漂洗模式:
出水—进水—漂洗,连续三次漂洗后进行脱水,脱水完成后洗衣机暂停工作。
电机是一个正反转电机,可以形成往返水流,有利于洗涤衣物。
能够显示洗涤剩余时间,如果洗衣机出现故障,将会有声光报警装置显示。
1.2设计分析及方法论证
洗涤过程实质就是使水与洗涤液的混合液与衣服之间有充分的行程冲刷,以使衣服上的污垢得以清除,以达到洗衣的目的,因此,在设计洗衣和漂洗过程中我们通过充分讨论决定使用电机的正反转来实现水的充分搅拌。
脱水以电机的快速转动产生的离心力来实现,经过讨论和实际生活中的经验以及仿真的结果,以上方法完全可行。
本设计用AT89C51单片机实现洗衣机的控制,通过对拨码开关和键盘的操作实现菜单的选择,当选择好模式后进入该模式设置该模式下的参数,然后再次扫描键盘,按开始键使洗衣机进入该模式进行工作。
在P3.4为低电平是进入菜单选择,菜单选择模式下若P0.0为低电平则进入进水程序,按开始键可进行进水,进水完成后自动进入洗衣程序;若P3.7为低电平检查P0.0、p0.1、p0.2、p0.3、p0.4的电平,若为低则往下移一位,进入下一个模式,按开始键可从这一模式开始工作。
在P3.4为高电平时不是菜单模式,则去扫描键盘,扫描键盘为进水,洗涤,漂洗,排水,脱水模式,待选择好模式设定好参数后,然后进入相应模式运行。
洗衣机进入自动开始洗衣时,包括进水、洗涤、排水、漂洗、脱水几个过程。
洗衣过程:
进入洗衣程序开定时器开始倒计时,根据选择的水位进水,进水完成后,进入洗涤过程,电动机开始正反转过程根据所选模式中设置的正反转次数正反转的时间自动洗衣;待洗涤完成就进入排水过程,排水时间由水位模式设置,排水结束后进入漂洗过程。
漂洗过程:
先进行一段时间排水,排水结束再进水,进水完成再进行漂洗,漂洗完成再排水,然后重复上述过程两次即完成漂洗过程,漂洗完成进入脱水过程,电机高速旋转,脱水结束,整个洗衣过程也结束,若在洗涤过程中洗衣机出现故障,将会有声光报警装置报警。
电机的正反转实现方式:
当P3.2为1,P3.3为0时电机正转,当P3.2和P3.3都为0时电机停转,当P3.2为0,P3.3为1时电机反转。
电机正常工作时电机工作状态LED灯亮。
第二章基础知识介绍
2.1主控制器AT89C51
本次设计使用单片机芯片AT89C51(如图),AT89C51的工作特性:
内含4KB的FLASH存储器擦写次数1000次;内含128字节的RAM;具有32根可编程I/O线;具有2个16位编程定时器;具有6个中断源,5个中断矢量,2级优先权的中断结构;具有1个全双工的可编程串行通信接口;具有1个数据指针DPTR;具有可编程3级程序锁定位;AT89C51的工作电源为5(1±0.2)V且典型值为5V;最高工作频率为24MHZ;AT89C51的编程程序频率为3~24MHZ,编程启动电流和电压分别为1mA、5或12V。
2.2LED数码管模块
LED数码管是由若干个发光二级管组成显示字段的显示器件,有七段和“米”字段之分。
LED数码管有共阴极和共阳极两种,发光二极管的阳极接在一起的称为共阳极数码管,阴极接在一起的称为共阴极数码管。
一个数码管由8个发光二极管组成,其中,7个发光二极管a~g构成字型“8”的各个笔划,另一个dp发光二极管为小数点。
当某段发光二极管上施加一定的正向电压时,该段比划就亮;不加电压就暗。
在本次设计中我们选用了共阴极的7SEG-MPX2-CC型数码管。
(如图所示)
7SEG-MPX2-CC型数码管
在实际应用中,LED数码管有静态显示和动态显示两种显示方式。
静态显示方式,即七段LED数码管在显示某一个字符时,相应的段恒定的导通或截止,直至排显其他字符为止。
LED的静态显示虽然有编程容易、管理简单等优点,但是静态显示所要占的I/O口资源很多,所以在显示的LED点较多的情况下,一般都采用动态显示方式,即在多位七段LED显示中,将所有位的段选线并联在一起,由8个I/O口来控制8个段。
而公共端(共阳极/共阴极)则分别由相应的I/O口控制,以实现各个位的分时选通。
由于所有的段选线并联到同一个I/O,由这个I/O口来控制,因此,若是所有的4位7段LED都选通的话,4位7段LED将会显示相同的字符。
要使各个位的7段LED显示不同的字符,就必须采用动态扫描方法来轮流点亮每一位7段LED,即在每一瞬间只选通一位7段LED进行显示单独的字符。
在此段点亮时间内,段选控制I/O口输出要显示的相应字符的段选码,而位选控制I/O口则输出位选信号,向要显示的位送出选通电平(共阴极则送出低电平,共阳极则送出高电平),使得该位显示相应字符。
这样将四位7段LED轮流去点亮,使得每位分时显示该位应显示的字符。
由于人眼的视觉暂留时间为0.1秒,当每位显示的间隔未超过33ms时,并在显示时保持直到下一位显示,则由于人眼的视觉暂留效果眼睛看上去就像是4位7段LED都在点亮。
设计时,要注意每位显示的间隔时间,由于一位7段LED的熄灭时间不能超过100ms,也就是说点亮其它位所用的时间不能超过100ms,这样当有N位的7段LED用来显示时,每一位间隔的时间t就必须符合下面的式子:
t≦100ms/(N-1)
比如,现在使用2位,也就是N=2,则由式子可以算出t≦100ms,就是每一位的间隔时间不能超过50ms。
实际应用中,时间可以设得短一些,比如5ms[5]。
第三章系统硬件及电路设计
3、主控制系统电路
3.1.信号灯显示电路
3.2数码管时间显示电路
3.3系统仿真电路图
第四章系统软件设计
4.1系统软件设计
#include
//****************************//
#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_piao=P0^2;//漂洗指示灯
sbitled_xx=P0^3;//脱水指示灯
sbitled_out=P0^4;//排水指示灯
sbitled_over=P0^5;//洗衣结束指示灯
sbitled_work=P0^6;//电机工作指示灯
sbitled_wring=P0^7;//报警指示灯
sbitother=P3^1;//脱水电源控制开关
sbitanther=P3^0;//洗衣电源控制开关
//******************************//
ucharcodenum[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//
//*****************************//
charsec=0;//时间秒
charmin=0;//时间分
ucharcount=0;//中断计数
ucharflag0=0;//洗衣机工作状态标志
ucharflag1=0;//进水次数标志
ucharflag2=0;//排水次数标志
ucharflag3=0;//漂洗次数标志
ucharerr=0;//报警标志
ucharquan=0;//正反转计数
//**********************************//
//函数声明
//*************************************//
voiddelay();//延时函数
voidin();//进水子程序
voidout();//排水子程序
voidover();//结束子程序
voidxi();//洗衣子程序
voidpiao();//漂衣子程序
voidxx();//脱水子程序
voidon();//工作on处理子程序
voidse();//显示菜单选择
voidSEG_display();//显示时间子程序
voidkey_scan();//按键扫描子程序
//*****************************//
//延时函数
//****************************//
voiddelay(uinti)
{
uintx,y;
for(x=i;x>0;x--)
for(y=120;y>0;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)
piao();
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;
P0=0xff;
led_in=0;
flag1++;
mo_r=0;
mo_l=0;
min=0;
sec=8;
}
//*********************************//
//洗衣子程序
//*********************************//
voidxi()
{anther=1;
other=0;
P0=0xff;
led_work=0;
led_xi=0;
mo_r=1;
mo_l=0;
min=1;
sec=36;
quan=0;
}
//*********************************//
//漂衣子程序
//*********************************//
voidpiao()
{
anther=1;
other=0;
P0=0xff;
led_piao=0;
led_work=0;
flag3++;
mo_r=1;
mo_l=0;
min=1;
sec=35;
quan=0;
}
//*********************************//
//脱水子程序
//*********************************//
voidxx()
{other=1;
anther=0;
P0=0xff;
led_xx=0;
mo_r=0;
mo_l=1;
min=0;
sec=50;
}
//*********************************//
//排水子程序
//*********************************//
voidout()
{anther=0;
other=0;
P0=0xff;
led_out=0;
flag2++;
mo_r=0;
mo_l=0;
min=0;
sec=5;
}
//*********************************//
//显示菜单选择
//*********************************//
voidse()
{
P0=0xff;
if(flag0>=5)
flag0=0;
if(flag0==0)
{
led_in=0;
}
if(flag0==1)
{
led_xi=0;
}
if(flag0==2)
{
led_piao=0;
}
if(flag0==3)
{
led_xx=0;
}
if(flag0==4)
{
led_out=0;
}
}
//********************************//
//菜单处理子程序
//**********************************//
voidmenu()
{
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);
on();
break;
}
}
//**************************//
if(key_off==0)
{
delay(5);
if(key_off==0)
{
while(!
key_off);
over();
break;
}
}
//****************************//
if(key_se==0)
{
delay(5);
if(key_se==0)
{
while(!
key_se);
flag0++;
se();
}
}
}
}
//*********************************//
//按键扫描子程序
//*********************************//
voidkey_scan()
{
if(key_menu==0)
{
delay(5);
if(key_menu==0)
{
while(!
key_menu);
menu();
}
}
//********************************//
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();
}
}
}
//*******************************//
//显示子程序
//*********************************//
voidSEG_display()
{
P1=0x01;
P2=num[min/10];
delay(10);
P1=0x02;
P2=num[min%10];
delay(10);
}
//*********************************//
//主函数
//*********************************//
voidmain()
{
led_in=0;
anther=0;
other=0;
while
(1)
{
SEG_display();
key_scan();
}
}
//**********************************//
//定时器0中断处理程序
//**********************************//
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
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;mo_l=0;break;
case15:
mo_r=0;mo_l=1;break;
case25:
mo_r=0;mo_l=0;break;
default:
;
}
if(quan==30)
{
quan=0;
}
}
//**********************************//
if((sec==0)&&(min!
=0))
{
min--;
sec=59;
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==0))//进水结束
{
switch(flag1)
{
case1:
flag0=1;xi();break;
case2:
flag0=2;piao();break;
case3:
flag0=2;piao();break;
case4:
flag0=2;piao();break;
default:
err=1;led_wring=0;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==1))//洗衣结束
{
flag0=4;
out();
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==2))//漂衣结束
{
switch(flag3)
{
case1:
flag0=4;out();break;
case2:
flag0=4;out();break;
case3:
flag0=4;out();break;
default:
err=1;led_wring=0;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==4))//出水结束
{
switch(flag2)
{
case1:
flag0=0;in();break;
case2:
flag0=0;in();break;
case3:
flag0=0;in();break;
case4:
flag0=3;xx();break;
default:
err=1;led_wring=0;
}
}
//***********************************//
if((sec<0)&&(min==0)&&(flag0==3))
{sec=0;
over();
}
}
}
第五章结论
经过了一周的课程设计,深有感触!
刚开始时,我们接到这个任务,大脑一片茫然,根本不知道如何下手。
因为基础知识不够扎实,对各种硬件和程序的认识存在各方面的不足。
前期这些障碍给我们造成了很大的困难。
我们从最初开始,通过查找各种书籍,上网查阅相关知识,向老师及同学请教。
最终才得已完成这份设计。
从本次课程设计的目的来看,收获也是不
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 洗衣机 人机界面 设计 自动