找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

用單片機(jī)控制洗衣機(jī)的設(shè)計(jì)報(bào)告 含源碼與實(shí)物制作

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:276641 發(fā)表于 2018-6-12 17:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
  • 用單片機(jī)控制洗衣機(jī)
  • 項(xiàng)目名稱洗衣機(jī)控制
  • 項(xiàng)目內(nèi)容及要求;
內(nèi)容
    設(shè)自動洗衣機(jī)的控制要求是:啟動后先開啟進(jìn)水閥進(jìn)水,水位到達(dá)設(shè)定值后關(guān)閉,然后波輪按正轉(zhuǎn)5秒、反轉(zhuǎn)5秒,正、反轉(zhuǎn)之間停3秒的規(guī)律不斷循環(huán)轉(zhuǎn)動,直至達(dá)到設(shè)定時(shí)間停止,之后打開排水閥放水,水放完后洗衣桶旋轉(zhuǎn)脫水,1分鐘后停止并關(guān)閉排水閥,洗衣過程結(jié)束。要求水位設(shè)置不少于高、中、低三檔,洗衣時(shí)間在3——12分鐘范圍內(nèi)可調(diào),以1分鐘為單位,排水時(shí)間定為1分鐘。運(yùn)動執(zhí)行器用指示燈模擬,水位用開關(guān)模擬,試設(shè)計(jì)該洗衣機(jī)的控制電路。
要求
  • 畫出控制系統(tǒng)的框圖,說明系統(tǒng)方案設(shè)計(jì)的思路、理由或依據(jù);
  • 選擇、確定組成控制系統(tǒng)的各個(gè)單元,并闡述選擇確定的原則或依據(jù);
  • 畫出完整的電氣原理圖,介紹整體電路的工作原理、性能或特點(diǎn);
  • 如采用單片機(jī)控制,給出單片機(jī)程序的流程圖和清單,說明程序的工作原理。
  • 制作實(shí)物電路,驗(yàn)證設(shè)計(jì)、制作是否正確。
  • 題目分析及設(shè)計(jì)思路;(弄清楚要完成設(shè)計(jì)的技術(shù)要點(diǎn)、關(guān)鍵是什么,有哪些需要注意的事項(xiàng),可以采用哪些方法和手段,有哪些可用的方案或電路形式,等等。)

   要完成本項(xiàng)目設(shè)計(jì)的技術(shù)要點(diǎn)是對洗衣機(jī)的整個(gè)運(yùn)行流程深刻理解之后,再用程序?qū)⑺憩F(xiàn)出來,說以關(guān)鍵就在于程序的編寫。需要注意的是運(yùn)動執(zhí)行器是用指示燈模擬,水位用開關(guān)模擬,還要求水位設(shè)置不少于高、中、低三檔,洗衣時(shí)間在3——12分鐘范圍內(nèi)可調(diào)所以大概就要用到6個(gè)發(fā)光二極管和8個(gè)復(fù)位按鍵,因此就要對整個(gè)流程控制的邏輯順序有個(gè)很好的設(shè)計(jì)。對于程序的編寫可以采用單片機(jī)或PLC(就目前所學(xué)而言),而對于這樣一個(gè)簡單的小程序就采用單片機(jī)即可。

  • 方案設(shè)計(jì)說明;(在充分調(diào)研、思考的基礎(chǔ)上確定電路方案并說明理由。畫出電路的系統(tǒng)框圖,說明系統(tǒng)框圖的原理。)

一開始看到這個(gè)題目我就打算使用單片機(jī)來完成本設(shè)計(jì),因?yàn)閱纹瑱C(jī)使用方便,只需一個(gè)最小系統(tǒng)即可,在宿舍就可完成對程序的編寫和修改,而PLC價(jià)格昂貴且不能隨時(shí)可用。就本項(xiàng)目采用單片機(jī)而言需要一個(gè)單片機(jī)最小系統(tǒng),思維數(shù)碼管及驅(qū)動,一組LED和按鍵。

系統(tǒng)框圖

