1广东石油化工学院单片机原理及应用技术课程设计题目:洗衣机人机界面的设计班级:电气专09-1团队:8号队成员:郑伟宁(队长)、冯超宇、孙政、曾建平学号:090331601420903316011209033160128090331601392011年7月4日~2011年7月8日2目录一、设计任务及团队分工说明............................................................3二、总体设计及需求分析....................................................................4三、硬件选型及电路设计....................................................................4四、软件设计........................................................................................6五、结论...................................................................................................12六、设计心得...........................................................................................12七、致谢...................................................................................................13参考文献...................................................................................................133一、设计任务及团队分工说明题目十二:洗衣机人机界面的设计★★★1.见下图,包括洗涤过程、脱水转速、温度的调节及程序切换、启动暂停等功能(20分)2.用2个7段LED数码管显示剩余洗涤时间。(30分)3.设计一个“预约”键,用于定时启动洗衣机;(30分)4*.不同模式下的过程及转速组合[例如,在棉普通方式下,过程包括洗涤、脱水;脱水转速为800,水温30度](10)。5@.其他功能(创新部分10分)团队分工说明:总体设计及需求分析由团队所有人负责;硬件选型及电路设计由团队所有人分析负责;软件设计由团队所有人负;设计心得由冯超宇负责;结论由孙政负责;致谢由郑伟宁,曾建平负责。特别感谢余春辉提供技术支持。4二、总体设计及需求分析1.设计总体思路:洗涤过程就是电机的正反转,脱水就是一个方向高速转,温度调节可以采用DS18B20检测水温,程序切换、启动、暂停以及预约都是键盘功能处理。从课程设计要求来看,要求实现电机的正传、反转、暂停,实际上没有电机给我们接上,这回要用四个LED灯的状态来表示三、硬件选型及电路设计1.单片机(如图):本次设计使用单片机芯片AT89C51,AT89C51的工作特性:内含4KB的FLASH存储器擦写次数1000次;内含128字节的RAM;具有32根可编程I/O线;具有2个16位编程定时Y开始系统初始化启动相关功能洗衣状态显示洗衣功能设置结束5器;具有6个中断源,5个中断矢量,2级优先权的中断结构;具有1个全双工的可编程串行通信接口;具有1个数据指针DPTR;具有可编程3级程序锁定位;AT89C51的工作电源为5(1±0.2)V且典型值为5V;最高工作频率为24MHZ;AT89C51的编程程序频率为3~24MHZ,编程启动电流和电压分别为1mA、5或12V。2.keil软件介绍keil软件是目前最流行开发MCS-51系列单片机的软件,这从近几年各仿真机厂商纷纷宣布全面支持keil即可看出。keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开放方案,通过一个集成开发环境将这些部分组成在一起..3.总电路设计图:6四、软件设计(1).keil软件介绍keil软件是目前最流行开发MCS-51系列单片机的软件,这从近几年各仿真机厂商纷纷宣布全面支持keil即可看出。keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开放方案,通过一个集成开发环境将这些部分组成在一起.单片机应用系统的软件设计是系统设计中最基本而且工作量较大的任务。与系统机上操作系统支持下的纯软件不同,单片机的软件设计是在裸机的条件下进行的,而且随应用系统的不同而不同。在软件中一般需考虑以下几个方面:1)根据要求确定软件的具体任务细节,然后确定合理的软件结构。一般系统软件的主程序和若干个子程序及中断服务程序组成,详细划分主程序、子程序和中断服务程序的具体任务,确定各个中断的优先级。主程序是一个顺序执行的无限循环的程序,不停地顺序查询各种软件标志,以完成对事务的处理。在子程序和中断服务程序中,要考虑现场的保护和恢复,以及它们和主程序之间的信息交换方法。2)程序的结构用模块化结构,即把监控程序分解为若干个功能相对独立的较小的程序模块分别设计,以便于调试。具体设计时可采用自底向上或自顶向下的方法。3)在进行程序设计时,先根据问题的定义描述出各个输入变量和输出变量之间的数学关系,即建立数学模型,然后绘制流程图,再根据流程图用汇编语言进行具体程序的编写。4)在程序设计完成后,利用相应的开发工具和软件进行程序的汇编,生成程序的机器码[6]。本设计中系统软件是采用C51编写的.在研制单片机应用系统时,汇编语言是一种常用的软件工具,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。用C语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统。(2)程序设计:#includereg51.h#defineucharunsignedchar#defineuintunsignedint#defineEnable();EA=1;#defineDisable();EA=0;#defineBIAOZHUN0#defineJINGJI1#defineDANDU2#definePAISHUI3#defineQIANGXI0#defineRUOXI1#defineZanTing();ET0=0;ET1=0;Stop();#defineJiXu();ET0=1;ET1=1;sbitLED_BiaoZhun=P1^0;//标准程序显示灯sbitLED_JingJi=P1^1;//经济程序显示灯7sbitLED_DanDu=P1^2;//单独程序显示灯sbitLED_PaiShui=P1^3;//排水程序显示灯sbitLED_QiangXi=P1^4;//强洗状态灯sbitLED_RuoXi=P1^5;//弱洗状态灯sbitLED_XiDi=P1^6;//洗涤状态灯sbitLED_PiaoXi=P1^7;//漂洗状态灯sbitLED_TuoShui=P2^0;//脱水状态灯sbitK_SEL_ChengXu=P3^0;//选择程序键sbitK_SEL_QiangRuo=P3^1;//选择强弱键sbitp32=P3^2;//voidProgramme_PaiShui(void);ucharflag_SEL_ChengXu;//默认为标准程序,bitflag_SEl_QiangRuo;//默认为强洗,1为弱洗bitflag_Run;//运行标志,1为运行bitflag_JinShui;//进水标志,1为进水bitflag_PaiShui;//排水标志,1为排水bitflag_XiDi;//置洗涤标志bitflag_PiaoXi;//置漂洗标志voidDelay_10ms(uintT1){uintt1,t2;for(t1=0;t1T1;t1++)for(t2=0;t21250;t2++);//10ms}voidPin_Init(void){LED_BiaoZhun=0;//默认为标准程序,灯亮LED_JingJi=1;//经济程序显示灯,灭LED_DanDu=1;//单独程序显示灯,灭LED_PaiShui=1;//排水程序显示灯,灭LED_QiangXi=0;//默认为强洗状态,灯亮LED_RuoXi=1;//弱洗状态灯,灭LED_XiDi=1;//洗涤状态灯,运行后灯亮LED_PiaoXi=1;//漂洗状态灯,运行后灯亮LED_TuoShui=1;//脱水状态灯,运行后灯亮}voidExInt_Init(void){IT0=1;EX0=1;IT1=1;EX1=1;}voidTimer0_Init(void){TMOD=TMOD|0X01;TH0=0X3C;TL0=0XB0;8TR0=1;}voidTimer1_Init(void){TMOD=TMOD|0X10;TH1=0X3C;TL1=0XB0;}voidint0(void)interrupt0{if(!p32){Delay_10ms(1);if(!p32){if(!flag_Run)flag_Run=1;{staticbitflag_ZanTing;flag_ZanTing=~flag_ZanTing;if(flag_ZanTing)if(!flag_ZanTing)JiXu();}}}}voidTimer0(void)interrupt1{TR0=0;//停止计数TH0=0X3C;//重装定时器值TL0=0XB0;TR0=1;}voidSEL_ChengXU(void){if(!K_SEL_ChengXu)//程序选择键{Delay_10ms(1);//延时10ms左右,去抖动if(!K_SEL_ChengXu){while(!K_SEL_ChengXu);flag_SEL_ChengXu++;if(flag_SEL_ChengXu==4)flag_SEL_ChengXu=0;switch(flag_SEL_ChengXu){caseBIAOZHUN:LED_BiaoZhun=0;//亮LED_JingJi=1;//灭LED_DanDu=1;//灭LED_PaiShui=1;//灭break;9caseJINGJI:LED_BiaoZhun=1;LED_JingJi=0;LED_DanDu=1;LED_PaiShui=1;break;caseDANDU:LED_BiaoZhun=1;LED_JingJi=1;LED_DanDu=0;LED_PaiShui=1;break;casePAISHUI:LED_BiaoZhun=1;LED_JingJi=1;LED_DanDu=1;LED_PaiShui=0;break;default:break;}}}}voidSEL_QiangRuo(void){if(!K_SEL_QiangRuo)//强弱选择键{Delay_10ms(1);//延时10ms左右,去抖动if(!K_SEL_QiangRuo){while(!K_SEL_QiangRuo);flag_SEl_QiangRuo=~flag_SEl_QiangRuo;if(!flag_SEl_QiangRuo){LED_QiangXi=0;//强洗状态,灯亮LED_RuoXi=1;//弱洗状态灯,灭}else{LED_QiangXi=1;//强洗状态,灯亮LED_RuoXi=0;//弱洗状态灯,灭}}}}voidJinShui(void){TR1=0;TR0=0;TF0=0;}voidXiDi(void)10{flag_XiDi=1;TR1=1;Timer0_Init();whi