洗衣机人机界面的设计之自动洗衣机设计_第1页
洗衣机人机界面的设计之自动洗衣机设计_第2页
洗衣机人机界面的设计之自动洗衣机设计_第3页
洗衣机人机界面的设计之自动洗衣机设计_第4页
洗衣机人机界面的设计之自动洗衣机设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学《单片机课程设计》的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)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<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_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(); } }}第五章结论经过了一周的课程设计,深有感触!刚开始时,我们接到这个任务,大脑一片茫然,根本不知道如何下手。因为基础知识不够扎实,对各种硬件和程序的认识存在各方面的不足。前期这些障碍给我们造成了很大的困难。我们从最初开始,通过查找各种书籍,上网查阅相关知识,向老师及同学请教。最终才得已完成这份设计。从本次课程设计的目的来看,收获也是不少的,它使我们对课本以及以前学过的知识有了一个更好的总结与理解,也让我们知道了,光分开使不够的,从外面学到的知识要把形成一各整体,这也很好的训练了外面对开发一个项目应该有怎样的思路和准备更清晰。来学校两年多了,无论是从C语言课程设计到金工实习,还是到现在的单片机的课程设计,每一次自己都觉得有一个进步,虽然有些方面自己做不出,但可以从老师和其他同学那里学到更好更多的东西,他们从另一个方面透析了自己的困难,这是很重要的,它让我学会了怎样学习别人的长处并把它变成自己的长处。有这样的机会和收获,要感谢老师的辅导以及同学的帮助,是他们让自己有了一个更好的认识。用isis及keiluVisiion4软件进行仿真分析。首先要搞清楚洗衣机的工作原理,与外部电路的连接,单片机原理,c语言等。电路图设计出来后,总是存在各种的问题,我们总是不停地修改,在和队友的交流中,我们不停地修改,最终得出了这份作业,虽然还存在各种的不足,但是看着我们自己辛苦设计出来的作业,心里还是充满了自豪。这次设计实验,锻炼了我们的团队合作能力,加强了我们的动手能力,我们从这次设计中学到了很多知识,其实设计是一份很有趣的工作。我们基本上是从0开始,不停地学习,研究。遇到问题,想着去解决问题,锻炼了自己查找资料的能力。在学习单片机这条道路上,我们要走的路还很长,我想我们每个学习这一门学科的学生都应该学好这门学科。第六章致谢6.1经过一个学期的努力,我和我的已基本将我们的毕业设计--基于AT89C51单片机的洗衣机控制系统设计完成。首先最要感谢的是我们的

温馨提示

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

评论

0/150

提交评论