找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 27211|回復(fù): 19
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)全自動(dòng)洗衣機(jī)程序+仿真+原理圖設(shè)計(jì)調(diào)試與分析

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主


學(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)速慢。
  • 整機(jī)功能要求
  • 開(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)行。
  • 方案設(shè)計(jì)與論證
全自動(dòng)洗衣機(jī)的實(shí)現(xiàn)方案組成框圖如圖一所示。它主要有電源、單片機(jī)最小系統(tǒng)、開(kāi)關(guān)檢測(cè)電路、控制按鍵輸入電路和LED指示電路、繼電器和電動(dòng)機(jī)電路。
  • 硬件電路設(shè)計(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)電路原理圖如圖二所示。
  • 電源模塊電路設(shè)計(jì)
電動(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ì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)流程圖

主程序流程圖如圖三所示。
  • 程序
程序附在最后

圖三

  • 調(diào)試與分析

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)定性。

  • 總結(jié)

這次單片機(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ī)源程序如下:


  1.         #include<reg52.h>
  2.         #define uchar unsigned char
  3.         #define uint unsigned int
  4.         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;
  5.         sbit ledbiaozhun=P1^0; //LED指示燈
  6.         sbit ledjingji  =P1^1;
  7.         sbit leddandu   =P1^2;
  8.         sbit ledpaishui =P1^3;
  9.         sbit ledqiangxi =P1^4;
  10.         sbit ledruoxi   =P1^5;
  11.         sbit ledxidi    =P1^6;
  12.         sbit ledpiaoxi  =P1^7;
  13.         sbit ledtuoshui =P2^0;
  14.         
  15.         sbit sshuiwei   =P3^6; //水位開(kāi)關(guān)
  16.         sbit sgai       =P3^7; //蓋開(kāi)關(guān)
  17.         sbit paishui=P2^3; //排水閥控制
  18.         sbit jinshui=P2^2; //進(jìn)水閥控制
  19.         
  20.         sbit U2=P2^4;
  21.         sbit U3=P2^5;
  22.         sbit k1=P3^0;  // 步進(jìn)改變"標(biāo)準(zhǔn)、經(jīng)濟(jì)、單獨(dú)、排水"四種方式
  23.         sbit k2=P3^1;  //強(qiáng)洗、弱洗
  24.         sbit k3=P3^2;  //運(yùn)行、暫停和解除報(bào)替功能
  25.         void init()
  26.         {
  27.                 uchar a=0,b=0,c=0;
  28.                 TMOD=0x01;                       //T0工作于方式1
  29.                 TH0=(65536-50000)/256; //定時(shí)時(shí)間50ms
  30.                 TL0=(65536-50000)%256;
  31.                 EA=1;                                   //開(kāi)總中斷
  32.                 ET0=1;                                   //開(kāi)T0中斷
  33.                 TR0=0;                                   //關(guān)閉T0
  34.                 EX0=1;                                   //開(kāi)外部中斷0
  35.                 IT0=1;                                   //外部中斷0邊沿觸發(fā)方式
  36.                 U2=1;                                   //電機(jī)停轉(zhuǎn)
  37.                 U3=1;
  38.                 P0=0xff;
  39.         }
  40.         void delayms(uint xms) //延時(shí)
  41.         {
  42.                 uint i,j;
  43.                 for(i=xms;i>0;i--)
  44.                         for(j=110;j>0;j--);
  45.         }
  46.         
  47.         void key()                //控制按鍵
  48.         {
  49.                 circle=1;
  50.                 if(k1==0)                //標(biāo)準(zhǔn)、經(jīng)濟(jì)、單獨(dú)、排水按下
  51.                 {
  52.                         delayms(10); //延時(shí)消抖
  53.                         if(k1==0)         //再判
  54.                         {
  55.                                 num++;         //K1按下次數(shù)加1
  56.                                 if(num==4)
  57.                                         num=0;        //等于4,按下次數(shù)清0
  58.                                 while(!k1);        //等待按鍵釋放
  59.                         }
  60.                 }
  61.                
  62.                 if(k2==0)                                //強(qiáng)弱選擇
  63.                 {
  64.                         delayms(10);   //延時(shí)消抖
  65.                         if(k2==0)           //再判
  66.                         {
  67.                                 num1++;         //按下次數(shù)加1
  68.                                 if(num1==2)
  69.                                         num1=0;        //等于2,按下次數(shù)清0
  70.                                 while(!k2);        //等待按鍵釋放
  71.                         }
  72.                 }
  73.         }
  74.         
  75.         void qiang()                          //強(qiáng)
  76.         {
  77.                 if(flag4==0)  //電機(jī)正轉(zhuǎn)
  78.                 {        
  79.                         U2=0;
  80.                         U3=1;
  81.                 }
  82.         
  83.                 if(flag4==1)  //電機(jī)反轉(zhuǎn)
  84.                 {
  85.                         U2=1;
  86.                         U3=0;
  87.                 }        
  88.         }
  89.         void ruo()                        //弱
  90.         {
  91.                 if(flag5==0) //電機(jī)正轉(zhuǎn)
  92.                 {        
  93.                         U2=0;
  94.                         U3=1;
  95.                 }
  96.         
  97.                 if(flag5==1) //電機(jī)反轉(zhuǎn)
  98.                 {
  99.                         U2=1;
  100.                         U3=0;
  101.                 }
  102.         }
  103.         
  104.         void qbiaozhun()                        //強(qiáng)標(biāo)準(zhǔn)
  105.         {
  106.                 /*******洗滌********/
  107.                         num=0;
  108.                         num1=0;
  109.                         ledbiaozhun=0;//標(biāo)準(zhǔn)洗LED亮
  110.                         ledqiangxi=0; //強(qiáng)洗LED亮
  111.                         jinshui=0;          //打開(kāi)進(jìn)水閥
  112.                         ledxidi=1;    //洗滌
  113.                         ledpiaoxi=1;  //漂洗LED亮
  114.                         ledtuoshui=1; //脫水LED亮
  115.                         delayms(5000);//水位監(jiān)測(cè)
  116.                         jinshui=1; //關(guān)閉進(jìn)水閥
  117.                         ledxidi=0;
  118.                         flag1=1;        //        
  119.                         TR0=1;            //啟動(dòng)定時(shí)器T0
  120.                         while(flag==0)//flag為洗滌次數(shù)標(biāo)志位
  121.                         {         
  122.                                 if(flag==0&&num2==1)
  123.                                 {         
  124.                                         TR0=1;
  125.                                         flag1=1; //
  126.                                         qiang();
  127.                                 }
  128.                                 if(flag==0&&num2==2)
  129.                                 {
  130.                                         TR0=0; //關(guān)閉定時(shí)器T0
  131.                                         U2=1;  //電機(jī)停止
  132.                                         U3=1;
  133.                                 }
  134.                         };
  135.                         //漂洗
  136.                         U2=1;
  137.                         U3=1;                                       
  138.                         TR0=0;
  139.                         flag1=0;
  140.                         paishui=0; //排水
  141.                         ledtuoshui=1;
  142.                         ledpiaoxi=1;
  143.                         ledxidi=1;
  144.                         delayms(5000);
  145.                         paishui=1;        //關(guān)閉排水
  146.                         delayms(100);
  147.                         jinshui=0;        //打開(kāi)進(jìn)水
  148.                         delayms(5000);
  149.                         jinshui=1;         //關(guān)閉進(jìn)水
  150.                         ledpiaoxi=0;
  151.                         flag1=2;
  152.                         TR0=1;
  153.                         num3=0;
  154.                         num4=0;
  155.                         while(flag==1)
  156.                         {
  157.                                 if(flag==1&&num2==1)//強(qiáng)漂洗
  158.                                 {         
  159.                                         TR0=1;
  160.                                         flag1=2;
  161.                                         qiang();
  162.                                 }
  163.                                 if(flag==1&&num2==2)//暫停強(qiáng)漂洗
  164.                                 {
  165.                                         TR0=0;
  166.                                         U2=1;
  167.                                         U3=1;
  168.                                 }
  169.                         };
  170.                         //漂洗
  171.                         U2=1;
  172.                         U3=1;
  173.                         TR0=0;
  174.                         flag1=0;
  175.                         paishui=0;
  176.                         ledtuoshui=1;
  177.                         ledpiaoxi=0;
  178.                         delayms(5000);
  179.                         paishui=1;
  180.                         delayms(100);
  181.                         jinshui=0;
  182.                         delayms(5000);
  183.                         jinshui=1;
  184.                         flag1=2;
  185.                         TR0=1;
  186.                         num3=0;
  187.                         num4=0;
  188.                         
  189.                         while(flag==2)
  190.                         {
  191.                                  if(flag==2&&num2==1)
  192.                                 {         
  193.                                         TR0=1;
  194.                                         flag1=2;
  195.                                         qiang();
  196.                                 }
  197.                                 if(flag==2&&num2==2)
  198.                                 {
  199.                                         TR0=0;
  200.                                         U2=1;
  201.                                         U3=1;
  202.                                 }
  203.                          }        ;
  204.                         //脫水
  205.                         U2=1;
  206.                         U3=1;
  207.                         TR0=0;
  208.                         flag1=0;
  209.                         paishui=0;//打開(kāi)排水
  210.                         ledtuoshui=0;
  211.                         ledpiaoxi=1;
  212.                         while(sgai);
  213.                         paishui=1;
  214.                         delayms(1000);
  215.                         flag1=3;
  216.                         TR0=1;
  217.                         num3=0;
  218.                         num4=0;
  219.                         while(flag==3)
  220.                         {
  221.                                 if(flag==3&&num2==1)
  222.                                 {
  223.                                         TR0=1;
  224.                                         U2=0;
  225.                                         U3=1;
  226.                                         flag1=3;
  227.                                 }
  228.                                 if(flag==3&&num2==2)
  229.                                 {
  230.                                         TR0=0;
  231.                                         U2=1;
  232.                                         U3=1;
  233.                                 }
  234.                         };
  235.                         ledtuoshui=1;
  236.                         U2=1;
  237.                         U3=1;
  238.                         flag1=0;                        
  239.         }
  240.         
  241.         void qjingji()                        //強(qiáng)經(jīng)濟(jì)
  242.         {
  243.                 /*******洗滌********/
  244.                         num=0;
  245.                         num1=0;
  246.                         ledjingji=0;
  247.                         ledqiangxi=0;
  248.                         ledtuoshui=1;
  249.                         ledpiaoxi=1;
  250.                         ledxidi=1;
  251.                         jinshui=0;
  252.                         delayms(5000);
  253.                         jinshui=1;
  254.                         flag1=1; //控制定時(shí)器中的洗滌指示燈
  255.                         TR0=1;
  256.                         while(flag==0)
  257.                         {         
  258.                                 if(flag==0&&num2==1)
  259.                                 {         
  260.                                         TR0=1;
  261.                                         flag1=1;
  262.                                         qiang();
  263.                                 }
  264.                                 if(flag==0&&num2==2)
  265.                                 {
  266.                                         TR0=0;
  267.                                         U2=1;
  268.                                         U3=1;
  269.                                 }
  270.                         };
  271.                         
  272.                         //漂洗                                       
  273.                         TR0=0;
  274.                         U2=1;
  275.                         U3=1;
  276.                         flag1=0;
  277.                         paishui=0;
  278.                         ledjingji=0;
  279.                         ledtuoshui=1;
  280.                         ledxidi=1;
  281.                         delayms(5000);
  282.                         paishui=1;
  283.                         delayms(100);
  284.                         jinshui=0;
  285.                         delayms(5000);
  286.                         jinshui=1;
  287.                         ledpiaoxi=0;
  288.                         flag1=2;
  289.                         TR0=1;
  290.                         num3=0;
  291.                         num4=0;
  292.                         while(flag==1)
  293.                         {
  294.                                 if(flag==1&&num2==1)
  295.                                 {         
  296.                                         TR0=1;
  297.                                         flag1=2;
  298.                                         qiang();
  299.                                 }
  300.                                 if(flag==1&&num2==2)
  301.                                 {
  302.                                         TR0=0;
  303.                                         U2=1;
  304.                                         U3=1;
  305.                                 }
  306.                         };
  307.                         //脫水
  308.                         TR0=0;
  309.                         U2=1;
  310.                         U3=1;        
  311.                         flag1=0;
  312.                         paishui=0;         //打開(kāi)排水
  313.                         ledjingji=0;
  314.                         ledtuoshui=0;
  315.                         ledpiaoxi=1;
  316.                         delayms(5000);
  317.                         while(sgai);
  318.                         paishui=1;
  319.                         delayms(1000);
  320.                         flag1=3;
  321.                         TR0=1;
  322.                         flag=2;
  323.                         num3=0;
  324.                         num4=0;
  325.                         while(flag==2)
  326.                         {
  327.                                 if(flag==2&&num2==1)
  328.                                 {
  329.                                         TR0=1;
  330.                                         U2=0;
  331.                                         U3=1;
  332.                                         flag1=3;
  333.                                 }
  334.                                 if(flag==2&&num2==2)
  335.                                 {
  336.                                         TR0=0;
  337.                                         U2=1;
  338.                                         U3=1;
  339.                                 }
  340.                         };
  341.                         ledtuoshui=1;
  342.                         U2=1;
  343.                         U3=1;
  344.                         flag1=0;
  345.         }
  346.         
  347.         void qdandu()               //強(qiáng)單獨(dú)
  348.         {
  349.                 num=0;
  350.                 num1=0;
  351.                 ledqiangxi=0;
  352.                 ledxidi=0;
  353.                 leddandu=0;
  354.                 jinshui=0;
  355.                 delayms(5000);
  356.                 jinshui=1;//關(guān)閉進(jìn)水閥
  357.                 flag1=1;
  358.                 TR0=1;
  359.                 while(flag==0)
  360.                 {
  361.                         if(flag==0&&num2==1)
  362.                                 {         
  363.                                         TR0=1;
  364.                                         flag1=1;
  365.                                         qiang();
  366.                                 }
  367.                                 if(flag==0&&num2==2)
  368.                                 {
  369.                                         TR0=0;
  370.                                         U2=1;
  371.                                         U3=1;
  372.                                 }
  373.                 };
  374.                 flag1=0;
  375.                 U2=1;
  376.                 U3=1;
  377.         }
  378.         
  379.         void rbiaozhun()                        //弱標(biāo)準(zhǔn)
  380.         {
  381.                 /*******洗滌********/
  382.                         num=0;
  383.                         num1=0;
  384.                         ledbiaozhun=0;
  385.                         ledruoxi=0;
  386.                         ledtuoshui=1;
  387.                         ledpiaoxi=1;        
  388.                         jinshui=0;
  389.                         delayms(5000);
  390.                         jinshui=1;
  391.                         ledxidi=0;
  392.                         flag1=1;               
  393.                         TR0=1;        
  394.                         while(flag==0)
  395.                         {         
  396.                                 if(flag==0&&num2==1)
  397.                                 {         
  398.                                         TR0=1;
  399.                                         flag1=1;
  400.                                         ruo();
  401.                                 }
  402.                                 if(flag==0&&num2==2)
  403.                                 {
  404.                                         TR0=0;
  405.                                         U2=1;
  406.                                         U3=1;
  407.                                 }
  408.                         };
  409.                         //漂洗
  410.                         U2=1;
  411.                         U3=1;                                       
  412.                         TR0=0;
  413.                         flag1=0;
  414.                         paishui=0;
  415.                         ledtuoshui=1;
  416.                         ledxidi=1;
  417.                         delayms(5000);
  418.                         paishui=1;
  419.                         delayms(100);
  420.                         jinshui=0;
  421.                         delayms(5000);
  422.                         jinshui=1;
  423.                         ledpiaoxi=0;
  424.                         flag1=2;
  425.                         TR0=1;
  426.                         num3=0;
  427.                         num4=0;
  428.                         while(flag==1)
  429.                         {
  430.                                 if(flag==1&&num2==1)
  431.                                 {         
  432.                                         TR0=1;
  433.                                         flag1=2;
  434.                                         ruo();
  435.                                 }
  436.                                 if(flag==1&&num2==2)
  437.                                 {
  438.                                         TR0=0;
  439.                                         U2=1;
  440.                                         U3=1;
  441.                                 }
  442.                         };
  443.                         //漂洗
  444.                         U2=1;
  445.                         U3=1;
  446.                         TR0=0;
  447.                         flag1=0;
  448.                         paishui=0;
  449.                         ledtuoshui=1;
  450.                         ledpiaoxi=0;
  451.                         delayms(5000);
  452.                         paishui=1;
  453.                         delayms(100);
  454.                         jinshui=0;
  455.                         delayms(5000);
  456.                         jinshui=1;
  457.                         flag1=2;
  458.                         TR0=1;
  459.                         num3=0;
  460.                         num4=0;         
  461.                         while(flag==2)
  462.                         {
  463.                                  if(flag==2&&num2==1)
  464.                                 {         
  465.                                         TR0=1;
  466.                                         flag1=2;
  467.                                         ruo();
  468.                                 }
  469.                                 if(flag==2&&num2==2)
  470.                                 {
  471.                                         TR0=0;
  472.                                         U2=1;
  473.                                         U3=1;
  474.                                 }
  475.                          }
  476.                         //脫水
  477.                         U2=1;
  478.                         U3=1;
  479.                         TR0=0;
  480.                         flag1=0;
  481.                         paishui=0;
  482.                         delayms(5000);
  483.                         ledtuoshui=0;
  484.                         ledpiaoxi=1;
  485.                         while(sgai);
  486.                         paishui=1;
  487.                         delayms(1000);
  488.                         flag1=3;
  489.                         TR0=1;
  490.                         num3=0;
  491.                         num4=0;
  492.                         while(flag==3)
  493.                         {
  494.                                 if(flag==3&&num2==1)
  495.                                 {
  496.                                         TR0=1;
  497.                                         U2=0;
  498.                                         U3=1;
  499.                                         flag1=3;
  500.                                 }
  501.                                 if(flag==3&&num2==2)
  502.                                 {
  503.                                         TR0=0;
  504.                                         U2=1;
  505.                                         U3=1;
  506.                                 }
  507.                         };
  508.                         ledtuoshui=1;
  509.                         U2=1;
  510.                         U3=1;
  511.                         flag1=0;
  512.         }
  513.         
  514.         void rjingji()                        //弱經(jīng)濟(jì)
  515.         {
  516.                 /*******洗滌********/
  517.                         num=0;
  518.                         num1=0;
  519.                         ledjingji=0;
  520.                         ledruoxi=0;
  521.                         ledtuoshui=1;
  522.                         ledpiaoxi=1;
  523.                         ledxidi=1;
  524.                         jinshui=0;
  525.                         delayms(5000);
  526.                         jinshui=1;         //打開(kāi)進(jìn)水閥,進(jìn)水
  527.                         flag1=1;
  528.                         TR0=1;
  529.                         while(flag==0)
  530.                         {         
  531.                                 if(flag==0&&num2==1) //弱經(jīng)濟(jì)洗
  532.                                 {         
  533.                                         TR0=1;
  534.                                         flag1=1;
  535.                                         ruo();
  536.                                 }
  537.                                 if(flag==0&&num2==2) //弱經(jīng)濟(jì)洗暫停
  538.                                 {
  539.                                         TR0=0;
  540.                                         U2=1;
  541.                                         U3=1;
  542.                                 }
  543.                         };
  544.                         
  545.                         //漂洗                                       
  546.                         TR0=0;
  547.                         U2=1;
  548.                         U3=1;
  549.                         flag1=0;
  550.                         paishui=0;        //排水閥打開(kāi)
  551.                         ledjingji=0;
  552.                         ledtuoshui=1;
  553.                         ledxidi=1;
  554.                         delayms(5000);
  555.                         paishui=1; //排水閥關(guān)閉
  556.                         delayms(100);
  557.                         jinshui=0; //進(jìn)水閥打開(kāi)
  558.                         delayms(5000);
  559.                         jinshui=1; //進(jìn)水閥關(guān)閉
  560.                         ledpiaoxi=0;
  561.                         flag1=2;
  562.                         TR0=1;
  563.                         num3=0;
  564.                         num4=0;
  565.                         while(flag==1)
  566.                         {
  567.                                 if(flag==1&&num2==1)//漂洗
  568.                                 {         
  569.                                         TR0=1;
  570.                                         flag1=2;
  571.                                         ruo();
  572.                                 }
  573.                                 if(flag==1&&num2==2)//漂洗暫停
  574.                                 {
  575.                                         TR0=0;
  576.                                         U2=1;
  577.                                         U3=1;
  578.                                 }
  579.                         };
  580.                         //脫水
  581.                         TR0=0;
  582.                         U2=1;
  583.                         U3=1;
  584.                         flag1=0;
  585.                         ledjingji=0;
  586.                         ledtuoshui=0;
  587.                         ledpiaoxi=1;
  588.                         paishui=0;         //排水閥打開(kāi)
  589.                         delayms(5000);
  590.                         while(sgai);
  591.                         paishui=1;
  592.                         delayms(3000);
  593.                         flag1=3;
  594.                         TR0=1;
  595.                         num3=0;
  596.                         num4=0;
  597.                         while(flag==2)
  598.                         {
  599.                                 if(flag==2&&num2==1)
  600.                                 {
  601.                                         TR0=1;
  602.                                         U2=0;
  603.                                         U3=1;
  604.                                         flag1=3;
  605.                                 }
  606.                                 if(flag==2&&num2==2)
  607.                                 {
  608.                                         TR0=0;
  609.                                         U2=1;
  610.                                         U3=1;
  611.                                 }
  612.                         };
  613.                         ledtuoshui=1;
  614.                         U2=1;
  615.                         U3=1;
  616.                         flag1=0;
  617.         }
  618.         
  619.         void rdandu()               //弱單獨(dú)
  620.         {
  621.                 num=0;
  622.                 num1=0;
  623.                 ledruoxi=0;
  624.                 ledxidi=0;
  625.                 leddandu=0;
  626.                 jinshui=0;  //打開(kāi)進(jìn)水閥,進(jìn)水
  627.                 delayms(5000);
  628.                 jinshui=1;
  629.                 flag1=1;
  630.                 TR0=1;            //啟動(dòng)定時(shí)器T0
  631.                 while(flag==0)
  632.                 {
  633.                         if(flag==0&&num2==1)  //弱單獨(dú)洗
  634.                                 {         
  635.                                         TR0=1;
  636.                                         flag1=1;
  637.                                         ruo();               
  638.                                 }
  639.                                 if(flag==0&&num2==2)//弱單獨(dú)洗暫停
  640.                                 {
  641.                                         TR0=0;
  642.                                         U2=1;
  643.                                         U3=1;
  644.                                 }
  645.                 };
  646.                 flag1=0;
  647.                 U2=1;
  648.                 U3=1;
  649.         }
  650.         
  651.         void dpaishui()                                 //排水/脫水
  652.         {
  653.                 num=0;
  654.                 num1=0;
  655.                 ledpaishui=0;
  656.                 ledtuoshui=0;
  657.                 jinshui=1;
  658.                 paishui=0;
  659.                 delayms(3000);
  660.                 while(sgai);
  661.                 delayms(3000);
  662.                 flag1=3;
  663.                 TR0=1;
  664.                 num3=0;
  665.                 num4=0;
  666.                 while(flag==0)
  667.                 {
  668.                         if(flag==0&&num2==1) //脫水
  669.                                 {         
  670.                                         TR0=1;
  671.                                         flag1=3;
  672.                                         U2=0;
  673.                                         U3=1;
  674.                                 }
  675.                                 if(flag==0&&num2==2)//暫停脫水
  676.                                 {
  677.                                         TR0=0;
  678.                                         U2=1;
  679.                                         U3=1;
  680.                                 }
  681.                 };
  682.                 U2=1;
  683.                 U3=1;
  684.                 flag1=0;
  685.                 ledtuoshui=1;
  686.                 paishui=1; ////排水閥關(guān)閉
  687.         }                          
  688.         
  689.         void main()
  690.         {
  691.                 init();
  692.                 while(1)
  693.                 {
  694.                         key();                   //鍵掃描
  695.                         if((num1==0&&num==0)&&circle==1)        //標(biāo)準(zhǔn) 強(qiáng)洗
  696.                         {
  697.                                 ledruoxi=1;   //關(guān)閉弱洗LED
  698.                                 ledpaishui=1; //關(guān)閉排水LED
  699.                                 ledbiaozhun=0;//強(qiáng)標(biāo)準(zhǔn)LED亮        
  700.                                 ledqiangxi=0; //強(qiáng)洗LED亮
  701.                                 if(num2==1)
  702.                                 {
  703.                                         qbiaozhun(); //強(qiáng)標(biāo)準(zhǔn)洗
  704.                                 }
  705.                                 if(num2>1)                 //K3鍵按下次數(shù)為2,暫停洗滌
  706.                                 {
  707.                                         ;           
  708.                                 }
  709.                                 circle=0;
  710.                         }
  711.                         if(num1==0&&num==1)         //經(jīng)濟(jì) 強(qiáng)洗
  712.                         {
  713.                                 ledruoxi=1;           
  714.                                 ledbiaozhun=1;
  715.                                 ledqiangxi=0;
  716.                                 ledjingji=0;
  717.                                 if(num2==1)
  718.                                 {
  719.                                         qjingji();        //強(qiáng)經(jīng)濟(jì)洗
  720.                                         ledjingji=1;
  721.                                 }
  722.                                 circle=0;
  723.                         }
  724.                         if(num1==0&&num==2)         //單獨(dú) 強(qiáng)洗
  725.                         {
  726.                                 ledruoxi=1;
  727.                                 ledjingji=1;
  728.                                 ledqiangxi=0;
  729.                                 leddandu=0;
  730.                                 if(num2==1)
  731.                                 {
  732.                                         qdandu(); //強(qiáng)單獨(dú)洗
  733.                                         leddandu=1;
  734.                                 }
  735.                                 circle=0;
  736.                         }
  737.                         if(num1==0&&num==3)
  738.                         {
  739.                                 ledruoxi=1;          //排水 強(qiáng)洗
  740.                                 leddandu=1;
  741.                                 ledqiangxi=0;
  742.                                 ledpaishui=0;
  743.                                 if(num2==1)
  744.                                 {
  745.                                         dpaishui();        //單排水
  746.                                         ledpaishui=1;
  747.                                 }
  748.                                 circle=0;
  749.                         }
  750.                         if(num1==1&&num==0)          //弱 標(biāo)準(zhǔn)
  751.                         {
  752.                                 ledqiangxi=1;
  753.                                 ledpaishui=1;
  754.                                 ledruoxi=0;
  755.                                 ledbiaozhun=0;
  756.                                 if(num2==1)
  757.                                 {
  758.                                         rbiaozhun(); //弱標(biāo)準(zhǔn)洗
  759.                                         ledruoxi=1;
  760.                                 }
  761.                                 circle=0;
  762.                         }
  763.                         if(num1==1&&num==1)         //弱經(jīng)濟(jì)
  764.                         {
  765.                                 ledqiangxi=1;
  766.                                 ledbiaozhun=1;
  767.                                 ledruoxi=0;
  768.                                 ledjingji=0;
  769.                                 if(num2==1)
  770.                                 {
  771.                                         rjingji();        //弱經(jīng)濟(jì)洗
  772.                                         ledruoxi=1;
  773.                                         ledjingji=1;
  774.                                 }
  775.                                 circle=0;
  776.                         }
  777.                         if(num1==1&&num==2)
  778.                         {
  779.                                 ledqiangxi=1;
  780.                                 ledjingji=1;
  781.                                 ledruoxi=0;
  782.                                 leddandu=0;
  783.                                 if(num2==1)
  784.                                 {
  785.                                         rdandu();        //弱單獨(dú)洗
  786.                                         ledruoxi=1;
  787.                                         leddandu=1;
  788.                                 }
  789.                                 circle=0;
  790.                         }
  791.                         if(num1==1&&num==3)
  792.                         {
  793.                                 ledqiangxi=1;
  794.                                 leddandu=1;
  795.                                 ledruoxi=0;
  796.                                 ledpaishui=0;
  797.                                 if(num2==1)        //K3鍵
  798.                                 {
  799.                                         dpaishui();         //單排水
  800.                                         ledpaishui=1;
  801.                                 }
  802.                                 circle=0;
  803.                         }
  804.                         num2=0;
  805.                 }
  806.         }
  807.         
  808.         void T0_time() interrupt 1           //定時(shí)
  809.         {
  810.                 TH0=(65536-50000)/256;        //重賦初值
  811.                 TL0=(65536-50000)%256;
  812.                 num3++;                                    //定時(shí)計(jì)數(shù)加1
  813.                 if(num3==20)        //1秒時(shí)間到
  814.                 {
  815.                         num3=0;                //計(jì)數(shù)清0
  816.                         if(flag1==1)
  817.                                 ledxidi=~ledxidi;  //洗滌指示取反
  818.                         if(flag1==2)
  819.                                 ledpiaoxi=~ledpiaoxi; //漂洗指示取反
  820.                         if(flag1==3)
  821.                                 ledtuoshui=~ledtuoshui;        //脫水指示取反
  822.                         num4++;
  823.                         num5++;
  824.                         num6++;
  825.                         if(num4==15)         //洗滌定時(shí),15秒到
  826.                         {
  827.                                 num4=0;                         //清0
  828.                                 flag++;                 //標(biāo)志洗滌次數(shù)
  829.                         }
  830.                         if(num5==5)                         //強(qiáng)洗周期,5秒到
  831.                         {
  832.                                 num5=0;
  833.                                 flag4++;         //強(qiáng)洗標(biāo)志加1
  834.                                 if(flag4==2)
  835.                                         flag4=0;
  836.                         }
  837.                         if(num6==3)                        //弱洗周期        ,3秒到
  838.                         {
  839.                                 num6=0;
  840.                                 flag5++;            //弱洗標(biāo)志加1
  841.                                 if(flag5==2)
  842.                                         flag5=0;
  843.                         }
  844.                 }
  845.         }
  846.         
  847.         void int0() interrupt 0           //外部中斷0 ,K3鍵
  848.         {
  849.                 num2++;          //K3按下計(jì)數(shù)加1 ,num2為1運(yùn)行,num2為2暫停

  850. ……………………

  851. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:

資料.7z (578.78 KB, 下載次數(shù): 773)




評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏23 分享淘帖 頂4 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1 發(fā)表于 2018-12-4 03:33 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

板凳
ID:549337 發(fā)表于 2019-5-28 15:45 | 只看該作者
挺不錯(cuò)的很實(shí)用
回復(fù)

使用道具 舉報(bào)

地板
ID:647522 發(fā)表于 2019-11-22 22:15 | 只看該作者
很詳細(xì) 太好用了
回復(fù)

使用道具 舉報(bào)

5#
ID:656473 發(fā)表于 2019-12-5 09:46 | 只看該作者
太好用了!
回復(fù)

使用道具 舉報(bào)

6#
ID:656544 發(fā)表于 2019-12-5 10:30 | 只看該作者
很詳細(xì) 太好用了
回復(fù)

使用道具 舉報(bào)

7#
ID:566697 發(fā)表于 2020-2-19 20:40 | 只看該作者
非常感謝
回復(fù)

使用道具 舉報(bào)

8#
ID:711753 發(fā)表于 2020-3-19 17:45 | 只看該作者
參考看看,看看
回復(fù)

使用道具 舉報(bào)

9#
ID:733317 發(fā)表于 2020-5-25 17:23 來(lái)自手機(jī) | 只看該作者
代碼是用keil軟件寫(xiě)的嗎?
回復(fù)

使用道具 舉報(bào)

10#
ID:927585 發(fā)表于 2021-5-26 14:49 | 只看該作者
很詳細(xì),文檔參考看看
回復(fù)

使用道具 舉報(bào)

11#
ID:974748 發(fā)表于 2021-10-28 08:41 | 只看該作者
不錯(cuò),很有用
回復(fù)

使用道具 舉報(bào)

12#
ID:1012580 發(fā)表于 2022-3-28 09:40 | 只看該作者
好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

13#
ID:495817 發(fā)表于 2023-5-31 22:39 | 只看該作者
學(xué)與致用,很實(shí)用教程
回復(fù)

使用道具 舉報(bào)

14#
ID:67838 發(fā)表于 2023-8-31 01:19 | 只看該作者

好資料,51黑有你更精彩!!!
回復(fù)

使用道具 舉報(bào)

15#
ID:689425 發(fā)表于 2023-8-31 19:54 | 只看該作者
太詳細(xì)了,好資料,樓主辛苦
回復(fù)

使用道具 舉報(bào)

16#
ID:1081482 發(fā)表于 2023-9-8 21:21 | 只看該作者
看起來(lái)不錯(cuò)
回復(fù)

使用道具 舉報(bào)

17#
ID:1076950 發(fā)表于 2023-9-13 09:58 | 只看該作者
樓主可以參考一下你的實(shí)物圖嗎,真的很需要,非常感謝。
回復(fù)

使用道具 舉報(bào)

18#
ID:1093404 發(fā)表于 2023-9-13 10:39 | 只看該作者
很有用,參考看看
回復(fù)

使用道具 舉報(bào)

19#
ID:67838 發(fā)表于 2024-2-3 17:19 | 只看該作者

很詳細(xì),文檔參考看看
回復(fù)

使用道具 舉報(bào)

20#
ID:6467 發(fā)表于 2024-12-25 22:58 | 只看該作者
實(shí)用的工程案例;才能讓后來(lái)人有更多的理解、學(xué)習(xí)!
謝謝!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表