全自动洗衣机设计报告.docx
《全自动洗衣机设计报告.docx》由会员分享,可在线阅读,更多相关《全自动洗衣机设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
全自动洗衣机设计报告
研究生课程设计报告
课程名称:
单片机课程设计
设计题目:
全自动洗衣机
学院:
专业:
班级:
学号:
学生姓名:
指导教师:
2009年6月6日
摘要……………………………………………………………………………………………1
一、方案论证………………………………………………………………………………2
1.洗衣机模块选型…………………………………………………………………4
2.洗衣机模块方案选择………………………………………………………………4
二、详细硬件电路设计…………………………………………………………………………6
1.开关电路设计…………………………………………………………………………6
2.显示模块硬件图设计………………………………………………………………7
3.功能指示灯硬件电路设计…………………………………………………………8
4.驱动模块硬件部分设计……………………………………………………………8
三、系统软件设计………………………………………………………………………………9
1.主程序流程…………………………………………………………………………9
2.强洗程序流程………………………………………………………………………10
3.弱洗程序流程………………………………………………………………………10
4.漂洗程序流程………………………………………………………………………11
5.甩干程序流程………………………………………………………………………12
6.暂停中断程序流程…………………………………………………………………13
7.工作子程序流程……………………………………………………………………14
8.进水子程序流程……………………………………………………………………14
四、理论分析与计算……………………………………………………………………………14
1.MCS-51单片机的引脚………………………………………………………………15
2.复位电路与时钟电路………………………………………………………………15
3.相关计算……………………………………………………………………………16
五、测试与分析…………………………………………………………………………………17
1.计数器显示测试与分析…………………………………………………………………17
2.发动机转动测试与分析………………………………………………………………17
3.中断测试与分析………………………………………………………………………18
六、结论………………………………………………………………………………………19
七、电路和程序………………………………………………………………………………19
八、附录………………………………………………………………………………………28
1.硬件清单……………………………………………………………………………28
2.程序清单……………………………………………………………………………29
3.参考文献……………………………………………………………………………29
摘要
作为一个研究生,不仅需要有过硬的理论知识,还应该有动手实践的能力,并且是将理论结合实际,提升到应用层面。
以后走上社会,还是会有很多新的知识是需要我们学习的,届时需要我们有比较强的自学能力。
此次《单片机课程设计》对理论结合实际的动手能力和自学能力有很强的体现。
本设计用来模拟工作过程的两套软件是Proteus和Keil。
我们用到的是AT89C51,属于单片机的51系列,有如下基本结构:
1、一个8位算术逻辑单元。
2、32个I/O(4组8位端口),可单独寻址。
3,两个16位定时计数器。
4、全双工串行通信。
5、6个中断源,两个中断优先级。
6、128字节内置RAM独立的64K字节可寻址地址和代码区。
这次课程设计以组为单位,用了一个月的时间。
主要有:
方案论证,详细硬件电路设计,系统软件设计,理论分析与计算,测试,结论六大部分组成。
具体的时间安排是这样的。
首先是需求分析,得出了全自动洗衣机要完成什么样的功能,考验了同学们社会调查,综合分析的能力。
洗衣机功能主要有强洗、弱洗、漂洗、甩干。
接下来是怎么样用我们的知识去实现洗衣机的功能,设计完成功能的方案,并且考察方案的可行性,这步只是计算、分析,体现大学生的过硬的理论知识、总结能力。
为了方便编程序,我们把洗衣机的全部功能分了几个模块分别完成,主要分为处理模块、按键模块、显示模块、工作模块和时钟电路模块。
有了方案,接下去就是具体的实施阶段了,包括了详细硬件电路设计,系统软件设计,理论分析与计算,测试,得出结论等步骤。
硬件电路设计主要就是用PROTEUS这个绘电路图的软件,我们组是用C语言编写的程序,编好后,用另外个KEIL软件进行生成代码,在进行程序的调试,直到一切都运行正常就OK了。
但是,各个部分也都是有联系的,搞需求分析的应该懂电路,搞电路的应该知道程序,搞程序的也不能脱离电路,总之,这部分是一个整体,要求每一个人都必须做到至少了解整个的工作过程。
一.方案论证
需求分析:
经过相互讨论,我们所做的洗衣机具备如下功能:
a:
复位功能——此键实现的是当洗衣机正常工作时,由于用户的需要,因而就需要将已经在运行的功能中断,再次重新运行所有的功能。
它是由RST管脚来控制的。
b:
强洗/洗功能——是主要根据用户对衣服的洗衣强度的不同要求而选择所需功能来实现用户的需要。
c:
甩干/漂洗功能
d:
本洗衣机还有通过用户的需求来调整弱洗、强洗、漂洗、甩干的功能的工作时间的长短功能。
e:
显示功能,即以上四个功能可以通过相应的功能指示灯来确定其工作状态。
1,洗衣机模块选型
(1)处理模块
(2)按键模块
(3)显示模块
(4)工作模块
(5)时钟电路模块
2,洗衣机模块方案选择
(1)处理模块:
处理器选择AT89C51系列芯片8051。
8051单片机是HMOS工艺制造,外形为40条引脚,它能够运行各种程序,
8051系列的基本结构如下:
1、一个8位算术逻辑单元
2、32个I/O口4组8位端口可单独寻
3、两个6位定时计数器
4、全双工串行通信
5、6个中断源两个中断优先级
6、128字节内置RAM
7、独立的4K字节可寻址数据和代码区
因为受芯片引脚数量的限制,有很多引脚具有双功能。
1、主电源引脚
VCC:
芯片工作电源端,接+5V。
Vss:
电源接地端。
2、时钟振荡电路引脚
XTAL1:
内部晶体振荡电路的反相器输入端。
接法如图1-5。
XTAL2:
内部晶体振荡电路的反相器输出端。
接法如图1-5。
3、控制信号引脚
RST————RST为复位信号输入端。
外部接复位电路。
ALE————ALE为地址锁存允许信号。
在不访问外部存储器时,ALE以时钟振荡频率的1/6的固定频率输出,用示波器观察ALE引脚上的脉冲信号是判断单片机芯片是否正常工作的一种简便方法。
————外部程序存储器ROM的读选通信号。
到外部ROM取指令时,
自动向外发送负脉冲信号。
————为访问程序存储器的控制信号
4、中断系统
基本的8051支持6个中断源,两个外部中断,两个定时/计数器中断,一个串行口输入/输出中断。
中断发生后,处理器转到将五个中断入口处之一执行中断处理程序。
中断向量位于代码段的最低地址处。
串行口输入输出中断共用一个中断向量中断服务程序必须在中断入口处或通过跳转,分支转移到别处8051/8052的中断向量表。
5、并行I/O端口引脚
P0口(P0.0~P0.7);P1口(P1.0~P1.7);P2口(P2.0~P2.7);P3口(P3.0~P3.7)。
6,复位电路
单片机的RST引脚是复位信号输入端,RST引脚上保持两个机器周期(24个时钟周期)以上的高电平时,可使单片机内部可靠复位。
(2)按键模块
为了方便步线和简化程序,本模块采用独立式键盘,按键采用触发式按键,
该模块实现9个功能,分别为:
复位,弱洗,强洗,漂洗,甩干,改时间,加一秒,加十秒,暂停。
复位主要是采用上电复位电路。
(3)显示模块
该模块主要完成当前正在进行的洗衣过程操作和时间状态的显示,操作的显示主要有:
强洗,弱洗,漂洗,甩干,进水,排水,工作,暂停。
其中用到了74LS138译码器,以节约8051的I/O口。
指示灯用发光二极管LED-YELLOW。
时间状态显示主要用1个共阴的7SEG-MPX2-CA。
辅助元件:
反向器
(4)工作模块
该模块由2个电磁开关JWD-171-25和一个电动机MOTOR组成。
电磁开关的优点的是用低电位去控制高电位,这是因为8051用的是+5V而MOTOR用的是220V的工作电压,电动机主要完成正转与反转功能。
(5)时钟电路模块
时钟电路用于产生时钟信号,时钟信号是单片机内部各种微操作的时间基准,在此基础上,控制器按照指令的功能产生一系列在时间上有一定次序的信号,控制相关的逻辑电路工作,实现指令的功能。
电容容量范围为30PF±10PF,石英晶体频率的范围为1.2~12MHZ,常用6MHZ或12MHz。
二、详细硬件电路设计
开关电路
开关电路是由七个单键构成,其工作原理如下:
1.由于AT89C51的1—8管脚是高电平,我们以低电平输入所以单键左端接地。
2.右端通过一个1K欧的保护电阻接入高电平
3.当电键未按下时1—8管脚保持高电平没有输入,当按下上图任意按键时对应线路短结于地从而产生低电平输入。
4.12号管脚所接单键是直接接地的(上图未有)其工作原理是低电平有效,当按下键时输入低电平
5其中用到的元件有10WATT1K电阻和BUTTION各7个。
显示模块硬件图
1.两位七段数码显示管由ABCDEFG数字选择部分管脚和小数点DP管脚以及片选管脚
1,2组成。
2.ABCEFG,DP管脚是低电平有效,接AT89C51的32—39管脚,片选是高电平有效所以通过两反向器接21,22管脚
3.32—39与显示管数字选择部分的接入中间加电阻保护元件
4.其中用到的元件有7SEG-MEPX2-CA双位数码管一个,74LS04反向器两个
功能指示灯硬件部分
1.功能指示显示工作状态,由AT89C51的25—28号端口以及74LS138译码器的11—14号端口输出。
2.以上所述端口的输出都是低电平有效,所以灯左端接电源,右端接管脚。
3.灯和电源之间有电阻保护元件
4.其中用到的元件有74LS138译码器一个,LED—YELLOW灯8个
驱动模块硬件部分
1.如上图,驱动模块主要由电动机和控制电路组成。
2.AT89C51的10,11号管脚控制电磁继电器1。
16,17号管脚控制电磁继电器2。
3.当AT89C51的10,11号管脚有效时双刀开关1闭合,电动机接正向电源正转当AT89C51的16,17号管脚有效时电磁开关2闭合,电动机接反向电源反转。
4.用到的元件有,JWD-171-25电磁继电器两个,5V的MOTOR两个。
三、系统软件设计
主程序流程图
暂停中断流程图
四、理论分析与计算
1.8051系列的基本结构如下
1一个8位算术逻辑单元
232个I/O口4组8位端口可单独寻址
3两个16位定时计数器
4全双工串行通信
56个中断源两个中断优先级
6128字节内置RAM
7独立的64K字节可寻址数据和代码区
(一)MCS-51单片机的引脚
8051单片机是HMOS工艺制造,外形为40条引脚。
因为受芯片引脚数量的限制,有很多引脚具有双功能。
1、主电源引脚
VCC:
芯片工作电源端,接+5V。
Vss:
电源接地端。
2、时钟振荡电路引脚
XTAL1:
内部晶体振荡电路的反相器输入端。
XTAL2:
内部晶体振荡电路的反相器输出端。
3、控制信号引脚
RST----RST为复位信号输入端。
外部接复位电路。
ALE----ALE为地址锁存允许信号。
在不访问外部存储器时,ALE以时钟振荡频率的1/6的固定频率输出,用示波器观察ALE引脚上的脉冲信号是判断单片机芯片是否正常工作的一种简便方法。
----外部程序存储器ROM的读选通信号。
到外部ROM取指令时,自动向外发送负脉冲信号。
----为访问程序存储器的控制信号。
4、并行I/O端口引脚
P0口(P0.0~P0.7);P1口(P1.0~P1.7);P2口(P2.0~P2.7);P3口(P3.0~P3.7)。
(二)复位电路与时钟电路
1.复位电路
(1)复位电路
单片机的RST引脚是复位信号输入端,RST引脚上保持两个机器周期(24个时钟周期)以上的高电平时,可使单片机内部可靠复位。
(2)复位状态
复位后,单片机内部的各寄存器的内容将被初始化,包括程序计数器PC和特殊功能寄存器,其中(PC)=0000H。
复位不影响片内RAM和片外RAM中的内容。
2.时钟电路
时钟电路用于产生时钟信号,时钟信号是单片机内部各种微操作的时间基准,在此基础上,控制器按照指令的功能产生一系列在时间上有一定次序的信号,控制相关的逻辑电路工作,实现指令的功能。
电容容量范围为30PF±10PF,石英晶体频率的范围为1.2~12MHZ,常用6MHZ或12MHz。
3.时序单位
(1)时钟周期(是时钟信号频率fosc的倒数)
时钟周期=1/fosc
(2)机器周期:
机器周期=12×时钟周期
(3)指令周期
一条指令从被读取到被执行的整个过程所需的时间称为指令周期
4.外部中断
IP寄存器可位寻址
--PT2PSPT1PX1PT0PX0
-保留
-保留
PT2定时器2中断优先级
PS串行通信中断优先级
PT1定时器1中断优先级
PX1外部中断1优先级
PT0定时器0中断优先级
PX0外部中断0优先级
5.中断使能寄存器
通过设置中断使能寄存器IE的EA位使能所有中断每个中断源都有单独的使能位
可通过软件设置IE中相应的使能位在任何时候使能或禁能中断,中断使能寄存器IE的各
位如下所示
中断使能寄存器IE可位寻址
EA-ET2ESET1EX1ET0EX0
EA使能标志位置位则所有中断使能复位则禁止所有中断
-保留
ET2定时器2中断使能
ES串行通信中断使能
ET1定时器1中断使能
EX1外部中断1使能
ET0定时器0中断使能
EX0外部中断0使能
6.内置定时/计数器
定时器控制寄存器TCON可位寻址
TF1TR1TF0TR0IE1IT1IE0IT0
TF1定时器1溢出中断标志响应中断后由处理器清零
TR1定时器1控制位置位时定时器1工作复位时定时器1停止工作
TF0定时器0溢出标志位定时器0溢出时置位处理器响应中断后清除该位
TR0定时器0控制位置位时定时器0工作复位时定时器0停止工作
IE1外部中断1触发标志位当检测到P3.3有从高到低的跳变电平时置位处
理器响应中断后由硬件清除该位
IT1中断1触发方式控制位置位时为跳变触发复位时为低电平触发
IE0外部中断1触发标志位当检测到P3.3有从高到低的跳变电平时置位处
理器响应中断后由硬件清除该位
IT0中断0触发方式控制位置位时为跳变触发复位时为低电平触发
2.相关计算:
1.定时时间公式:
t0=(213-x0)*Tm=(213-x0)*1/fosc*12
式中x0为计数初值,Tm为机器周期,fosc为晶振频率。
2.初值计算:
初值x0=最大计数值-(定时时间t/机器周期Tm)
五、测试与分析
1.计数器显示测试与分析
部分原程序如下:
voiddisplay(void)
{
inti,j;
i=amount/10;
j=amount%10;
p20=0;p21=1;P0=dis_7[i];p21=1;p20=1;p20=1;p21=0;P0=dis_7[j];p21=1;p20=1;}
计数器的十位和个位出现闪烁不定,根本看不清时间是怎么变化的。
经过调用延时程序来实现计数器功能。
调整后程序如下:
voiddisplay(void)
{
inti,j;
i=amount/10;
j=amount%10;
p20=0;p21=1;P0=dis_7[i];delay1ms
(1);p21=1;p20=1;delay1ms
(1);p20=1;p21=0;P0=dis_7[j];delay1ms
(1);p21=1;p20=1;delay1ms
(1);}
分析:
当调用上面延时程序时,计数器的个位和十位闪烁时间在人眼看来视差变化不大,能看清计数器显示的时间。
2.发动机转动测试与分析
当要知道发动机是否工作时,控制电磁开关的P36,P37,P30,P31当(P36=0,P37=1|P30=0,P31=1)时,发动机就可以转动,同时工作灯亮,具体引用弱洗程序实例如下:
p25=1;
p36=1;
p37=0;
p33=0;p34=1;p35=0;p27=0;//work
sum=0;
time=15;
time=time+15;log=2;
while(sum{if(flag)
sum++;
flag=0;
scan();
amount=time-sum;
display();
}
分析:
当(P36=0,P37=1|P30=0,P31=1),电磁铁把开关吸过来,再接通电源,发动机就能工作。
3.中断测试与分析
中断又分为外部中断和内部中断,外部中断为INT0和INT1。
当发生外部中断时,同时暂停灯亮,具体程序实例如下:
voidstop(void)interrupt0using2
{
EA=0;
if(p32==0){delay1ms(5);while(p32==0);p24=0;if(log==2|log==3){p36=1;p37=1;p31=1;p30=1;}}
while(p32==1)
{
d=amount/10;
k=amount%10;
p20=0;p21=1;P0=dis_7[d];delay1ms
(1);p21=1;p20=1;delay1ms
(1);p20=1;p21=0;P0=dis_7[k];delay1ms
(1);p21=1;p20=1;delay1ms
(1);
}
while(p32==0);
if(log==2){p36=1;p37=0;p24=1;}
if(log==3){p31=1;p30=0;p24=1;}
p24=1;
EA=1;
}
分析:
当发生外部中断时,由于外部中断INT0的优先级最高,所有程序都停下,处于暂停状态,同时暂停灯亮。
六、结论
通过这次单片机课程设计,我们组合理的分工,每位组员根据自己的分工,尽心尽责,每位组员都出色的完成了任务,最终完成了全部预计任务:
结合了各种芯片与管脚,实现了自动洗衣机的基本功能。
程序使用c语言,成功的完成了程序编写功能。
总的说来,有四大亮点和四大遗憾。
四大亮点包括:
1.完整的硬件电路:
我们的电路使用了各种可能的芯片,使自动洗衣机的功能完善。
2.同步的时间显示:
我们各状态的时间都可以通过8051的控制程序在2位led显示器上用倒数的显示;3.可编程的时间模块:
我们的时间模块可通过编程键改变各状态的时间,实现了智能化。
4.可完全回复断点的暂停功能。
四大遗憾:
1.没有使用矩阵键盘,由于时间的关系,键盘只使用了独立键盘,浪费过多输出口;2.没有实现喇叭的蜂鸣:
由于程序过大,取消了由定时中断实现的蜂鸣功能;3.更改时间时显示器没有实现闪烁:
原本采用T1中断实现的闪烁功能,无法编程实现。
4时间能改变,但只能增加,无法减少:
减的算法要复杂的多。
总的来说,我们得到许多启迪:
刚开始学一样东西,总是没有头绪,感觉找不到方法,不知道做什么好。
这时要做的就是坚辞,坚辞,再坚辞。
坚辞学习,多方查找资料,多思考,在经过这样的一段时间后,就会有茅塞顿开的感觉。
在设计电路的时候,要尽量一开始就把所有变数考虑到,不然会直接影响到后期的编程。
我们刚开始设计时,没有考虑到有一些灯应该同时亮的,把所有的发光二极管全连在一个74ls138译码器上,结果到编程阶段又重新改电路,很是麻烦。
电路的设计要在对8051cpu很熟悉的基础上,比如,8051的一些用于中断的引脚要实现一些特殊功能的,必须单独设计。
另外,电路设计要尽量简化,让人觉得耳目一新。
编程阶段,是我们感觉最复杂的阶段。
很多功能明明觉得设计的很好,算法正确,可就是无法实现。
结果走了很多弯路。
这一阶段,我觉得应该先多读别人的优秀程序,多想别人的设计思路。
思路还是最关键的。
有了思路,再结合自己的程序,就容易实现。
编程让我们对8051单片机有了更多的了解,也懂得了很多算法。
我们在这一阶段成长了很多。
最后的实验报告书写阶段,我们完成了ppt的制作等工作。
这次单片机设计,我们学到的不仅是8051的功能,电路,程序,还掌握了学习的方法,懂得面对一个项目时,如何独立的完成。
我们有了一定的研究能力,能有方向的获取信息。
懂得了与同学合作的重要性,如何发挥每一个人的能动力,明白了一个优秀的团队胜过任何一个人。
这次课程设计,是我们人生的宝贵财富,将在我们今后的学习道路中,起到很重要的作用。
七、电路和程序
#include
intcount=1;
bitflag=0;
intlog=0;
inthelp=0;
charcodedis_7[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbitp20=P2^0;
sbitp21=P2^1;
sbitp33=P3^3;
sbitp34=P3^4;
sbitp35=P3^5;
sbitp36=P3^6;
sbitp37=P3^7;
sbitp31=P3^1;
sbitp25=P2^5;
sbitp26=P2^6;
sbitp27=P2^7;
sbitp14=P1^4;
sbitp15=P1^5;
sbitp17=P1^7;
sbitp10=P1^0;
sbitp11=P1^1;
sbitp12=P1^2;
sbitp32=P3^2;
sbitp24=P2^4;
intsum=0;
intcount;
sbitp30=P3^0;
intamount;
inttime=15;
inth=0;
intd=0;
intk=0;
sbitp13=P1^3;
voiddelay(void)interrupt1using1
{
TL0=0xAF;
TH0=0x3C;
count++;
if(count==10)
{
count=0;
flag=1;
}
}
voiddelay1ms(