找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1254|回复: 0
打印 上一主题 下一主题
收起左侧

单片机全自动洗衣机程序

[复制链接]
跳转到指定楼层
楼主
ID:440125 发表于 2018-12-5 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
全自动洗衣机

单片机源程序如下:
  1. #include <reg51.h>                       /*地址头文件*/
  2. #include <absacc.h>                      /*绝对地址访问头文件*/
  3. #include <math.h>                        /*数学库函数*/
  4. #include <intrins.h>                     /*内部函数库*/



  5. #define IN0 XBYTE[0x2030]                /* 0809通道0地址 */

  6. #define w_c_add XBYTE[0x2070]            /* lcd写命令字地址 */
  7. #define w_d_add XBYTE[0x2071]            /* lcd写数据地址 */
  8. #define r_s_add XBYTE[0x2072]            /* lcd读状态字地址 */
  9. #define r_d_add XBYTE[0x2073]            /* lcd读数据地址 */

  10. #define c8279 XBYTE [0x2021]             /* 8279命令/状态口的地址 */
  11. #define d8279 XBYTE [0x2020]             /* 8279数据口地址 */


  12. unsigned char water_level;/*水位*/
  13. unsigned char wash_power;/*洗涤强度*/
  14. unsigned char wash_power1;
  15. unsigned char piao_time;/*漂洗次数*/
  16. unsigned char m;
  17.               

  18. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
  19.                     0x77,0x7c,0x39,0x5e,0x79,0x71};    /* 字型表 */


  20. unsigned char code TAB1[8] = {0x10,0x30,0x20,0x60,0x40,0xC0,0x80,0x90};//电机正转
  21. unsigned char code TAB2[8] = {0x90,0x80,0xC0,0x40,0x60,0x20,0x30,0x10};//电机反转


  22. unsigned char bdata status;               /* 可位寻址片内数据存储器,允许位与字节混合访问 */
  23. sbit busy=status^7;                       /*“忙”线的第7位*/

  24. sbit clflag=ACC^7;   /*8279查询位*/

  25. unsigned char key;
  26. unsigned char keyflag=0;

  27. unsigned char Min;
  28. unsigned char Sec;
  29. unsigned char TimeEnd=0;
  30. unsigned char ZTime;


  31. sbit Speaker=P3^6;                       /*蜂鸣器*/
  32. sbit Led=P3^0;                           /*Led小灯*/
  33. sbit Led1=P3^1;                          /*Led小灯*/
  34. void alarm(unsigned int t);

  35. void delay(unsigned int t);
  36. void delay1(unsigned char n);
  37. void DaoJiShi();  
  38. void TimeSelect();

  39.       


  40. void lcd_num(unsigned char i,unsigned char j,unsigned char num);
  41. void lcd_string(unsigned char i,unsigned char j,unsigned char *s);
  42. void lcd_clr();                                                /*LCD清除程序*/
  43. void init_lcd();                                             /*LCD初始化*/
  44. void lcd_busy(void);                       /*LCD忙状态检测函数 */


  45. void init_8279(void);

  46. unsigned char adc0809();
  47. void play0809(unsigned char m,unsigned char n);

  48.                
  49. void MotorChoose();
  50. void MotorChoose1();
  51.      
  52.                  



  53. void ZdCanShu();
  54. void PxTimes();
  55. void XdPower();
  56. void ShuiWei();

  57. void ShangShui();
  58. void QinPao();
  59. void TuoShui();
  60. void XiDi();
  61. void ShuaiGan();
  62. void PiaoXi();








  63.                      




  64. /*******************************************************************************
  65.                主函数
  66. *******************************************************************************/

  67. void main()
  68. {  unsigned char j;
  69.    init_lcd();
  70.    init_8279();
  71.   
  72.    
  73.    while(key!=0x0f);        /*按f开启洗衣机*/
  74.    alarm(2);
  75.    keyflag=0;
  76.    lcd_string(1,1,"****************");  
  77.    lcd_busy();   
  78.    lcd_string(2,1,"欢迎使用洗衣机");
  79.    lcd_busy();
  80.    lcd_string(3,1,"按任意键继续");
  81.    lcd_busy();
  82.    lcd_string(4,1,"****************");
  83.    while(keyflag!=1);
  84.    alarm(2);
  85.    keyflag=0;
  86.    lcd_clr();
  87.    lcd_busy();
  88.    lcd_string(2,3,"开始工作!");
  89.    delay(5);
  90.    lcd_busy();
  91.    lcd_string(2,1,"请选择使用模式");
  92.    delay(5);
  93.    lcd_clr();
  94.    
  95.    
  96.    lcd_clr();  
  97.    lcd_busy();     
  98.    lcd_string(1,1,"0 - 全自动模式");
  99.    lcd_string(2,1,"1 - 浸泡");
  100.    lcd_string(2,5,"2 - 洗涤");
  101.    lcd_string(3,1,"3 - 漂洗");
  102.    lcd_string(3,5,"4 - 甩干");
  103.    while(1!=keyflag);
  104.    alarm(2);   
  105.    keyflag=0;
  106.    lcd_clr();
  107.         
  108.         switch(key)
  109.         {
  110.           case 0:
  111.             {   ZdCanShu();
  112.                        /*********************上水**************************/       
  113.                   
  114.                 lcd_busy();
  115.                         lcd_string(4,1,"请按确认键");
  116.                         while(key!=0x0e);        /*按e确认*/
  117.                 alarm(1);
  118.                 keyflag=0;
  119.                
  120.                 lcd_clr();  
  121.                 lcd_busy();
  122.                 lcd_string(1,1,"上水中");
  123.                     ShangShui();
  124.                     delay(5);
  125.                /*******************浸泡***************************/
  126.                     QinPao();
  127.                     delay(2);
  128.                     /*********************洗涤**************************/
  129.                     XiDi();
  130.                     delay(2);
  131.                   /*********************脱水**************************/  
  132.                     TuoShui();
  133.                     delay(2);
  134.                   /*********************漂洗**************************/
  135.                     PiaoXi();
  136.                     delay(2);
  137.                   /*********************甩干**************************/
  138.                     ShuaiGan();
  139.                 delay(2);
  140.                    
  141.                break;
  142.                     }       
  143.           case 1:
  144.             {   ShuiWei();
  145.                     /*********************上水**************************/       
  146.                   
  147.                 lcd_busy();
  148.                         lcd_string(3,1,"请按确认键");
  149.                         while(key!=0x0e);        /*按e确认*/
  150.                 alarm(1);
  151.                 keyflag=0;
  152.                
  153.                 lcd_clr();  
  154.                 lcd_busy();
  155.                 lcd_string(1,1,"上水中");
  156.                     ShangShui();
  157.                     delay(5);
  158.                    
  159.                     /*******************浸泡***************************/
  160.                     QinPao();
  161.                 break;         
  162.                     }
  163.           case 2:
  164.             {  ShuiWei();
  165.                XdPower();
  166.                /*********************上水**************************/       
  167.                    
  168.                 lcd_busy();
  169.                         lcd_string(3,1,"请按确认键");
  170.                         while(key!=0x0e);        /*按e确认*/
  171.                 alarm(1);
  172.                 keyflag=0;
  173.                
  174.                 lcd_clr();  
  175.                 lcd_busy();
  176.                 lcd_string(1,1,"上水中");
  177.                     ShangShui();
  178.                     delay(5);
  179.                   /*********************洗涤**************************/
  180.                     XiDi();
  181.                     delay(2);
  182.                   /*********************脱水**************************/  
  183.                     TuoShui();
  184.                     delay(2);
  185.                     break;

  186.               
  187.                     }
  188.           case 3:
  189.          
  190.             {  ShuiWei();
  191.                PxTimes();
  192.                lcd_busy();
  193.                        lcd_string(3,1,"请按确认键");
  194.                        while(key!=0x0e);        /*按e确认*/
  195.                alarm(1);
  196.                keyflag=0;

  197.                   /*********************漂洗**************************/
  198.                     PiaoXi();
  199.                     delay(2);
  200.                     break;
  201.            }
  202.             
  203.           case 4:
  204.             {/*********************甩干**************************/
  205.                 lcd_clr();
  206.                 lcd_busy();
  207.                         lcd_string(2,1,"请按确认键");
  208.                         while(key!=0x0e);        
  209.                 alarm(1);
  210.                 keyflag=0;
  211.                     ShuaiGan();
  212.                     delay(2);
  213.                 break;       
  214.              }
  215.             
  216.           default:break;                 
  217.                 }
  218.      
  219.      lcd_clr();
  220.      while(j<5)
  221.       {          
  222.         alarm(2);
  223.         delay(2);
  224.         lcd_busy();     
  225.         lcd_string(2,3,"工作结束!");
  226.         j++;
  227.        }
  228.      
  229.      lcd_clr();   
  230.      while(1);
  231.    
  232. }













  233. /*******************************************************************************
  234.              函数名:delay
  235.              函数功能:延时函数
  236. *******************************************************************************/
  237. void delay(unsigned int t)
  238. {
  239.      unsigned int i,j;
  240.      for(i=0;i<t;i++)
  241.      {
  242.          for(j=0;j<30000;j++);       
  243.      }       
  244. }
  245. /*******************************************************************************
  246.              函数名:delay1
  247.              函数功能:延时xms函数
  248. *******************************************************************************/

  249. void delay1(unsigned char t)
  250. { unsigned int i,j;
  251.      for(i=0;i<t;i++)
  252.      {
  253.          for(j=0;j<60;j++);       
  254.      }       
  255.           
  256. }
  257. /*******************************************************************************
  258.              函数名:init_8279
  259.              函数功能:8279初始化函数
  260. *******************************************************************************/

  261. void init_8279(void)
  262. {
  263.     c8279=0xd1;                            /* 清除显示        */
  264.     do {ACC=c8279;}                       /* 读8279状态寄存器 */  
  265.     while(clflag==1);                      /* 读状态字,等待清除结束*/
  266.     c8279=0x00;                            /* 8字符显示左入口      */
  267.     c8279=0x23;                            /* 12分频              */
  268.         EA=1;
  269.         EX0=1;

  270. }
  271. /*******************************************************************************
  272.              函数名:INT0_SERVICE
  273.              函数功能:外中断0服务函数(读键值)
  274. *******************************************************************************/
  275. void INT0_SERVICE(void) interrupt 0 using 2
  276. {
  277.      unsigned char i;
  278.      EA=0;
  279.      c8279=0x40;                          /*读fifo ram命令*/
  280.      i=d8279;
  281.      i=i&0x0f;                            /*取键值低4位*/
  282.      key=i;                               /*返回键值*/
  283.      
  284.      keyflag=1;
  285.      c8279=0x80;
  286.      d8279=table[key];
  287.    
  288.          EA=1;

  289. }

  290. /*******************************************************************************
  291.              函数名:init_lcd
  292.              函数功能:LCD初始化函数
  293. *******************************************************************************/

  294. void init_lcd()                                             /*LCD初始化*/
  295. {               
  296.     lcd_busy();
  297.         w_c_add=0x30;                                              /* 功能设置:8位数据 */
  298.         lcd_busy();     
  299.         w_c_add=0x0C;                                              /* 显示状态:整体显示,游

  300. 标位置无效*/
  301.         lcd_busy();
  302.         w_c_add=0x01;                                              /* 清除显示:将DDRAM填满

  303. “20H”*/
  304.         lcd_busy();
  305.         w_c_add=0x02;                                             /* 地址归位:设定DDRAM地址计数器

  306. 到“00” */

  307.        
  308. }

  309. /*******************************************************************************
  310.              函数名:lcd_busy
  311.              函数功能:LCD检测忙函数
  312. *******************************************************************************/

  313. void lcd_busy(void)   /*LCD忙状态检测函数 */
  314. {
  315.         do
  316.         {
  317.             status=r_s_add;  /* 读状态字地址的第7位 */
  318.         }       
  319.         while(busy);
  320. }


  321. /*******************************************************************************
  322.              函数名:lcd_clr
  323.              函数功能:LCD清屏函数
  324. *******************************************************************************/

  325. void lcd_clr()                                                /*LCD清除程序*/
  326. {
  327.         
  328.         lcd_busy();
  329.         w_c_add=0x01;                 /* 清除显示:将DDRAM填满“20H”*/

  330. }

  331. /*******************************************************************************
  332.              函数名:lcd_string
  333.              函数功能:LCD字符串显示
  334. *******************************************************************************/

  335. void lcd_string(unsigned char i,unsigned char j,unsigned char *s)
  336. {    unsigned char m;
  337.          switch(i)
  338.         {case 1:m=0x80;break;
  339.          case 2:m=0x90;break;
  340.          case 3:m=0x88;break;
  341.          case 4:m=0x98;break;
  342.          default:break;
  343.                 }
  344.          w_c_add=m+j-0x01;
  345.        
  346.         for(;*s!='\0';s++)
  347.         {
  348.                 lcd_busy();
  349.                 w_d_add=*s;
  350.     }
  351. }

  352. /*******************************************************************************
  353.              函数名:lcd_num
  354.              函数功能:LCD字符串显示
  355. *******************************************************************************/
  356. void lcd_num(unsigned char i,unsigned char j,unsigned char num)           /*显示一个数字*/
  357. {  unsigned char m;
  358.    switch(i)
  359.         {case 1:m=0x80;break;
  360.          case 2:m=0x90;break;
  361.          case 3:m=0x88;break;
  362.          case 4:m=0x98;break;
  363.          default:break;
  364.         }
  365.     w_c_add=m+j-0x01;
  366.     lcd_busy();
  367.     w_d_add=0x30+num;                    /*0~9分别对应0x30~0x39*/
  368. }

  369. /*******************************************************************************
  370.              函数名:alarm
  371.              函数功能:报警函数
  372. *******************************************************************************/

  373. void alarm(unsigned int m)
  374. {   Led=0;
  375.         Led1=0;
  376.     Speaker=0;
  377.         delay(m);          /*延时*/
  378.     Speaker=1;
  379.     Led=1;
  380.         Led1=1;
  381. }

  382. /*******************************************************************************
  383.              函数名:ShuiWei
  384.              函数功能:水位选择显示
  385. *******************************************************************************/

  386. void ShuiWei()           
  387. {  lcd_clr();  
  388.    lcd_busy();     
  389.    lcd_string(1,1,"请选择水位:");   
  390.    lcd_string(2,1,"1-一级");
  391.    lcd_string(3,1,"2-二级");
  392.    lcd_string(4,1,"3-三级");
  393.    delay(8);
  394.   
  395.    
  396.    lcd_clr();  
  397.    lcd_busy();
  398.    lcd_string(1,1,"水位:");  
  399.    while(1!=keyflag);
  400.    alarm(1);
  401.    water_level=key;   /*水位*/

  402.    keyflag=0;  

  403.         switch(water_level)
  404.    {
  405.            case 1:{lcd_busy();lcd_string(1,6,"一级");delay(8);break;}
  406.     case 2:{lcd_busy();lcd_string(1,6,"二级");delay(8);break;}
  407.     case 3:{lcd_busy();lcd_string(1,6,"三级");delay(8);break;}
  408.     default:break;
  409.     }  
  410. }

  411. /*******************************************************************************
  412.              函数名:XdPower
  413.              函数功能:洗涤强度选择显示
  414. *******************************************************************************/

  415. void XdPower()           
  416. {  lcd_clr();  
  417.    lcd_busy();     
  418.    lcd_string(1,1,"请选择洗涤强度:");   
  419.    lcd_string(2,1,"1-强洗");
  420.    lcd_string(2,5,"2-轻洗");
  421.    lcd_string(3,1,"3-弱洗");
  422.    lcd_string(3,5,"4-自动");
  423.    delay(8);
  424.    
  425.    lcd_clr();  
  426.    lcd_busy();
  427.    lcd_string(2,1,"洗涤强度:");
  428.    
  429.    while(1!=keyflag);
  430.    alarm(1);
  431.    wash_power=key;/*洗涤强度*/
  432.    keyflag=0;
  433.    
  434.         switch(wash_power)
  435.    {
  436.            case 1:{lcd_busy();lcd_string(2,6,"强洗");delay(8);break;}
  437.     case 2:{lcd_busy();lcd_string(2,6,"轻洗");delay(8);break;}
  438.     case 3:{lcd_busy();lcd_string(2,6,"弱洗");delay(8);break;}
  439.     case 4:{lcd_busy();lcd_string(2,6,"自动");delay(8);break;}
  440.     default:break;
  441.     }  
  442. }

  443. /*******************************************************************************
  444.              函数名:PxTimes
  445.              函数功能:洗涤强度选择显示
  446. *******************************************************************************/

  447. void PxTimes()           
  448. {  lcd_clr();  
  449.    lcd_busy();     
  450.    lcd_string(1,1,"请选择漂洗次数:");   
  451.    lcd_string(2,1,"1-三次");
  452.    lcd_string(3,1,"2-四次");
  453.    lcd_string(4,1,"3-五次");
  454.    delay(8);
  455.    
  456.    lcd_clr();  
  457.    lcd_busy();
  458.    lcd_string(1,1,"漂洗次数:");
  459.    
  460.    while(1!=keyflag);
  461.    alarm(1);
  462.    piao_time=key;/*漂洗次数*/     
  463.    keyflag=0;
  464.         switch(piao_time)
  465.    {
  466.            case 1:{lcd_busy();lcd_string(1,6,"三次");delay(8);break;}
  467.     case 2:{lcd_busy();lcd_string(1,6,"四次");delay(8);break;}
  468.     case 3:{lcd_busy();lcd_string(1,6,"五次");delay(8);break;}
  469.     default:break;
  470.     }  
  471. }

  472. /*******************************************************************************
  473.              函数名:ZdCanShu
  474.              函数功能:洗涤强度选择显示
  475. *******************************************************************************/

  476. void ZdCanShu()           
  477. {  
  478.    lcd_clr();  
  479.    lcd_busy();     
  480.    lcd_string(1,1,"请选择水位:");   
  481.    lcd_string(2,1,"1-一级");
  482.    lcd_string(3,1,"2-二级");
  483.    lcd_string(4,1,"3-三级");
  484.    delay(8);
  485.    while(1!=keyflag);
  486.    alarm(1);
  487.    water_level=key;   /*水位*/   
  488.    keyflag=0;
  489.    
  490.    lcd_clr();  
  491.    lcd_busy();     
  492.    lcd_string(1,1,"请选择洗涤强度:");   
  493.    lcd_string(2,1,"1-强洗");
  494.    lcd_string(2,5,"2-轻洗");
  495.    lcd_string(3,1,"3-弱洗");
  496.    lcd_string(3,5,"4-自动");
  497.    delay(8);
  498.    while(1!=keyflag);
  499.    alarm(1);
  500.    wash_power=key;/*洗涤强度*/
  501.    keyflag=0;
  502.      
  503.    lcd_clr();  
  504.    lcd_busy();     
  505.    lcd_string(1,1,"请选择漂洗次数:");   
  506.    lcd_string(2,1,"1-三次");
  507.    lcd_string(3,1,"2-四次");
  508.    lcd_string(4,1,"3-五次");
  509.    delay(8);
  510.    while(1!=keyflag);
  511.    piao_time=key;/*漂洗次数*/
  512.    alarm(1);
  513.    keyflag=0;
  514.   
  515.    lcd_clr();  
  516.    lcd_busy();
  517.    lcd_string(1,1,"水位:");   
  518.    lcd_busy();
  519.    lcd_string(2,1,"洗涤强度:");
  520.    lcd_busy();
  521.    lcd_string(3,1,"漂洗次数:");
  522.    
  523.    
  524.            switch(water_level)
  525.    {
  526.            case 1:{lcd_busy();lcd_string(1,6,"一级");delay(8);break;}
  527.     case 2:{lcd_busy();lcd_string(1,6,"二级");delay(8);break;}
  528.     case 3:{lcd_busy();lcd_string(1,6,"三级");delay(8);break;}
  529.     default:break;
  530.     }
  531.    
  532.    
  533.     switch(wash_power)
  534.    {
  535.            case 1:{lcd_busy();lcd_string(2,6,"强洗");delay(8);break;}
  536.     case 2:{lcd_busy();lcd_string(2,6,"轻洗");delay(8);break;}
  537.     case 3:{lcd_busy();lcd_string(2,6,"弱洗");delay(8);break;}
  538.     case 4:{lcd_busy();lcd_string(2,6,"自动");delay(8);break;}
  539.     default:break;
  540.     }
  541.    
  542.    
  543.         switch( piao_time)
  544.    {
  545.            case 1:{lcd_busy();lcd_string(3,6,"三次");delay(8);break;}
  546.     case 2:{lcd_busy();lcd_string(3,6,"四次");delay(8);break;}
  547.     case 3:{lcd_busy();lcd_string(3,6,"五次");delay(8);break;}
  548.     default:break;
  549.     }  
  550.    
  551.   
  552.    

  553.    
  554. }

  555. /*******************************************************************************
  556.              函数名:TimeSelect
  557.              函数功能:根据条件选择洗涤时间
  558. *******************************************************************************/

  559. void TimeSelect()
  560.    {
  561.       switch(wash_power1)
  562.           {
  563.             case 1:{Sec=10; Min=0;break;}
  564.             case 2:{Sec=15; Min=0;break;}
  565.              case 3:{Sec=20; Min=0;break;}
  566.             default:break;
  567.      }
  568.      
  569.        
  570.     }

  571. /*******************************************************************************
  572.              函数名:DaoJiShi
  573.              函数功能:定时器0 50ms定时,用于倒计时计时
  574. *******************************************************************************/
  575. void DaoJiShi()        
  576. {   
  577.         TMOD=0x11;
  578.         TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一次中断。
  579.         TL0=(65536-46080)%256;
  580.         ET0=1;
  581.         EA=1;TR0=1;
  582.         TimeEnd=0;
  583. }

  584. /*******************************************************************************
  585.              函数名:Time0
  586.              函数功能:定时器0中断处理程序,用于倒计时计时
  587. *******************************************************************************/
  588. void Time0() interrupt 1 using 2
  589. {   
  590.        
  591.         int t[4];

  592.         EA=0;
  593.         TH0=(65536-46080)/256;
  594.         TL0=(65536-46080)%256;
  595.          
  596.         t[0]=Sec/10;                 
  597.     t[1]=Sec%10;      
  598.     t[2]=Min/10;                  
  599.     t[3]=Min%10;  
  600.    
  601.     lcd_busy();
  602.         lcd_num(3,1,t[2]);
  603.         lcd_busy();
  604.         lcd_num(3,2,t[3]);
  605.         lcd_busy();
  606.         lcd_num(3,3,10);
  607.         lcd_busy();
  608.         lcd_num(3,4,t[0]);
  609.         lcd_busy();
  610.         lcd_num(3,5,t[1]);
  611.          

  612.           
  613.         if(TimeEnd==0)
  614.         {   
  615.                 m++;
  616.                
  617.              if(m>=20)
  618.               {         m=0;
  619.                         Sec--;
  620.                     }
  621.         if(Sec==0&&Min!=0)
  622.           {
  623.                  Sec=59;
  624.                 Min--;
  625.                 }
  626.         if(Sec==0&&Min==0)
  627.           { ET0=0;   
  628.                 TimeEnd=1;
  629.                 t[0]=Sec/10;                 
  630.             t[1]=Sec%10;      
  631.             t[2]=Min/10;                  
  632.             t[3]=Min%10;  
  633.    
  634.             lcd_busy();
  635.                  lcd_num(3,1,t[2]);
  636.                 lcd_busy();
  637.                 lcd_num(3,2,t[3]);
  638.                  lcd_busy();
  639.                 lcd_num(3,3,10);
  640.                  lcd_busy();
  641.                 lcd_num(3,4,t[0]);
  642.                 lcd_busy();
  643.                 lcd_num(3,5,t[1]);
  644.                 lcd_busy();
  645.                 
  646.                 
  647.               }
  648.            }
  649.    
  650.         EA=1;
  651. }



  652. /*******************************************************************************
  653.              函数名:MotorChoose
  654.              函数功能:步进机强度选择模块
  655. *******************************************************************************/
  656. void MotorChoose()
  657.   { unsigned char j,i,time;
  658.          
  659.           switch(wash_power1)
  660.           {
  661.      case 1:{ time=25;lcd_busy();lcd_string(1,6,": 强洗");break;}    /*用来控制转速*/
  662.      case 2:{ time=30;lcd_busy();lcd_string(1,6,": 轻洗");break;}
  663.      case 3:{ time=35;lcd_busy();lcd_string(1,6,": 弱洗");break;}       
  664.      default:break;       
  665.                   }
  666.   ZTime=Min*60+Sec;               
  667.   if(ZTime!=0)
  668.    { for(j=0;j<=15;j++)
  669.      {      
  670.                    for(i=0;i<9;i++)
  671.            {
  672.                  P1 = TAB1[i];
  673.                  delay1(time);
  674.          
  675.             }       
  676.       }
  677.    // }
  678.    
  679. /* ZTime=Min*60+Sec;  
  680.   if(ZTime!=0)*/
  681.    for(j=0;j<=15;j++)
  682.     {      
  683.                 for(i=0;i<9;i++)
  684.            {
  685.                  P1 = TAB2[i];
  686.                  delay1(time);
  687.            }       

  688.          }
  689.     }         
  690.    }
  691.    
  692.    
  693. /*******************************************************************************
  694.              函数名:MotorChoose1
  695.              函数功能:步进机强度选择模块
  696. *******************************************************************************/
  697. void MotorChoose1()
  698.   { unsigned char j,i,time;
  699.           time=28;
  700.           switch(piao_time)
  701.           {
  702.      case 1:{ lcd_busy();lcd_string(1,6,": 三次");break;}    /*用来控制转速*/
  703.      case 2:{ lcd_busy();lcd_string(1,6,": 四次");break;}
  704.      case 3:{ lcd_busy();lcd_string(1,6,": 五次");break;}       
  705.      default:break;       
  706.                   }
  707.   ZTime=Min*60+Sec;               
  708.   if(ZTime!=0)
  709.    { for(j=0;j<=15;j++)
  710.      {      
  711.                    for(i=0;i<9;i++)
  712.            {
  713.                  P1 = TAB1[i];
  714.                  delay1(time);
  715.          
  716.             }       
  717.       }
  718.     //}
  719.    
  720. /* ZTime=Min*60+Sec;  
  721.   if(ZTime!=0)*/
  722.    for(j=0;j<=15;j++)
  723.     {      
  724.                 for(i=0;i<9;i++)
  725.            {
  726.                  P1 = TAB2[i];
  727.                  delay1(time);
  728.            }       

  729.          }
  730.          
  731.     }         
  732.    }
  733. /*******************************************************************************
  734.              函数名:adc0809
  735.              函数功能:AD转换函数
  736. *******************************************************************************/

  737. unsigned char adc0809()                 
  738. {
  739.         IN0=0;
  740.         delay(1);
  741.         return(IN0);                  /*返回值,即转换后的数据*/
  742. }

  743. /*******************************************************************************
  744.              函数名:0809play
  745.              功能:显示AD转换后的值
  746. *******************************************************************************/
  747. void play0809(unsigned char m,unsigned char n)                 
  748. {  unsigned char t[3];
  749.    unsigned char temp;
  750.         temp=adc0809();
  751.        
  752.         t[0]=temp/100;        
  753.     temp=temp%100;   
  754.     t[1]=temp/10;                 
  755.     t[2]=temp%10;
  756.    
  757.     lcd_busy();      
  758.     lcd_num(m,n,t[0]);           /*显示百位数字*/
  759.      
  760.     lcd_busy();      
  761.     lcd_num(m,n+1,t[1]);           /*显示十位数字*/
  762.    
  763.     lcd_busy();      
  764.     lcd_num(m,n+2,t[2]);           /*显示个位数字*/

  765.           
  766. }

  767. /*******************************************************************************
  768.              函数名:ShangShui
  769.              函数功能:上水模块
  770. *******************************************************************************/
  771. void ShangShui()
  772. {   unsigned char f_flag;
  773.     f_flag=0;       
  774.         while(f_flag==0)
  775.         {  
  776.            lcd_busy();
  777.            lcd_string(2,1,"水位高度:");       
  778.        play0809(3,4);
  779.        delay(1);
  780.            switch(water_level)
  781.            {
  782.                    case 3:{if(adc0809()>=200){alarm(3);f_flag=1;}
  783.                            break;}
  784.                    case 2:{if(adc0809()>=80) {alarm(3);f_flag=1;}
  785.                            break;}
  786.                   case 1:{if(adc0809()>=30) {alarm(3);f_flag=1;}
  787.                            break;}
  788.                    }       
  789.           delay(2);
  790.      }
  791. }

  792. /*******************************************************************************
  793.              函数名:TuoShui
  794.              函数功能:脱水模块
  795. *******************************************************************************/
  796. void TuoShui()
  797. {
  798.   unsigned char i,time;
  799.   Min=0;Sec=5;time=18;
  800.   lcd_clr();  
  801.   lcd_busy();
  802.   lcd_string(1,1,"脱水中");
  803.   lcd_busy();
  804.   lcd_string(2,1,"剩余时间:");
  805.   DaoJiShi();
  806.   ZTime=Min*60+Sec;
  807.   while(ZTime!=0)
  808.    { ZTime=Min*60+Sec;
  809.                    for(i=0;i<9;i++)
  810.            {
  811.                  P1 = TAB1[i];
  812.                  delay1(time);
  813.          
  814.             }       
  815.     }       
  816.    
  817. }


  818. /*******************************************************************************
  819.              函数名:ShuaiGan
  820.              函数功能:甩干模块
  821. *******************************************************************************/
  822. void ShuaiGan()
  823. {
  824.   unsigned char i,time;
  825.   Min=0;Sec=10;time=12;
  826.   lcd_clr();  
  827.   lcd_busy();
  828.   lcd_string(1,1,"甩干中");
  829.   lcd_busy();
  830.   lcd_string(2,1,"剩余时间:");
  831.   DaoJiShi();
  832.   ZTime=Min*60+Sec;
  833.   while(ZTime!=0)
  834.    { ZTime=Min*60+Sec;
  835.                    for(i=0;i<9;i++)
  836.            {
  837.                  P1 = TAB1[i];
  838.                  delay1(time);
  839.          
  840.             }       
  841.     }       
  842.    
  843. }
  844. /*******************************************************************************
  845.              函数名:QinPao
  846.              函数功能:浸泡模块
  847. *******************************************************************************/
  848. void QinPao()
  849. {  
  850.    Sec=5;Min=0;TimeEnd=0;

  851.    lcd_clr();  
  852.    lcd_busy();
  853.    lcd_string(1,1,"浸泡中");
  854.    lcd_string(2,1,"剩余时间:");
  855.    
  856.    TMOD=0x11;
  857.    TH0=(65536-46080)/256;// 由于晶振为11.0592,故所记次数应为46080,计时器每隔50000微秒发起一中断。
  858.    TL0=(65536-46080)%256;//46080的来历,为50000*11.0592/12
  859.    ET0=1;
  860.    TR0=1;
  861.    
  862.    while(ET0==1);
  863.            }

  864. /*******************************************************************************
  865.              函数名:XiDi
  866.              函数功能:洗涤模块
  867. *******************************************************************************/
  868. void XiDi()
  869. { unsigned char i;
  870.   wash_power1=wash_power;
  871.   
  872.   switch(wash_power)
  873.    {case 1:
  874.            case 2:
  875.            case 3:{
  876.                        lcd_clr();  
  877.             lcd_busy();
  878.             lcd_string(1,1,"洗涤中");
  879.             lcd_busy();
  880.             lcd_string(2,1,"剩余时间:");
  881.                    TimeSelect();
  882.             DaoJiShi();
  883.             ZTime=Min*60+Sec;
  884.             while(ZTime!=0)
  885.              {  ZTime=Min*60+Sec;
  886.                 MotorChoose();
  887.               }
  888.               break;
  889.                  }
  890.    case 4:
  891.        {  for(i=1;i<4;i++)
  892.               {  lcd_clr();  
  893.              lcd_busy();
  894.              lcd_string(1,1,"洗涤中");
  895.              lcd_busy();
  896.              lcd_string(2,1,"剩余时间:");
  897.                        wash_power1=i;
  898.                  TimeSelect();
  899.                  DaoJiShi();
  900.              ZTime=Min*60+Sec;
  901.              while(ZTime!=0)
  902.               {  ZTime=Min*60+Sec;
  903.                  MotorChoose();
  904.                }
  905.            }
  906.           break;      
  907.          }
  908.     default:break;
  909.   }
  910.               

  911. }


  912. /*******************************************************************************
  913.              函数名:PiaoXi
  914.              函数功能:漂洗模块
  915. *******************************************************************************/
  916. void PiaoXi()
  917. {  unsigned char i;

  918.         switch(piao_time)
  919.         { case 1:{
  920.                       for(i=0;i<3;i++)
  921.               { /*********************上水**************************/
  922.                       lcd_clr();  
  923.                 lcd_busy();
  924.                 lcd_string(1,1,"上水中");
  925.                     ShangShui();
  926.                     delay(5);
  927.                    
  928.                    
  929.                     /*********************漂洗**************************/
  930.                     Sec=10;Min=0;
  931.                     lcd_clr();  
  932.                 lcd_busy();
  933.                 lcd_string(1,1,"漂洗中");
  934.                 lcd_busy();
  935.                 lcd_string(2,1,"剩余时间:");
  936.                       DaoJiShi();
  937.                 ZTime=Min*60+Sec;
  938.                 while(ZTime!=0)
  939.                   {  ZTime=Min*60+Sec;
  940.                      MotorChoose1();
  941.                    }
  942.                
  943.                 delay(2);
  944.                 /*********************脱水**************************/  
  945.                     TuoShui();
  946.                     delay(2);
  947.                    }
  948.               break;
  949.                       }
  950.                         
  951.            case 2:{
  952.                         for(i=0;i<4;i++)
  953.                   { /*********************上水**************************/
  954.                           lcd_clr();  
  955.                     lcd_busy();
  956.                     lcd_string(1,1,"上水中");
  957.                         ShangShui();
  958.                         delay(5);
  959.                         
  960.                         
  961.                         /*********************漂洗**************************/
  962.                         Sec=10;Min=0;
  963.                         lcd_clr();  
  964.                     lcd_busy();
  965.                     lcd_string(1,1,"漂洗中");
  966.                     lcd_busy();
  967.                     lcd_string(2,1,"剩余时间:");
  968.                          DaoJiShi();
  969.                     ZTime=Min*60+Sec;
  970.                     while(ZTime!=0)
  971.                      {  ZTime=Min*60+Sec;
  972.                         MotorChoose1();
  973.                       }
  974.                
  975.                     delay(2);
  976.                     /*********************脱水**************************/  
  977.                         TuoShui();
  978.                         delay(2);
  979.                 }
  980.                 break;
  981.                       }
  982.                      
  983.            case 3:{
  984.                         for(i=0;i<5;i++)
  985.                   { /*********************上水**************************/
  986.                           lcd_clr();  
  987.                     lcd_busy();
  988.                     lcd_string(1,1,"上水中");
  989.                         ShangShui();
  990.                         delay(5);
  991.                         
  992.                         
  993.                         /*********************漂洗**************************/
  994.                         Sec=10;Min=0;
  995.                         lcd_clr();  
  996.                     lcd_busy();
  997.                     lcd_string(1,1,"漂洗中");
  998.                     lcd_busy();
  999.                     lcd_string(2,1,"剩余时间:");
  1000.                          DaoJiShi();
  1001.                     ZTime=Min*60+Sec;
  1002.                     while(ZTime!=0)
  1003.                      {  ZTime=Min*60+Sec;
  1004.                         MotorChoose1();
  1005.                       }
  1006.                
  1007.                     delay(2);
  1008.                     /*********************脱水**************************/  
  1009.                         TuoShui();
  1010.                         delay(2);
  1011.                    }
  1012.                 break;
  1013.                         }
  1014.            default:break;             
  1015.      }
  1016.       
  1017.         }
复制代码

所有资料51hei提供下载:
47432zhang.zip (46.32 KB, 下载次数: 30)


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表