通過對八個(gè)按鍵的操作,可對水位設(shè)置,洗衣時(shí)間設(shè)置,開始洗衣,水位確定。四位數(shù)碼管可顯示水位的設(shè)置值,洗衣時(shí)間設(shè)置值,還有洗衣時(shí)間計(jì)時(shí)等。六個(gè)LED有兩個(gè)表示洗衣機(jī)波輪的正反轉(zhuǎn),兩個(gè)進(jìn)水和排水,一個(gè)脫水,一個(gè)洗衣指示燈。通過編寫程序?qū)崿F(xiàn)單片機(jī)對按鍵,四位數(shù)碼管和發(fā)光二極管的控制。

系統(tǒng)流程圖:



  • 單元設(shè)計(jì)說明;(按項(xiàng)目的具體要求撰寫,沒有可不寫。)
   單片機(jī)最小系統(tǒng):
   系統(tǒng)框圖:
  最小系統(tǒng)電路圖:
  • 完整電路原理分析;(按項(xiàng)目的具體要求撰寫)
   通過單片機(jī)掃描水位設(shè)置按鍵和洗衣時(shí)間設(shè)置按鍵來設(shè)置水位和洗衣時(shí)間在四位數(shù)碼管上顯示設(shè)置的值和計(jì)時(shí)時(shí)間。進(jìn)水閥指示燈亮表示進(jìn)水閥已打開,正轉(zhuǎn)和反轉(zhuǎn)指示燈亮表示洗衣機(jī)波輪的正轉(zhuǎn)和反轉(zhuǎn)。脫水閥亮表示脫水閥已打開可以排水。
  • 制作、調(diào)試情況;(如實(shí)介紹,重點(diǎn)介紹制作、調(diào)試過程中遇到的問題和解決問題的方法)

在制作,調(diào)試中遇到了許多大大小小的問題,在這選一些較為重要的寫出。

  • 在焊接完單片機(jī)最小系統(tǒng)進(jìn)行調(diào)試時(shí)指示燈不會亮,也不能下載程序,經(jīng)過幾番檢查發(fā)現(xiàn)指示燈正負(fù)接反,單片機(jī)引腳焊點(diǎn)有虛焊點(diǎn)。
  • 編寫好程序進(jìn)行調(diào)試時(shí),四位數(shù)碼管不能正常顯示,經(jīng)檢查發(fā)現(xiàn)共陽的數(shù)碼管使用了共陰的數(shù)碼管編碼。
  • 在調(diào)試程序中,發(fā)現(xiàn)四位數(shù)碼管顯示較暗且有閃爍,經(jīng)多次調(diào)試,將數(shù)碼管顯示程序?qū)懺诙〞r(shí)器中斷函數(shù)里,發(fā)現(xiàn)結(jié)果好多了。
  • 在測試程序中發(fā)現(xiàn)按鍵不起作用,檢查了程序和硬件電路發(fā)現(xiàn)按鍵連接的是地,而程序?qū)懙母唠娖浇油。改了下程序結(jié)果就出來了。
  • 實(shí)訓(xùn)成果;(如實(shí)介紹實(shí)訓(xùn)成果的情況)
八個(gè)按鍵從左到右的作用:按鍵1水位設(shè)置和洗衣時(shí)間設(shè)置切換選擇,按鍵2和按鍵3是加減數(shù)值,按鍵4是啟動,按鍵5按鍵6按鍵7按鍵8是表示水位的零水位和高中低水位。
  • 心得體會:

