0.png (42.63 KB, 下載次數(shù): 112)
下載附件
2018-12-4 03:11 上傳
學(xué)習(xí)電機(jī)驅(qū)動(dòng)、繼電器的原理及編程方法。 學(xué)習(xí)鍵盤(pán)的原理及編程方法。 掌握51單片機(jī)定時(shí)器與中斷的使用。
2、要求- 請(qǐng)參照主要技術(shù)指標(biāo)和說(shuō)明完成本次設(shè)計(jì)。
- 畫(huà)出硬件連接電路圖,說(shuō)明各個(gè)控制信號(hào)的作用。
- 畫(huà)出程序流程圖,編寫(xiě)程序,硬件連接調(diào)試,直至正確。
- 編寫(xiě)設(shè)計(jì)文檔。
三、主要技術(shù)指標(biāo)和說(shuō)明● 由獨(dú)立式按鍵確定功能鍵,包括“標(biāo)準(zhǔn)”、“經(jīng)濟(jì)”、“單獨(dú)”、“排水”、“強(qiáng)洗”、“弱洗”等等; ● 排水與進(jìn)水由時(shí)間控制; ● 開(kāi)機(jī)默認(rèn)狀態(tài)為標(biāo)準(zhǔn)方式、強(qiáng)洗; ● 在洗滌和漂洗過(guò)程中,電動(dòng)機(jī)正轉(zhuǎn)一次,反轉(zhuǎn)一次,連續(xù)運(yùn)行; ● 在進(jìn)水和脫水過(guò)程中,相應(yīng)指示燈亮,繼電器吸合; ● 當(dāng)在執(zhí)行某個(gè)步驟時(shí),只有“K3”鍵有效,按下暫停,再按下恢復(fù)運(yùn)行。 摘要 全自動(dòng)洗衣機(jī)就是將洗衣的全過(guò)程(泡浸-洗滌-漂洗-脫水)預(yù)先設(shè)定好N個(gè)程序,洗衣時(shí)選擇其中一個(gè)程序,打開(kāi)水龍頭和啟動(dòng)洗衣機(jī)開(kāi)關(guān)后洗衣的全過(guò)程就會(huì)自動(dòng)完成,洗衣完成時(shí)由蜂鳴器發(fā)出響聲。洗衣機(jī)的標(biāo)準(zhǔn)洗衣程序是:洗滌——脫水——脫水——漂洗——脫水——漂洗——脫水。經(jīng)濟(jì)洗衣程序少一次漂洗和脫水過(guò)程。 洗衣機(jī)控制器由單片機(jī)作為控制器的核心所構(gòu)成,該控制器具有以下特點(diǎn): (1)具有較強(qiáng)的抗干擾能力,當(dāng)受到外部強(qiáng)干擾,程序出錯(cuò)時(shí),可以自動(dòng)使系統(tǒng)復(fù)位重新執(zhí)行程序。 (2)采用無(wú)噪聲、無(wú)電磁干擾的雙向晶閘管作為控制元件,控制電磁閥和電機(jī)。 (3)具有欠壓和過(guò)壓保護(hù),欠壓時(shí),控制器不工作;超壓時(shí),保護(hù)電路起作用。 (4)具有瞬間掉電保護(hù)功能,電源短時(shí)間停電后,電壓恢復(fù)時(shí),能夠維持原運(yùn)行程序的工作狀態(tài)并繼續(xù)完成洗衣程序。 (5)各種操作和洗衣機(jī)的運(yùn)行狀態(tài)均用LED顯示. 一、設(shè)計(jì)任務(wù)與要求 利用51單片機(jī)模擬全自動(dòng)智能洗衣機(jī)。 - 通過(guò)“K1”鍵步進(jìn)改變“標(biāo)準(zhǔn)]經(jīng)濟(jì)、單獨(dú)、排水”四種方式,執(zhí)行相應(yīng)的程序。對(duì)應(yīng)指示燈亮。
- 通過(guò)“K2”鍵步進(jìn)改變“強(qiáng)洗、弱洗”兩種方式,執(zhí)行相應(yīng)的程序,對(duì)應(yīng)指示燈亮。
- 通過(guò)“K3”鍵控制洗衣機(jī)運(yùn)行、暫停和解除報(bào)警功能。
一般洗衣機(jī)的步驟為:洗滌,漂洗,脫水,當(dāng)處于某種狀態(tài)時(shí),對(duì)應(yīng)的指示燈以0.7S周期閃爍,當(dāng)洗衣機(jī)在洗滌過(guò)程中,洗滌指示燈閃爍?梢酝ㄟ^(guò)方式選擇設(shè)定具體的運(yùn)行過(guò)程。 - 標(biāo)準(zhǔn)方式:進(jìn)水—> 洗滌 —> 排水 —> 進(jìn)水 —> 漂洗 —> 排水 —>進(jìn)水 —> 漂洗—> 排水 —> 脫水。
- 經(jīng)濟(jì)方式:進(jìn)水 —> 洗滌 —> 排水 —> 進(jìn)水 —> 漂洗 —> 排水 —> 脫水。
- 單獨(dú)方式:進(jìn)水 —> 洗滌。
- 排水方式:排水 —> 脫水。
- 強(qiáng)洗即電動(dòng)機(jī)轉(zhuǎn)速快,弱洗即電動(dòng)機(jī)轉(zhuǎn)速慢。
- 開(kāi)機(jī)默認(rèn)狀態(tài)為標(biāo)準(zhǔn)方式、強(qiáng)洗。
- 在洗滌和漂洗過(guò)程中,電動(dòng)機(jī)正轉(zhuǎn)一次,反轉(zhuǎn)一次,連續(xù)運(yùn)行。
- 在進(jìn)水和脫水過(guò)程中,相應(yīng)的指示燈亮,繼電器吸合。
- 當(dāng)執(zhí)行某個(gè)步驟時(shí),只有“K3”鍵有效,按下暫停,再按恢復(fù)運(yùn)行。
全自動(dòng)洗衣機(jī)的實(shí)現(xiàn)方案組成框圖如圖一所示。它主要有電源、單片機(jī)最小系統(tǒng)、開(kāi)關(guān)檢測(cè)電路、控制按鍵輸入電路和LED指示電路、繼電器和電動(dòng)機(jī)電路。  圖二 - 電動(dòng)機(jī)驅(qū)動(dòng)模塊電路設(shè)計(jì)
電動(dòng)機(jī)驅(qū)動(dòng)采用LD298電動(dòng)機(jī)驅(qū)動(dòng)芯片,單片機(jī)P25、P24與L298的IN1、IN2分別對(duì)應(yīng)相連,ENA直接接VCC,后面所加4個(gè)二極管VD3到VD6起連續(xù)作用。電動(dòng)機(jī)驅(qū)動(dòng)電路原理圖如圖二所示。 電動(dòng)機(jī)驅(qū)動(dòng)芯片的電源VCC和VS之間通過(guò)0歐的電阻R20進(jìn)行隔離后,對(duì)LD298進(jìn)行供電。 如圖二所示,K3鍵接到單片機(jī)的外部中斷0,通過(guò)中斷實(shí)現(xiàn)運(yùn)行、暫停、繼續(xù)運(yùn)行的控制功能,當(dāng)K3鍵第一次按下時(shí)(num2=1)正常運(yùn)行,當(dāng)K3鍵第二次按下時(shí)(num2=2)暫停運(yùn)行。 如圖二所示,單片機(jī)的P23用來(lái)控制排水閥繼電器,P22用來(lái)控制進(jìn)水閥繼電器,P22和P23對(duì)應(yīng)輸出為0時(shí)對(duì)應(yīng)的閥打開(kāi),輸出為1時(shí)對(duì)應(yīng)的閥關(guān)閉。 軟件設(shè)計(jì) 1)流程圖 主程序流程圖如圖三所示。 程序附在最后 
圖三 1、軟件調(diào)試: 寫(xiě)程序代碼時(shí)應(yīng)先搭建好硬件電路,然后根據(jù)硬件電路寫(xiě)程序代碼。在調(diào)試程序過(guò)程中,先保證程序能夠運(yùn)行無(wú)錯(cuò)誤,然后在燒到實(shí)物中觀察結(jié)果。 2、硬件調(diào)試: 硬件電路設(shè)計(jì)與軟件設(shè)計(jì)完成后,將程序燒寫(xiě)到單片機(jī)中,觀察運(yùn)行結(jié)果是否符合要求。如果不符合設(shè)計(jì)要求,應(yīng)先檢查硬件是否能正常工作,如用實(shí)驗(yàn)板自帶的正確代碼檢測(cè)硬件電路;然后根據(jù)設(shè)計(jì)要求到程序代碼中分模塊進(jìn)行調(diào)試,比如該設(shè)計(jì)需用到液晶、矩陣鍵盤(pán)、定時(shí)器、獨(dú)立鍵盤(pán)、中斷和LED燈等,如果測(cè)試過(guò)程中液晶模塊不能正常顯示或者顯示亂碼,應(yīng)將液晶模塊單獨(dú)分離出來(lái)進(jìn)行測(cè)試,其他模塊亦是如此。程序調(diào)試完成后,應(yīng)在硬件電路上反復(fù)運(yùn)行,以確保程序和硬件電路的穩(wěn)定性。 這次單片機(jī)程序設(shè)計(jì)專周,我感覺(jué)收獲了很多,尤其是在提升自身的工作和自主學(xué)習(xí)能力方面。我在大二上學(xué)期就開(kāi)始在實(shí)驗(yàn)室自學(xué)單片機(jī),但是因?yàn)槭亲詫W(xué),自覺(jué)性就很差,而且自學(xué)也是一件比較難的事,學(xué)習(xí)過(guò)程中一直都是學(xué)習(xí)和模仿別人的代碼,看著別人寫(xiě)出來(lái)的程序代碼,總覺(jué)得都能看懂,所以自己基本上沒(méi)有自己構(gòu)思寫(xiě)程序代碼, 唯一做過(guò)一次全自動(dòng)洗衣機(jī)也是看著別人寫(xiě)的源程序代碼,不停的修修改改。 這次剛拿到設(shè)計(jì)項(xiàng)目時(shí),本以為不難,一開(kāi)始還信心滿滿,然而開(kāi)始做就感覺(jué)有些茫然了,尤其是項(xiàng)目中還有些知識(shí)是我還沒(méi)學(xué)過(guò)的,比如液晶。所以我們組就必須得先把液晶學(xué)了,把需要學(xué)習(xí)的模塊學(xué)完后,先是毫無(wú)頭緒的寫(xiě)主程序,整個(gè)過(guò)程舉步維艱,然后我們?nèi)W(xué)習(xí)了別人的設(shè)計(jì)方法,開(kāi)始分工和分模塊進(jìn)行。組內(nèi)分組搭建硬件電路,和寫(xiě)程序,先把電路搭建好,再寫(xiě)程序。寫(xiě)程序的過(guò)程中,我們是把程序分成幾個(gè)小模塊:液晶顯示模塊、鍵盤(pán)輸入模塊、搶答模塊,然后每個(gè)模塊寫(xiě)成子程序,在主程序中只需調(diào)用各個(gè)子程序即可。 在程序調(diào)試過(guò)程中,也遇到各種問(wèn)題,但都逐個(gè)解決了。在整個(gè)設(shè)計(jì)過(guò)程中,我學(xué)到了許多課堂上老師無(wú)法傳授的知識(shí),也真正地做出了一件自己的產(chǎn)品。
單片機(jī)源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar num=0,num1=0,num2=0,num3=0,num4=0,num5=0,num6=0,flag=0,flag1=0,flag4=0,flag5=0,circle=0;
- sbit ledbiaozhun=P1^0; //LED指示燈
- sbit ledjingji =P1^1;
- sbit leddandu =P1^2;
- sbit ledpaishui =P1^3;
- sbit ledqiangxi =P1^4;
- sbit ledruoxi =P1^5;
- sbit ledxidi =P1^6;
- sbit ledpiaoxi =P1^7;
- sbit ledtuoshui =P2^0;
-
- sbit sshuiwei =P3^6; //水位開(kāi)關(guān)
- sbit sgai =P3^7; //蓋開(kāi)關(guān)
- sbit paishui=P2^3; //排水閥控制
- sbit jinshui=P2^2; //進(jìn)水閥控制
-
- sbit U2=P2^4;
- sbit U3=P2^5;
- sbit k1=P3^0; // 步進(jìn)改變"標(biāo)準(zhǔn)、經(jīng)濟(jì)、單獨(dú)、排水"四種方式
- sbit k2=P3^1; //強(qiáng)洗、弱洗
- sbit k3=P3^2; //運(yùn)行、暫停和解除報(bào)替功能
- void init()
- {
- uchar a=0,b=0,c=0;
- TMOD=0x01; //T0工作于方式1
- TH0=(65536-50000)/256; //定時(shí)時(shí)間50ms
- TL0=(65536-50000)%256;
- EA=1; //開(kāi)總中斷
- ET0=1; //開(kāi)T0中斷
- TR0=0; //關(guān)閉T0
- EX0=1; //開(kāi)外部中斷0
- IT0=1; //外部中斷0邊沿觸發(fā)方式
- U2=1; //電機(jī)停轉(zhuǎn)
- U3=1;
- P0=0xff;
- }
- void delayms(uint xms) //延時(shí)
- {
- uint i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);
- }
-
- void key() //控制按鍵
- {
- circle=1;
- if(k1==0) //標(biāo)準(zhǔn)、經(jīng)濟(jì)、單獨(dú)、排水按下
- {
- delayms(10); //延時(shí)消抖
- if(k1==0) //再判
- {
- num++; //K1按下次數(shù)加1
- if(num==4)
- num=0; //等于4,按下次數(shù)清0
- while(!k1); //等待按鍵釋放
- }
- }
-
- if(k2==0) //強(qiáng)弱選擇
- {
- delayms(10); //延時(shí)消抖
- if(k2==0) //再判
- {
- num1++; //按下次數(shù)加1
- if(num1==2)
- num1=0; //等于2,按下次數(shù)清0
- while(!k2); //等待按鍵釋放
- }
- }
- }
-
- void qiang() //強(qiáng)
- {
- if(flag4==0) //電機(jī)正轉(zhuǎn)
- {
- U2=0;
- U3=1;
- }
-
- if(flag4==1) //電機(jī)反轉(zhuǎn)
- {
- U2=1;
- U3=0;
- }
- }
- void ruo() //弱
- {
- if(flag5==0) //電機(jī)正轉(zhuǎn)
- {
- U2=0;
- U3=1;
- }
-
- if(flag5==1) //電機(jī)反轉(zhuǎn)
- {
- U2=1;
- U3=0;
- }
- }
-
- void qbiaozhun() //強(qiáng)標(biāo)準(zhǔn)
- {
- /*******洗滌********/
- num=0;
- num1=0;
- ledbiaozhun=0;//標(biāo)準(zhǔn)洗LED亮
- ledqiangxi=0; //強(qiáng)洗LED亮
- jinshui=0; //打開(kāi)進(jìn)水閥
- ledxidi=1; //洗滌
- ledpiaoxi=1; //漂洗LED亮
- ledtuoshui=1; //脫水LED亮
- delayms(5000);//水位監(jiān)測(cè)
- jinshui=1; //關(guān)閉進(jìn)水閥
- ledxidi=0;
- flag1=1; //
- TR0=1; //啟動(dòng)定時(shí)器T0
- while(flag==0)//flag為洗滌次數(shù)標(biāo)志位
- {
- if(flag==0&&num2==1)
- {
- TR0=1;
- flag1=1; //
- qiang();
- }
- if(flag==0&&num2==2)
- {
- TR0=0; //關(guān)閉定時(shí)器T0
- U2=1; //電機(jī)停止
- U3=1;
- }
- };
- //漂洗
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0; //排水
- ledtuoshui=1;
- ledpiaoxi=1;
- ledxidi=1;
- delayms(5000);
- paishui=1; //關(guān)閉排水
- delayms(100);
- jinshui=0; //打開(kāi)進(jìn)水
- delayms(5000);
- jinshui=1; //關(guān)閉進(jìn)水
- ledpiaoxi=0;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==1)
- {
- if(flag==1&&num2==1)//強(qiáng)漂洗
- {
- TR0=1;
- flag1=2;
- qiang();
- }
- if(flag==1&&num2==2)//暫停強(qiáng)漂洗
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- //漂洗
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0;
- ledtuoshui=1;
- ledpiaoxi=0;
- delayms(5000);
- paishui=1;
- delayms(100);
- jinshui=0;
- delayms(5000);
- jinshui=1;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
-
- while(flag==2)
- {
- if(flag==2&&num2==1)
- {
- TR0=1;
- flag1=2;
- qiang();
- }
- if(flag==2&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- } ;
- //脫水
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0;//打開(kāi)排水
- ledtuoshui=0;
- ledpiaoxi=1;
- while(sgai);
- paishui=1;
- delayms(1000);
- flag1=3;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==3)
- {
- if(flag==3&&num2==1)
- {
- TR0=1;
- U2=0;
- U3=1;
- flag1=3;
- }
- if(flag==3&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- ledtuoshui=1;
- U2=1;
- U3=1;
- flag1=0;
- }
-
- void qjingji() //強(qiáng)經(jīng)濟(jì)
- {
- /*******洗滌********/
- num=0;
- num1=0;
- ledjingji=0;
- ledqiangxi=0;
- ledtuoshui=1;
- ledpiaoxi=1;
- ledxidi=1;
- jinshui=0;
- delayms(5000);
- jinshui=1;
- flag1=1; //控制定時(shí)器中的洗滌指示燈
- TR0=1;
- while(flag==0)
- {
- if(flag==0&&num2==1)
- {
- TR0=1;
- flag1=1;
- qiang();
- }
- if(flag==0&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
-
- //漂洗
- TR0=0;
- U2=1;
- U3=1;
- flag1=0;
- paishui=0;
- ledjingji=0;
- ledtuoshui=1;
- ledxidi=1;
- delayms(5000);
- paishui=1;
- delayms(100);
- jinshui=0;
- delayms(5000);
- jinshui=1;
- ledpiaoxi=0;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==1)
- {
- if(flag==1&&num2==1)
- {
- TR0=1;
- flag1=2;
- qiang();
- }
- if(flag==1&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- //脫水
- TR0=0;
- U2=1;
- U3=1;
- flag1=0;
- paishui=0; //打開(kāi)排水
- ledjingji=0;
- ledtuoshui=0;
- ledpiaoxi=1;
- delayms(5000);
- while(sgai);
- paishui=1;
- delayms(1000);
- flag1=3;
- TR0=1;
- flag=2;
- num3=0;
- num4=0;
- while(flag==2)
- {
- if(flag==2&&num2==1)
- {
- TR0=1;
- U2=0;
- U3=1;
- flag1=3;
- }
- if(flag==2&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- ledtuoshui=1;
- U2=1;
- U3=1;
- flag1=0;
- }
-
- void qdandu() //強(qiáng)單獨(dú)
- {
- num=0;
- num1=0;
- ledqiangxi=0;
- ledxidi=0;
- leddandu=0;
- jinshui=0;
- delayms(5000);
- jinshui=1;//關(guān)閉進(jìn)水閥
- flag1=1;
- TR0=1;
- while(flag==0)
- {
- if(flag==0&&num2==1)
- {
- TR0=1;
- flag1=1;
- qiang();
- }
- if(flag==0&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- flag1=0;
- U2=1;
- U3=1;
- }
-
- void rbiaozhun() //弱標(biāo)準(zhǔn)
- {
- /*******洗滌********/
- num=0;
- num1=0;
- ledbiaozhun=0;
- ledruoxi=0;
- ledtuoshui=1;
- ledpiaoxi=1;
- jinshui=0;
- delayms(5000);
- jinshui=1;
- ledxidi=0;
- flag1=1;
- TR0=1;
- while(flag==0)
- {
- if(flag==0&&num2==1)
- {
- TR0=1;
- flag1=1;
- ruo();
- }
- if(flag==0&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- //漂洗
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0;
- ledtuoshui=1;
- ledxidi=1;
- delayms(5000);
- paishui=1;
- delayms(100);
- jinshui=0;
- delayms(5000);
- jinshui=1;
- ledpiaoxi=0;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==1)
- {
- if(flag==1&&num2==1)
- {
- TR0=1;
- flag1=2;
- ruo();
- }
- if(flag==1&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- //漂洗
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0;
- ledtuoshui=1;
- ledpiaoxi=0;
- delayms(5000);
- paishui=1;
- delayms(100);
- jinshui=0;
- delayms(5000);
- jinshui=1;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==2)
- {
- if(flag==2&&num2==1)
- {
- TR0=1;
- flag1=2;
- ruo();
- }
- if(flag==2&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- }
- //脫水
- U2=1;
- U3=1;
- TR0=0;
- flag1=0;
- paishui=0;
- delayms(5000);
- ledtuoshui=0;
- ledpiaoxi=1;
- while(sgai);
- paishui=1;
- delayms(1000);
- flag1=3;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==3)
- {
- if(flag==3&&num2==1)
- {
- TR0=1;
- U2=0;
- U3=1;
- flag1=3;
- }
- if(flag==3&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- ledtuoshui=1;
- U2=1;
- U3=1;
- flag1=0;
- }
-
- void rjingji() //弱經(jīng)濟(jì)
- {
- /*******洗滌********/
- num=0;
- num1=0;
- ledjingji=0;
- ledruoxi=0;
- ledtuoshui=1;
- ledpiaoxi=1;
- ledxidi=1;
- jinshui=0;
- delayms(5000);
- jinshui=1; //打開(kāi)進(jìn)水閥,進(jìn)水
- flag1=1;
- TR0=1;
- while(flag==0)
- {
- if(flag==0&&num2==1) //弱經(jīng)濟(jì)洗
- {
- TR0=1;
- flag1=1;
- ruo();
- }
- if(flag==0&&num2==2) //弱經(jīng)濟(jì)洗暫停
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
-
- //漂洗
- TR0=0;
- U2=1;
- U3=1;
- flag1=0;
- paishui=0; //排水閥打開(kāi)
- ledjingji=0;
- ledtuoshui=1;
- ledxidi=1;
- delayms(5000);
- paishui=1; //排水閥關(guān)閉
- delayms(100);
- jinshui=0; //進(jìn)水閥打開(kāi)
- delayms(5000);
- jinshui=1; //進(jìn)水閥關(guān)閉
- ledpiaoxi=0;
- flag1=2;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==1)
- {
- if(flag==1&&num2==1)//漂洗
- {
- TR0=1;
- flag1=2;
- ruo();
- }
- if(flag==1&&num2==2)//漂洗暫停
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- //脫水
- TR0=0;
- U2=1;
- U3=1;
- flag1=0;
- ledjingji=0;
- ledtuoshui=0;
- ledpiaoxi=1;
- paishui=0; //排水閥打開(kāi)
- delayms(5000);
- while(sgai);
- paishui=1;
- delayms(3000);
- flag1=3;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==2)
- {
- if(flag==2&&num2==1)
- {
- TR0=1;
- U2=0;
- U3=1;
- flag1=3;
- }
- if(flag==2&&num2==2)
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- ledtuoshui=1;
- U2=1;
- U3=1;
- flag1=0;
- }
-
- void rdandu() //弱單獨(dú)
- {
- num=0;
- num1=0;
- ledruoxi=0;
- ledxidi=0;
- leddandu=0;
- jinshui=0; //打開(kāi)進(jìn)水閥,進(jìn)水
- delayms(5000);
- jinshui=1;
- flag1=1;
- TR0=1; //啟動(dòng)定時(shí)器T0
- while(flag==0)
- {
- if(flag==0&&num2==1) //弱單獨(dú)洗
- {
- TR0=1;
- flag1=1;
- ruo();
- }
- if(flag==0&&num2==2)//弱單獨(dú)洗暫停
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- flag1=0;
- U2=1;
- U3=1;
- }
-
- void dpaishui() //排水/脫水
- {
- num=0;
- num1=0;
- ledpaishui=0;
- ledtuoshui=0;
- jinshui=1;
- paishui=0;
- delayms(3000);
- while(sgai);
- delayms(3000);
- flag1=3;
- TR0=1;
- num3=0;
- num4=0;
- while(flag==0)
- {
- if(flag==0&&num2==1) //脫水
- {
- TR0=1;
- flag1=3;
- U2=0;
- U3=1;
- }
- if(flag==0&&num2==2)//暫停脫水
- {
- TR0=0;
- U2=1;
- U3=1;
- }
- };
- U2=1;
- U3=1;
- flag1=0;
- ledtuoshui=1;
- paishui=1; ////排水閥關(guān)閉
- }
-
- void main()
- {
- init();
- while(1)
- {
- key(); //鍵掃描
- if((num1==0&&num==0)&&circle==1) //標(biāo)準(zhǔn) 強(qiáng)洗
- {
- ledruoxi=1; //關(guān)閉弱洗LED
- ledpaishui=1; //關(guān)閉排水LED
- ledbiaozhun=0;//強(qiáng)標(biāo)準(zhǔn)LED亮
- ledqiangxi=0; //強(qiáng)洗LED亮
- if(num2==1)
- {
- qbiaozhun(); //強(qiáng)標(biāo)準(zhǔn)洗
- }
- if(num2>1) //K3鍵按下次數(shù)為2,暫停洗滌
- {
- ;
- }
- circle=0;
- }
- if(num1==0&&num==1) //經(jīng)濟(jì) 強(qiáng)洗
- {
- ledruoxi=1;
- ledbiaozhun=1;
- ledqiangxi=0;
- ledjingji=0;
- if(num2==1)
- {
- qjingji(); //強(qiáng)經(jīng)濟(jì)洗
- ledjingji=1;
- }
- circle=0;
- }
- if(num1==0&&num==2) //單獨(dú) 強(qiáng)洗
- {
- ledruoxi=1;
- ledjingji=1;
- ledqiangxi=0;
- leddandu=0;
- if(num2==1)
- {
- qdandu(); //強(qiáng)單獨(dú)洗
- leddandu=1;
- }
- circle=0;
- }
- if(num1==0&&num==3)
- {
- ledruoxi=1; //排水 強(qiáng)洗
- leddandu=1;
- ledqiangxi=0;
- ledpaishui=0;
- if(num2==1)
- {
- dpaishui(); //單排水
- ledpaishui=1;
- }
- circle=0;
- }
- if(num1==1&&num==0) //弱 標(biāo)準(zhǔn)
- {
- ledqiangxi=1;
- ledpaishui=1;
- ledruoxi=0;
- ledbiaozhun=0;
- if(num2==1)
- {
- rbiaozhun(); //弱標(biāo)準(zhǔn)洗
- ledruoxi=1;
- }
- circle=0;
- }
- if(num1==1&&num==1) //弱經(jīng)濟(jì)
- {
- ledqiangxi=1;
- ledbiaozhun=1;
- ledruoxi=0;
- ledjingji=0;
- if(num2==1)
- {
- rjingji(); //弱經(jīng)濟(jì)洗
- ledruoxi=1;
- ledjingji=1;
- }
- circle=0;
- }
- if(num1==1&&num==2)
- {
- ledqiangxi=1;
- ledjingji=1;
- ledruoxi=0;
- leddandu=0;
- if(num2==1)
- {
- rdandu(); //弱單獨(dú)洗
- ledruoxi=1;
- leddandu=1;
- }
- circle=0;
- }
- if(num1==1&&num==3)
- {
- ledqiangxi=1;
- leddandu=1;
- ledruoxi=0;
- ledpaishui=0;
- if(num2==1) //K3鍵
- {
- dpaishui(); //單排水
- ledpaishui=1;
- }
- circle=0;
- }
- num2=0;
- }
- }
-
- void T0_time() interrupt 1 //定時(shí)
- {
- TH0=(65536-50000)/256; //重賦初值
- TL0=(65536-50000)%256;
- num3++; //定時(shí)計(jì)數(shù)加1
- if(num3==20) //1秒時(shí)間到
- {
- num3=0; //計(jì)數(shù)清0
- if(flag1==1)
- ledxidi=~ledxidi; //洗滌指示取反
- if(flag1==2)
- ledpiaoxi=~ledpiaoxi; //漂洗指示取反
- if(flag1==3)
- ledtuoshui=~ledtuoshui; //脫水指示取反
- num4++;
- num5++;
- num6++;
- if(num4==15) //洗滌定時(shí),15秒到
- {
- num4=0; //清0
- flag++; //標(biāo)志洗滌次數(shù)
- }
- if(num5==5) //強(qiáng)洗周期,5秒到
- {
- num5=0;
- flag4++; //強(qiáng)洗標(biāo)志加1
- if(flag4==2)
- flag4=0;
- }
- if(num6==3) //弱洗周期 ,3秒到
- {
- num6=0;
- flag5++; //弱洗標(biāo)志加1
- if(flag5==2)
- flag5=0;
- }
- }
- }
-
- void int0() interrupt 0 //外部中斷0 ,K3鍵
- {
- num2++; //K3按下計(jì)數(shù)加1 ,num2為1運(yùn)行,num2為2暫停
- ……………………
- …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
資料.7z
(578.78 KB, 下載次數(shù): 773)
2022-3-16 00:13 上傳
點(diǎn)擊文件名下載附件
洗衣機(jī)仿真原理 下載積分: 黑幣 -5
|