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