通過本次實(shí)訓(xùn),收獲頗多,感覺自己有進(jìn)步了一點(diǎn),許多東西只用大腦去想是不行的,理論可行但實(shí)際可不可行就不知道,這就需要實(shí)際動手操作了才知道,一開始看了這個(gè)項(xiàng)目覺得很簡單,隨便編寫個(gè)程序就可以了,但實(shí)際坐下來就沒有那么簡單了,首先硬件電路焊接就出現(xiàn)許多問題,跟別說編寫和調(diào)試程序就用了一個(gè)多星期。不過實(shí)際做出來,感覺還是挺好的。這也讓我進(jìn)一步了解了單片機(jī)的使用,掌握了一些運(yùn)動控制的思路與方法。

  • 附件:完整程序
  1. #include <reg51.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar gewei,shiwei;
  5. uchar xiyitime,num3;
  6. uchar shuiweizhi,shuiwei;
  7. uint num1,num2;
  8. sbit wei1=P1^0;
  9. sbit wei2=P1^1;
  10. sbit wei3=P1^2;
  11. sbit wei4=P1^3;
  12. sbit shuiwei0=P1^4;              //
  13. sbit shuiwei1=P1^5; //低水位
  14. sbit shuiwei2=P1^6;              //中水位
  15. sbit shuiwei3=P1^7; // 高水位
  16. sbit shezhi_key=P2^0;
  17. sbit qidong_key=P2^1;
  18. //sbit xiyi_key=P2^0;
  19. sbit up_key=P2^2;
  20. sbit down_key=P2^3;
  21. sbit shuifa=P2^4;
  22. sbit paishuifa=P2^5;
  23. sbit zhengzhuang=P2^6;
  24. sbit fanzhuang=P2^7;
  25. sbit tuoshui=P3^6;
  26. sbit zhishiled=P3^7;
  27. //此表為 LED 的字模, 共陰數(shù)碼管 0-9  -
  28. unsigned char code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
  29. 0xc6,0xa1,0x86,0x8e}; //段碼控制
  30. unsigned char code segtab1[]={0x40,0x4F,0x24,0x30,0x19,0x12,
  31. 0x02,0x78,0x00,0x10};  //共陰0-9帶小數(shù)點(diǎn)編碼
  32. //延時(shí)X毫秒函數(shù)11.0592Mhz時(shí)
  33. void delay_xms(uint xms)
  34. {
  35. uint i,j;
  36. for(i=xms;i>0;i--)
  37.    for(j=110;j>0;j--);
  38. }
  39. //延時(shí)X秒函數(shù)
  40. void delay_s(uint xs)
  41. {
  42. uint x;
  43. for(x=xs;x>0;x--)
  44.    delay_xms(1000);
  45. }
  46. //延時(shí)X分鐘函數(shù)
  47. void delay_min(uint xmin)
  48. {
  49. uint m,n;
  50. for(m=xmin;m>0;m--)
  51.    for(n=60;n>0;n--)
  52.      delay_s(1);
  53. }
  54. //取操作數(shù)的個(gè)十位
  55. void chuli(uint num)
  56. {
  57.   gewei=num%10;
  58.   shiwei=(num/10)%10;
  59. }
  60. //按鍵掃描函數(shù)
  61. void keysaomiao()
  62. {
  63. uchar jianzhi;
  64. if(shezhi_key==0)
  65.    {
  66.      delay_xms(10);
  67.               if(!shezhi_key)
  68.                 {
  69.                   jianzhi++;
  70.                             if(jianzhi>2)
  71.                               jianzhi=1;
  72.                   while(!shezhi_key);
  73.                 }
  74.    }
  75.   if(jianzhi==1)              //水位設(shè)置
  76.    {
  77.               if(up_key==0)
  78.                  {
  79.                    delay_xms(10);
  80.                    if(up_key==0)
  81.                      {
  82.                                  shuiwei++;
  83.                                  if(shuiwei>3)
  84.                                    {
  85.                                      shuiwei=0;
  86.                                    }
  87.                                  while(!up_key);
  88.                               }
  89.                  }
  90.               if(down_key==0)
  91.                  {
  92.                    delay_xms(10);
  93.                    if(down_key==0)
  94.                      {
  95.                                  if(shuiwei<=0)
  96.                                    {
  97.                                      shuiwei=3;
  98.                                    }
  99.                                  shuiwei--;
  100.                                  while(!down_key);
  101.                                }
  102.                 }
  103.               chuli(shuiwei);
  104.      P0=segtab[gewei];
  105.      wei1=0;
  106.      delay_xms(5);
  107.      wei1=1;
  108.      P0=segtab[shiwei];
  109.      wei2=0;
  110.      delay_xms(5);
  111.      wei2=1;
  112.               P0=0xFE;
  113.      wei3=0;
  114.      delay_xms(5);
  115.      wei3=1;
  116.      P0=0x9C;
  117.      wei4=0;
  118.      delay_xms(5);
  119.      wei4=1;
  120.    }
  121. if(jianzhi==2)
  122.    {
  123.      if(up_key==0)
  124.        {
  125.          delay_xms(10);
  126.                    if(up_key==0)
  127.                      {            
  128.              xiyitime++;
  129.                        if(xiyitime>12)
  130.                          {
  131.                            xiyitime=3;                           
  132.                          }                                            
  133.                        while(!up_key);
  134.            }
  135.        }
  136.      if(down_key==0)
  137.        {
  138.          delay_xms(10);
  139.                    if(down_key==0)
  140.                      {              
  141.              xiyitime--;
  142.              if(xiyitime<3)
  143.                          {
  144.                  xiyitime=12;                             
  145.                                    }
  146.                        while(!down_key);
  147.            }
  148.       }
  149.      chuli(xiyitime);
  150.      P0=segtab[gewei];
  151.      wei1=0;
  152.      delay_xms(5);
  153.      wei1=1;
  154.      P0=segtab[shiwei];
  155.      wei2=0;
  156.      delay_xms(5);
  157.      wei2=1;
  158.               P0=0xF7;
  159.      wei3=0;
  160.      delay_xms(5);
  161.      wei3=1;
  162.      P0=0xA3;
  163.      wei4=0;
  164.      delay_xms(5);
  165.      wei4=1;
  166.    }
  167. }
  168. //水位檢測子函數(shù)
  169. void shuiweijiance()
  170. {
  171.   if(shuiwei0==0)
  172.     {
  173.                 delay_xms(10);
  174.                 if(shuiwei0==0)
  175.                   {
  176.                               shuiweizhi=0;
  177.                               while(!shuiwei0);
  178.                             }
  179.               }
  180.   if(shuiwei1==0)
  181.     {
  182.                 delay_xms(10);
  183.                 if(shuiwei1==0)
  184.                   {
  185.                               shuiweizhi=1;
  186.                               while(!shuiwei1);
  187.                             }
  188.               }
  189.   if(shuiwei2==0)
  190.     {
  191.                 delay_xms(10);
  192.                 if(shuiwei2==0)
  193.                   {
  194.                               shuiweizhi=2;
  195.                               while(!shuiwei2);
  196.                             }
  197.               }
  198.   if(shuiwei3==0)
  199.     {
  200.                 delay_xms(10);
  201.                 if(shuiwei3==0)
  202.                   {
  203.                               shuiweizhi=3;
  204.                               while(!shuiwei3);
  205.                             }
  206.               }
  207. }
  208. //初始化函數(shù)
  209. void init()
  210. {
  211.    num2=60;
  212.    num3=4;
  213.    shuiweizhi=0;
  214.    xiyitime=3;
  215.    TMOD=0x01;
  216.    //TH0=(65536-45872)/256;//11.0592M晶振
  217.    //TL0=(65536-45872)%256;
  218.    TH0 = 0xB1;//12M晶振
  219.    TL0 = 0xE0;
  220.    EA=1;
  221.    ET0=1;
  222. }
  223. /************主函數(shù)**********************/
  224. void main()
  225. {
  226.   uint i,j;
  227.   init();
  228.   P0=0xbf;
  229.   wei1=0;
  230.   wei2=0;
  231.   wei3=0;
  232.   wei4=0;
  233.   while(qidong_key)
  234.      {
  235.        keysaomiao();//水位和洗衣時(shí)間設(shè)置
  236.               }
  237.    num3=xiyitime-1;
  238.    if(qidong_key==0)
  239.        {
  240.                    delay_xms(10);
  241.                    if(qidong_key==0)//啟動鍵按下
  242.                     {                                                                                                                                                                                         
  243.             shuifa=0; //開進(jìn)水閥進(jìn)水
  244.                                 while(shuiwei!=shuiweizhi)//檢測是否到達(dá)設(shè)定水位
  245.                                   {
  246.                                                         shuiweijiance();
  247.                                                         chuli(shuiweizhi);
  248.                                                         P0=segtab[gewei];
  249.                                                         wei1=0;
  250.                                                         delay_xms(5);
  251.                 wei1=1;
  252.                                                         P0=segtab[shiwei];
  253.                                                         wei2=0;
  254.                                                         delay_xms(5);
  255.                 wei2=1;
  256.                                                         delay_xms(5);
  257.                                                         chuli(shuiwei);
  258.                                                         P0=segtab[gewei];
  259.                 wei3=0;
  260.                 delay_xms(5);
  261.                 wei3=1;
  262.                 P0=segtab[shiwei];
  263.                 wei4=0;
  264.                 delay_xms(5);
  265.                 wei4=1;
  266.                                             }
  267.                                           while(i<100)
  268.                                             {
  269.                                               i++;
  270.                                                         shuiweijiance();
  271.                                                         chuli(shuiweizhi);
  272.                                                         P0=segtab[gewei];
  273.                                                         wei1=0;
  274.                                                         delay_xms(5);
  275.                 wei1=1;
  276.                                                         P0=segtab[shiwei];
  277.                                                         wei2=0;
  278.                                                         delay_xms(5);
  279.                 wei2=1;
  280.                                                         delay_xms(5);
  281.                                                         chuli(shuiwei);
  282.                                                         P0=segtab[gewei];
  283.                 wei3=0;
  284.                 delay_xms(5);
  285.                 wei3=1;
  286.                 P0=segtab[shiwei];
  287.                 wei4=0;
  288.                 delay_xms(5);
  289.                 wei4=1;                                             
  290.                                             }
  291.                                           delay_s(1);                                                                                                
  292.                                           while(j<300)
  293.                                             {
  294.                                                         j++;
  295.                                                         chuli(shuiwei);                                                         
  296.                                                         P0=segtab[gewei];
  297.                                                         wei1=0;
  298.                                                         delay_xms(5);
  299.                                                         wei1=1;
  300.                                                         P0=segtab[shiwei];
  301.                                                         wei2=0;
  302.                                                         delay_xms(5);
  303.                                                         wei2=1;
  304.                                                         chuli(xiyitime);
  305.                                                         P0=segtab[gewei];
  306.                                                         wei3=0;
  307.                                               delay_xms(5);
  308.                                                         wei3=1;
  309.                                                         P0=segtab[shiwei];                                                      
  310.                                                         wei4=0;
  311.                                                         delay_xms(5);                                                      
  312.                                                         wei4=1;                                                                                                                                                               
  313.                                              }
  314.                                           shuifa=1;
  315.                                           zhishiled=0;                                         
  316.                                 TR0=1;
  317.                                 while(!num3==0)
  318.                                   {
  319.                                               if(num2>=59)
  320.                                                           zhengzhuang=0;
  321.                                               if(num2==55)
  322.                                       zhengzhuang=1;
  323.                                                         if(num2==52)
  324.                                                           fanzhuang=0;
  325.                                                         if(num2==46)
  326.                                                           fanzhuang=1;
  327.                                                         if(num2==42)
  328.                                                           zhengzhuang=0;
  329.                                                         if(num2==35)
  330.                                                           zhengzhuang=1;
  331.                                                         if(num2==30)
  332.                                                           fanzhuang=0;
  333.                                                         if(num2==23)
  334.                                                           fanzhuang=1;
  335.                                                         if(num2==19)
  336.                                                           zhengzhuang=0;
  337.                                                         if(num2==13)
  338.                                                           zhengzhuang=1;
  339.                                                         if(num2==9)
  340.                                                           fanzhuang=0;
  341.                                                         if(num2==3)
  342.                                                           fanzhuang=1;
  343.                                   }
  344.                                TR0=0;
  345.                                zhengzhuang=1;
  346.                                fanzhuang=1;
  347.                      paishuifa=0;
  348.                      while(1)
  349.                       {
  350.                                             if(shuiwei0==0)
  351.                                     delay_xms(10);
  352.                                   if(shuiwei0==0)
  353.                                    {
  354.                                                         P0=0xbf;
  355.                                                           wei1=0;
  356.                                                           wei2=0;
  357.                                                           wei3=0;
  358.                                                           wei4=0;
  359.                                                tuoshui=0;
  360.                                                delay_min(1);
  361.                                                tuoshui=1;
  362.                                                paishuifa=1;
  363.                                                         P0=0;
  364.                                                         delay_s(2);
  365.                                                         zhishiled=1;
  366.                                                         break;
  367.                                              }
  368. ……………………

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

完整的Word格式文檔51黑下載地址:
http://www.torrancerestoration.com/bbs/dpj-122928-1.html


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

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

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