《基于單片機(jī)的洗衣機(jī)設(shè)計(jì)》由會(huì)員分享,可在線閱讀,更多相關(guān)《基于單片機(jī)的洗衣機(jī)設(shè)計(jì)(19頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)報(bào)告
單片機(jī)原理及系統(tǒng)課程設(shè)計(jì)
評(píng)語(yǔ):
考勤10分
守紀(jì)10分
過(guò)程30分
設(shè)計(jì)報(bào)告30分
答辯20分
總成績(jī)(100分)
專 業(yè): 自動(dòng)控制
班 級(jí):
姓 名:
學(xué) 號(hào):
指導(dǎo)教師:
蘭州交通大學(xué)自動(dòng)化與電氣工程學(xué)院
2014 年 1 月 12 日
基于AT89C51單片機(jī)的全自動(dòng)洗衣機(jī)設(shè)計(jì)
1 設(shè)計(jì)目的及要求
1.1設(shè)計(jì)目的
洗衣機(jī)已成為人們?nèi)粘I钪斜夭豢缮俚囊徊糠郑莻鹘y(tǒng)的基于繼電器的控制,已不能滿足人們對(duì)洗衣機(jī)的要求。因此設(shè)計(jì)了基于單片機(jī)的洗衣機(jī)控制電路系統(tǒng),由單片機(jī)控制實(shí)現(xiàn)洗衣機(jī)的各項(xiàng)功能。單片機(jī)的體積小,控制功能靈活,因此,設(shè)計(jì)出基于單片機(jī)的全自動(dòng)洗衣機(jī)控制電路系統(tǒng)具有很強(qiáng)的實(shí)用性。由于個(gè)人能力有限,所設(shè)計(jì)的洗衣機(jī)比前沿科技產(chǎn)品要差很遠(yuǎn)。所以這次課程設(shè)計(jì)的主要目的在于通過(guò)親手操作,查找資料,培養(yǎng)自己的分析設(shè)計(jì)能力,把這學(xué)期課程中零散的知識(shí)進(jìn)行整合,將理論的知識(shí)聯(lián)系到實(shí)際的生活中,在實(shí)例中深入理解一些理論知識(shí),并從中有所收獲。
1.2設(shè)計(jì)要求
模擬全自動(dòng)洗衣機(jī)工作過(guò)程。以電機(jī)替代洗衣機(jī)電機(jī)。顯示洗衣機(jī)工作的狀態(tài)(進(jìn)水、浸泡、洗衣、脫水、結(jié)束)。顯示工作剩余時(shí)間(洗衣程序可自定義,時(shí)間精度:秒)。洗衣時(shí)交替正、反轉(zhuǎn)。
2 設(shè)計(jì)方案及原理
2.1設(shè)計(jì)方案
利用AT89C51單片機(jī)的P0,P1,P2,P3串行口的輸入輸出功能,控制數(shù)碼管、電動(dòng)機(jī)、發(fā)光二極管的工作狀態(tài),進(jìn)而模擬洗衣機(jī)的基本工作過(guò)程。
洗衣機(jī)的主要工作過(guò)程是:進(jìn)水—洗滌—漂洗—換水—漂洗—換水—漂洗—換水—脫水—結(jié)束。上述工作過(guò)程中,包含三個(gè)過(guò)程:洗滌過(guò)程、漂洗過(guò)程、脫水過(guò)程。
(1) 洗滌過(guò)程:放好待洗物,啟動(dòng)開(kāi)關(guān),進(jìn)水閥通電,向洗衣機(jī)供水,供水結(jié)束后,洗滌電動(dòng)機(jī)接通電源,通過(guò)電機(jī)不停的正轉(zhuǎn)、反轉(zhuǎn),形成洗滌水對(duì)洗滌物產(chǎn)生強(qiáng)烈的翻滾作用;同時(shí)衣物之間、衣物與四周桶壁之間產(chǎn)生互相摩擦和撞擊力,達(dá)到洗滌衣物的目的。
(2) 漂洗過(guò)程:漂洗的目的在于清除衣物上的洗滌液,因此,漂洗過(guò)程與洗滌過(guò)程的電機(jī)動(dòng)作是完全相同的。
(3) 脫水過(guò)程:漂洗過(guò)程結(jié)束后,電動(dòng)機(jī)停止轉(zhuǎn)動(dòng),排水閥通電,打開(kāi)排水閥門排水。當(dāng)排水到一定程度,滿足安全條件時(shí),脫水電動(dòng)機(jī)接通,電機(jī)帶動(dòng)脫水桶高速旋轉(zhuǎn),利用離心力把衣服上的水從桶壁的小眼里甩出。
全部洗衣工作完成后,結(jié)束指示的LED燈點(diǎn)亮,表示衣物已經(jīng)洗好,洗衣機(jī)就會(huì)自動(dòng)停止工作。
2.2 設(shè)計(jì)原理
系統(tǒng)設(shè)計(jì)包括晶振和復(fù)位模塊,電機(jī)驅(qū)動(dòng)模塊,LED顯示模塊,按鍵控制模塊以及數(shù)碼管顯示模塊五部分。利用AT89C51單片機(jī)芯片,芯片左排引腳外接晶振和復(fù)位電路,通過(guò)74LS245鎖存器連接至數(shù)碼管,控制數(shù)碼管穩(wěn)定顯示。右排引腳外接電機(jī)驅(qū)動(dòng)電路和各開(kāi)關(guān)以及LED燈。通過(guò)人工按壓相應(yīng)的開(kāi)關(guān),接通電機(jī)驅(qū)動(dòng)電路相應(yīng)的接線端子,實(shí)現(xiàn)電機(jī)正反轉(zhuǎn)以及LED顯示??傮w設(shè)計(jì)原理框圖如圖1所示。
圖1 系統(tǒng)原理框圖
通過(guò)對(duì)開(kāi)關(guān)的操作實(shí)現(xiàn)選擇想要進(jìn)行的任何操作。當(dāng)選擇好模式后進(jìn)入該模式。該模式的參數(shù)已裝入在單片機(jī)中,在單片機(jī)中程序的控制下進(jìn)行工作。
程序?qū)崿F(xiàn)的主要功能是洗滌,漂洗和脫水的控制。其中洗滌時(shí)間設(shè)初值為136s,由于洗衣過(guò)程中電機(jī)要不停的正反轉(zhuǎn),所以用P3.2和P3.3控制。通過(guò)流經(jīng)電機(jī)兩端電平的高低控制電流的流向,從而改變電機(jī)的轉(zhuǎn)向,實(shí)現(xiàn)正反轉(zhuǎn)。漂洗過(guò)程和洗滌過(guò)程較為相似,由于漂洗要多次進(jìn)行,所以用進(jìn)水次數(shù)標(biāo)志位flag1控制,當(dāng)flag1為2,3,4時(shí)為漂洗過(guò)程。脫水過(guò)程是在出水次數(shù)flag2的控制下進(jìn)行。當(dāng)flag2為4時(shí)脫水,當(dāng)脫水時(shí)間到達(dá)0后,脫水結(jié)束,洗衣結(jié)束。上述三個(gè)過(guò)程中電機(jī)工作利用晶體管組成的驅(qū)動(dòng)電路進(jìn)行驅(qū)動(dòng)。
3 硬件設(shè)計(jì)
3.1主要元器件
在本設(shè)計(jì)中主要使用了以下元器件:AT89C51單片機(jī)芯片、74LS245芯片 、晶體振蕩器、數(shù)碼管、發(fā)光二極管、直流電動(dòng)機(jī)、三極管。
3.2 硬件連接圖
該設(shè)計(jì)主要應(yīng)用80C51單片機(jī),外接一些必要的擴(kuò)展電路,構(gòu)成系統(tǒng)電路原理圖,如圖2所示。
圖2 硬件連接圖
3.3 系統(tǒng)設(shè)計(jì)原理
該設(shè)計(jì)采用模塊化的方法,系統(tǒng)原理圖分為五個(gè)模塊,分別為晶振和復(fù)位模塊,電機(jī)驅(qū)動(dòng)模塊,LED顯示模塊,按鍵控制模塊以及數(shù)碼管顯示模塊。
晶振和復(fù)位模塊主要通過(guò)51單片機(jī)的內(nèi)部振蕩方式,產(chǎn)生原始的時(shí)鐘頻率。電機(jī)驅(qū)動(dòng)模塊主要包含電阻、三極管放大器和一個(gè)電機(jī),通過(guò)與51單片機(jī)的P3.0-P3.3引腳連接,用于驅(qū)動(dòng)相應(yīng)的洗衣、漂洗和脫水程序。LED顯示模塊主要通過(guò)與51單片機(jī)的P0口8個(gè)引腳連接,當(dāng)按下相應(yīng)按鍵時(shí),對(duì)應(yīng)的LED指示燈點(diǎn)亮,實(shí)現(xiàn)對(duì)洗衣機(jī)控制過(guò)程的指示。按鍵控制模塊,其連接于P3口部分引腳上,實(shí)現(xiàn)對(duì)洗衣過(guò)程的選擇及控制。數(shù)碼管顯示模塊,其直接與單片機(jī)的P2口相連。
4 軟件設(shè)計(jì)
4.1 主程序流程圖
按下K1鍵,洗衣機(jī)進(jìn)入待命狀態(tài);當(dāng)按下K2鍵后,洗衣機(jī)才進(jìn)入工作狀態(tài)。其主程序及流程圖見(jiàn)附錄2.1。
4.2 洗滌過(guò)程流程圖
電機(jī)正反轉(zhuǎn)均為15s,程序及流程圖見(jiàn)附錄2.2。
4.3 漂洗過(guò)程流程圖
漂洗前先打開(kāi)排水閥排水5s。然后啟動(dòng)電動(dòng)機(jī)漂洗,一次漂洗結(jié)束后,接著判斷漂洗次數(shù)即flag3的值,若flag3 為3則漂洗結(jié)束,若flag3不為3,則再次執(zhí)行漂洗操作,進(jìn)入下一循環(huán)。程序及流程圖見(jiàn)附錄2.3。
5 系統(tǒng)仿真及實(shí)際調(diào)試
系統(tǒng)仿真結(jié)果圖如圖3所示。
圖3 系統(tǒng)仿真結(jié)果圖
6 總結(jié)
經(jīng)過(guò)一個(gè)學(xué)期的時(shí)間完成了基于單片機(jī)的洗衣機(jī)控制系統(tǒng)的設(shè)計(jì),本系統(tǒng)是基于單片機(jī)及其接口技術(shù)、計(jì)算機(jī)技術(shù)、微電子技術(shù)綜合應(yīng)用的設(shè)計(jì)。實(shí)現(xiàn)了對(duì)洗衣機(jī)整個(gè)洗衣過(guò)程的控制包括用戶參數(shù)輸入、洗衣、脫水和結(jié)束演奏四個(gè)階段??刂葡到y(tǒng)主要由電源電路、控制電路兩大模塊構(gòu)成。電源電路為控制電路提供穩(wěn)定的5V直流電壓,為電動(dòng)機(jī)提供電;控制電路負(fù)責(zé)控制洗衣機(jī)的工作過(guò)程,主要由AT89C51單片機(jī)、四位共陽(yáng)數(shù)碼管、按鍵、LED指示燈、電動(dòng)機(jī)、進(jìn)水排水電磁閥組成。在系統(tǒng)設(shè)計(jì)中查閱了大量相關(guān)的中文和外文資料以及各芯片的廠家技術(shù)資料手冊(cè)借鑒了很多前人成熟的經(jīng)驗(yàn)。
對(duì)于以上之粗淺體會(huì)進(jìn)一步的總結(jié)和提高,需要有更多的社會(huì)實(shí)踐來(lái)提供,我也相信在不久的將來(lái)踏入社會(huì),類似這樣的設(shè)計(jì)絕不在少數(shù),只要我們努力學(xué)習(xí)、勇于實(shí)踐、勤學(xué)好問(wèn)我們就會(huì)懂得以前不明白或不懂的道理,就會(huì)很快地成長(zhǎng)和成熟起來(lái)。我也相信憑著我自強(qiáng)不息勇于拼搏的精神一定能夠很快的適應(yīng)類似設(shè)計(jì)的需要,適應(yīng)這個(gè)多變的社會(huì),充分發(fā)揮長(zhǎng)處朝我們的方向不斷前進(jìn)前進(jìn)再前進(jìn)!
參考文獻(xiàn)
[1] 王思明,張金敏,茍軍年等 單片機(jī)原理及應(yīng)用系統(tǒng)設(shè)計(jì)[M] 科學(xué)出版社 2012:176-189
[2] 譚浩強(qiáng) C程序設(shè)計(jì)(第四版) [M] 清華大學(xué)出版社 2010:36-60
附錄
附錄一
源程序
#include
#define uchar unsigned char
#define uint unsigned int
//***************************//
sbit mo_r=P3^2; //電機(jī)右控制線
sbit mo_l=P3^3; //電機(jī)左控制線
//****************************//
sbit key_menu=P3^4; // 菜單按鍵
sbit key_on=P3^5; // 開(kāi)始按鍵
sbit key_off=P3^6; // 結(jié)束按鍵
sbit key_se=P3^7; // 菜單選擇按鍵
//***************************//
sbit led_in=P0^0; // 進(jìn)水指示燈
sbit led_xi=P0^1; // 洗衣指示燈
sbit led_pao=P0^2; // 泡洗指示燈
sbit led_xx=P0^3; // 脫水指示燈
sbit led_out=P0^4; // 出水指示燈
sbit led_over=P0^5; // 洗衣結(jié)束指示燈
sbit led_work=P0^6; // 電機(jī)工作指示燈
sbit other=P3^1; // 脫水電源控制開(kāi)關(guān)
sbit anther=P3^0; // 洗衣電源控制開(kāi)關(guān)
//******************************//
uchar code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//*****************************//
char sec=0; // 時(shí)間秒
char min=0; // 時(shí)間分
uchar count=0; // 中斷計(jì)數(shù)
uchar flag0=0; // 洗衣機(jī)工作狀態(tài)標(biāo)志
uchar flag1=0; // 進(jìn)水次數(shù)標(biāo)志
uchar flag2=0; // 出水次數(shù)標(biāo)志
uchar flag3=0; // 泡洗次數(shù)標(biāo)志
uchar quan=0; // 正反轉(zhuǎn)計(jì)數(shù)
//**********************************//
void delay(); // 延時(shí)函數(shù)
void in(); // 進(jìn)水子程序
void out(); // 出水子程序
void over(); // 結(jié)束子程序
void xi(); // 洗衣子程序
void pao(); // 泡衣子程序
void xx(); // 脫水子程序
void on(); // 工作on處理子程序
void se(); // 顯示菜單選擇
void SEG_display(); // 顯示時(shí)間子程序
void key_scan(); // 按鍵掃描子程序
void delay(uint i)
{
uint x,y;
for(x=i;x>0;x--)
for(y=120;y>0;y--);
}
// 工作on處理子程序
//********************************//
void on()
{
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();
}
// 結(jié)束子程序
//*********************************//
void over()
{ other=0;
anther=0;
P0=0xff;
mo_r=0;
mo_l=0;
led_over=0;
EA=0;
}
// 進(jìn)水子程序
//*********************************//
void in()
{ anther=0;
other=0;
P0=0xff;
led_in=0;
flag1++;
mo_r=0;
mo_l=0;
min=0;
sec=8;
}
// 洗衣子程序
//*********************************//
void xi()
{ anther=1;
other=0;
P0=0xff;
led_work=0;
led_xi=0;
mo_r=1;
mo_l=0;
min=1;
sec=36;
quan=0;
}
// 泡衣子程序
//*********************************//
void pao()
{
anther=1;
other=0;
P0=0xff;
led_pao=0;
led_work=0;
flag3++;
mo_r=1;
mo_l=0;
min=1;
sec=35;
quan=0;
}
// 脫水子程序
//*********************************//
void xx()
{ other=1;
anther=0;
P0=0xff;
led_xx=0;
mo_r=0;
mo_l=1;
min=0;
sec=50;
}
// 出水子程序
//*********************************//
void out()
{ anther=0;
other=0;
P0=0xff;
led_out=0;
flag2++;
mo_r=0;
mo_l=0;
min=0;
sec=5;
}
// 顯示菜單選擇
//*********************************//
void se()
{
P0=0xff;
if(flag0 >= 5)
flag0=0;
if(flag0==0)
{
led_in=0;
}
if(flag0==1)
{
led_xi=0;
}
if(flag0==2)
{
led_pao=0;
}
if(flag0==3)
{
led_xx=0;
}
if(flag0==4)
{
led_out=0;
}
}
// 菜單處理子程序
//**********************************//
void menu()
{
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();
}
}
}
}
// 按鍵掃描子程序
//*********************************//
void key_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();
}
}
}
// 顯示子程序
//*********************************//
void SEG_display()
{
P1=0x01;
P2=num[min/10];
delay(10);
P1=0x02;
P2=num[min%10];
delay(10);
P1=0x04;
P2=num[sec/10];
delay(10);
P1=0x08;
P2=num[sec%10];
delay(10);
}
// 主函數(shù)
//*********************************//
void main()
{
led_in=0;
anther=0;
other=0;
while(1)
{
SEG_display();
key_scan();
}
}
// 定時(shí)器0中斷處理程序
//**********************************//
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
sec--;
if((flag0==1)||(flag0==2))
{
quan++;
switch(quan)
{
case 1:mo_r=1;mo_l=0;break;
case 10:mo_r=0;mo_l=0;break;
case 15:mo_r=0;mo_l=1;break;
case 25: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)) //進(jìn)水結(jié)束
{
switch(flag1)
{
case 1:flag0=1;xi();break;
case 2:flag0=2;pao();break;
case 3:flag0=2;pao();break;
case 4:flag0=2;pao();break;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==1)) //洗衣結(jié)束
{
flag0=4;
out();
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==2)) //泡衣結(jié)束
{
switch(flag3)
{
case 1:flag0=4;out();break;
case 2:flag0=4;out();break;
case 3:flag0=4;out();break;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==4)) //出水結(jié)束
{
switch(flag2)
{
case 1:flag0=0;in();break;
case 2:flag0=0;in();break;
case 3:flag0=0;in();break;
case 4:flag0=3;xx();break;
}
}
//***********************************//
if((sec<0)&&(min==0)&&(flag0==3))
{ sec=0;
over();
}
}
}
附錄2
附錄2.1主程序
void main()
{
led_in=0;
anther=0;
other=0;
while(1)
{
SEG_display();
key_scan();
}
}
// 定時(shí)器0中斷處理程序
//**********************************//
void timer0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++;
if(count==20)
{
count=0;
sec--;
if((flag0==1)||(flag0==2))
{
quan++;
switch(quan)
{
case 1:mo_r=1;mo_l=0;break;
case 10:mo_r=0;mo_l=0;break;
case 15:mo_r=0;mo_l=1;break;
case 25: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)) //進(jìn)水結(jié)束
{
switch(flag1)
{
case 1:flag0=1;xi();break;
case 2:flag0=2;pao();break;
case 3:flag0=2;pao();break;
case 4:flag0=2;pao();break;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==1)) //洗衣結(jié)束
{
flag0=4;
out();
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==2)) //泡衣結(jié)束
{
switch(flag3)
{
case 1:flag0=4;out();break;
case 2:flag0=4;out();break;
case 3:flag0=4;out();break;
}
}
//**********************************//
if((sec<0)&&(min==0)&&(flag0==4)) //出水結(jié)束
{
switch(flag2)
{
case 1:flag0=0;in();break;
case 2:flag0=0;in();break;
case 3:flag0=0;in();break;
case 4:flag0=3;xx();break;
}
}
//***********************************//
if((sec<0)&&(min==0)&&(flag0==3))
{ sec=0;
over();
}
}
}
附錄圖2.1 主程序流程圖
2.2洗滌過(guò)程程序
void xi()
{ anther=1;
other=0;
P0=0xff;
led_work=0;
led_xi=0;
mo_r=1;
mo_l=0;
min=0;
sec=30;
quan=0;
}
附錄圖2.2 洗滌程序流程圖
2.3 漂洗子程序
void pao()
{
anther=1;
other=0;
P0=0xff;
led_pao=0;
led_work=0;
flag3++;
mo_r=1;
mo_l=0;
min=0;
sec=10;
quan=0;
}
附錄圖2.3 漂洗程序流程圖
18
鏈接地址:http://appdesigncorp.com/p-10048540.html