找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 11767|回复: 12
收起左侧

全自动洗衣机控制器设计的单片机代码

  [复制链接]
ID:358079 发表于 2018-6-24 23:28 | 显示全部楼层 |阅读模式
基于单片机的洗衣机控制器
采用两位数码管显示洗衣时间,采用驱动芯片控制电机转动

全自动洗衣机课程设计

    基于51单片机,C语言实现。
基本要求

模拟全自动洗衣机工作过程。以电机替代洗衣机电机。显示洗衣机工作的状态(进水、浸泡、洗衣、脱水、结束)。显示工作剩余时间(洗衣程序可自定义,时间精度:秒)。
洗衣时交替正、反转。

扩展要求

洗衣和脱水时电机转速不同。增加水位传感器输入。故障报警。增加声音提示。其它自定义功能。
设计用Preteus仿真:
0.png 0.png 0.png

仿真图如下:

  1. #include<reg51.h>
  2. //****************************//
  3. #define uchar unsigned char
  4. #define uint unsigned int

  5. //*******************************//
  6. //***************************//
  7. sbit mo_r = P3^2;          //电机右控制线
  8. sbit mo_l = P3^3;                //电机左控制线

  9. //****************************//
  10. sbit key_menu = P3^4; // 菜单按键
  11. sbit key_on = P3^5;          // 开始按键
  12. sbit key_off = P3^6; //         结束按键
  13. sbit key_se = P3^7;         //         菜单选择按键

  14. //***************************//
  15. sbit led_in = P0^0;                //        进水指示灯
  16. sbit led_xi = P0^1;           //  洗衣指示灯
  17. sbit led_pao = P0^2;        //        泡洗指示灯
  18. sbit led_xx = P0^3;           //  脱水指示灯
  19. sbit led_out = P0^4;  //   出水指示灯
  20. sbit led_over = P0^5;  // 洗衣结束指示灯
  21. sbit led_work = P0^6;  // 电机工作指示灯
  22. sbit led_wring = P0^7;         //        报警指示灯

  23. sbit other = P3^1;         //         脱水电源控制开关
  24. sbit anther = P3^0;         //        洗衣电源控制开关

  25. //******************************//
  26. uchar code num[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  27.                                                                    //
  28. //*****************************//
  29. char sec = 0;                  //  时间秒
  30. char min = 0;                   // 时间分
  31. uchar count=0;                  //  中断计数
  32. uchar flag0=0;                  //  洗衣机工作状态标志
  33. uchar flag1=0;                  //  进水次数标志
  34. uchar flag2=0;                  //  出水次数标志
  35. uchar flag3=0;                 //          泡洗次数标志
  36. uchar err =0;           //        报警标志
  37. uchar quan = 0;//正反转计数  
  38. //**********************************//
  39. //         函数声明
  40. //*************************************//
  41. void delay();//        延时函数
  42. void in();        //          进水子程序
  43. void out();         //          出水子程序
  44. void over();  //  结束子程序
  45. void xi();         //          洗衣子程序
  46. void pao();        //         泡衣子程序
  47. void xx(); //        脱水子程序
  48. void on(); //  工作on处理子程序
  49. void se(); //  显示菜单选择
  50. void SEG_display();         //显示时间子程序
  51. void key_scan();   //  按键扫描子程序

  52. //*****************************//
  53. //     延时函数
  54. //****************************//
  55. void delay(uint i)
  56. {
  57.         uint x,y;
  58.         for(x=i;x>0;x--)
  59.          for(y=120;y>0;y--);
  60. }

  61. //******************************//
  62. //           工作on处理子程序
  63. //********************************//
  64. void on()
  65. {
  66.         TMOD=0x01;
  67.         TH0=(65536-50000)/256;
  68.         TL0=(65536-50000)%256;
  69.         EA=1;
  70.         ET0=1;
  71.         TR0=1;

  72.         P0 = 0xff;
  73.         if(flag0 == 0)
  74.             in();
  75.         if(flag0 == 1)
  76.             xi();
  77.         if(flag0 == 2)
  78.             pao();
  79.         if(flag0 == 3)
  80.             xx();
  81.         if(flag0 == 4)
  82.             out();
  83.                
  84. }

  85. //*******************************//
  86. //                 结束子程序
  87. //*********************************//
  88. void over()
  89. {        other=0;
  90.         anther=0;
  91.         P0 = 0xff;
  92.         mo_r=0;
  93.         mo_l=0;
  94.         led_over = 0;
  95.         EA=0;

  96. }

  97. //*********************************//
  98. //           进水子程序
  99. //*********************************//
  100. void in()
  101. {        anther=0;
  102.         other=0;
  103.         P0 = 0xff;
  104.         led_in = 0;
  105.         flag1++;
  106.         mo_r = 0;
  107.         mo_l = 0;
  108.         min = 0;
  109.         sec = 8;
  110. }
  111. //*********************************//
  112. //                洗衣子程序
  113. //*********************************//
  114. void xi()
  115. {         anther=1;
  116.          other=0;
  117.      P0 = 0xff;
  118.          led_work = 0;
  119.          led_xi = 0;
  120.          mo_r = 1;
  121.          mo_l = 0;
  122.          min = 1;
  123.          sec = 36;
  124.          quan = 0;
  125. }
  126. //*********************************//
  127. //           泡衣子程序
  128. //*********************************//
  129. void pao()
  130. {        
  131.     anther=1;
  132.         other=0;
  133.         P0 = 0xff;
  134.         led_pao = 0;
  135.         led_work = 0;
  136.         flag3++;
  137.         mo_r = 1;
  138.         mo_l = 0;
  139.         min = 1;
  140.         sec = 35;
  141.         quan = 0;
  142. }
  143. //*********************************//
  144. //                脱水子程序
  145. //*********************************//
  146. void xx()
  147. {        other=1;
  148.         anther=0;
  149.         P0 = 0xff;
  150.         led_xx = 0;
  151.         mo_r = 0;
  152.         mo_l = 1;
  153.         min = 0;
  154.         sec = 50;
  155. }
  156. //*********************************//
  157. //                 出水子程序
  158. //*********************************//
  159. void out()
  160. {        anther=0;
  161.         other=0;
  162.         P0 = 0xff;
  163.         led_out = 0;
  164.         flag2++;
  165.         mo_r = 0;
  166.         mo_l = 0;
  167.         min = 0;
  168.         sec = 5;
  169. }
  170. //*********************************//
  171. //           显示菜单选择
  172. //*********************************//
  173. void se()
  174. {
  175.         P0 = 0xff;
  176.         if(flag0 >= 5)
  177.                 flag0 = 0;
  178.         if(flag0 == 0)
  179.         {
  180.                 led_in = 0;
  181.         }
  182.         if(flag0 == 1)
  183.         {
  184.                 led_xi=0;
  185.         }
  186.         if(flag0 == 2)
  187.         {
  188.                 led_pao=0;
  189.         }
  190.         if(flag0 == 3)
  191.         {
  192.                 led_xx=0;
  193.         }
  194.         if(flag0 == 4)
  195.         {
  196.                 led_out=0;
  197.         }
  198. }
  199. //********************************//
  200. //           菜单处理子程序
  201. //**********************************//
  202. void menu()
  203. {        
  204.     min = 0;
  205.         sec = 0;
  206.         mo_r=0;
  207.         mo_l=0;
  208.         SEG_display();

  209.            while(1)
  210.         {
  211.            if(key_on == 0)
  212.                 {
  213.                         delay(5);
  214.                         if(key_on == 0)
  215.                         {
  216.                                 while(!key_on);
  217.                                 on();
  218.                                 break;
  219.                         }
  220.                 }
  221. //**************************//
  222.                 if(key_off == 0)
  223.                 {
  224.                         delay(5);
  225.                         if(key_off == 0)
  226.                         {
  227.                                 while(!key_off);
  228.                                 over();
  229.                                 break;
  230.                         }
  231.                 }
  232. //****************************//
  233.                 if(key_se == 0)
  234.                 {
  235.                         delay(5);
  236.                         if(key_se == 0)
  237.                         {
  238.                                 while(!key_se);
  239.                                 flag0++;
  240.                                 se();
  241.                         }
  242.                 }                                
  243.         }
  244. }
  245. //*********************************//
  246. //                   按键扫描子程序
  247. //*********************************//
  248. void key_scan()
  249. {
  250.         if(key_menu == 0)
  251.         {
  252.                 delay(5);
  253.                 if(key_menu == 0)
  254.                 {
  255.                         while(!key_menu);
  256.                         menu();
  257.                 }
  258.         }
  259. //********************************//
  260.         if(key_on == 0)
  261.         {
  262.                 delay(5);
  263.                 if(key_on == 0)
  264.                 {
  265.                         while(!key_on);
  266.                         on();
  267.                 }
  268.         }
  269. //*********************************//
  270.         if(key_off == 0)
  271.         {
  272.                 delay(5);
  273.                 if(key_off == 0)
  274.                 {
  275.                         while(!key_off);
  276.                         over();
  277.                 }
  278.         }
  279. }
  280. //*******************************//
  281. //        显示子程序
  282. //*********************************//
  283. void SEG_display()
  284. {
  285.         P1=0x01;
  286.         P2 = num[min/10];
  287.         delay(10);
  288.         P1 = 0x02;
  289.         P2 = num[min%10];
  290.         delay(10);
  291.         P1 = 0x04;
  292.         P2 = num[sec/10];
  293.         delay(10);
  294.         P1 = 0x08;
  295.         P2 = num[sec%10];
  296.         delay(10);
  297. }
  298. //*********************************//
  299. //       主函数
  300. //*********************************//
  301. void main()
  302. {
  303.         led_in=0;
  304.         anther=0;
  305.         other=0;
  306.         while(1)
  307.         {
  308.                
  309.                 SEG_display();
  310.                 key_scan();
  311.         }
  312. }
  313. //**********************************//
  314. //            定时器0中断处理程序
  315. //**********************************//
  316. void timer0() interrupt 1
  317. {
  318.         TH0=(65536-50000)/256;
  319.         TL0=(65536-50000)%256;
  320.         count++;
  321.     if(count==20)
  322.         {        
  323.                  count = 0;
  324.                 sec--;
  325.                 if((flag0==1)||(flag0==2))
  326.                 {
  327.                     quan++;
  328.                         switch(quan)
  329.                          {
  330.                                  case 1:mo_r=1;mo_l=0;break;
  331.                                 case 10:mo_r=0;mo_l=0;break;
  332.                                 case 15:mo_r=0;mo_l=1;break;
  333.                                 case 25:mo_r=0;mo_l=0;break;
  334.                                 default:;
  335.                          }

  336.                         if(quan==30)
  337.                         {
  338.                            quan=0;
  339.                         }

  340.                 }
  341.          //**********************************//
  342.                 if((sec == 0)&&(min != 0))
  343.                 {
  344.                   min--;
  345.                   sec = 59;
  346.                  }
  347.           //**********************************//
  348.                 if((sec<0)&&(min==0)&&(flag0==0))         //进水结束
  349.                 {         
  350.                      switch(flag1)
  351.                          {
  352.                                  case 1:flag0=1;xi();break;
  353.                                 case 2:flag0=2;pao();break;
  354.                                 case 3:flag0=2;pao();break;
  355.                                 case 4:flag0=2;pao();break;
  356.                                 default: err=1;led_wring = 0;
  357.                          }
  358.                 }
  359.          //**********************************//
  360.                 if((sec<0)&&(min==0)&&(flag0==1))   //洗衣结束
  361.                 {         
  362.                      flag0 = 4;
  363.                          out();
  364.                 }
  365.          //**********************************//
  366.                 if((sec<0)&&(min==0)&&(flag0==2))   //泡衣结束
  367.                 {         
  368.                      switch(flag3)
  369.                          {
  370.                                  case 1:flag0=4;out();break;
  371.                                 case 2:flag0=4;out();break;
  372.                                 case 3:flag0=4;out();break;
  373.                                 default: err=1;led_wring = 0;
  374.                          }
  375.                 }
  376.          //**********************************//
  377.                 if((sec<0)&&(min==0)&&(flag0==4))         //出水结束
  378.                 {        
  379.                         switch(flag2)
  380.                          {
  381.                                  case 1:flag0=0;in();break;
  382.                                 case 2:flag0=0;in();break;
  383.                                 case 3:flag0=0;in();break;
  384.                                 case 4:flag0=3;xx();break;

  385.                                 default: err= 1;led_wring = 0;
  386.                          }
  387.                 }
  388.          //***********************************//
  389.                 if((sec<0)&&(min==0)&&(flag0==3))
  390.                 {         sec = 0;
  391.                          over();
  392.                 }

  393.         }
  394. }
复制代码
介于篇幅所限,详细内容见附件

洗衣机控制器.zip

77.99 KB, 下载次数: 286, 下载积分: 黑币 -5

详细内容

回复

使用道具 举报

ID:358079 发表于 2018-6-24 23:29 | 显示全部楼层
了解一下
回复

使用道具 举报

ID:365546 发表于 2018-7-7 16:46 | 显示全部楼层
有仿真源文件吗?
回复

使用道具 举报

ID:63679 发表于 2018-12-27 21:59 | 显示全部楼层
感谢分享 课设正用到
回复

使用道具 举报

ID:551167 发表于 2019-5-30 16:29 | 显示全部楼层
求仿真源文件啊
回复

使用道具 举报

ID:552908 发表于 2019-6-2 11:29 | 显示全部楼层
大佬大佬
回复

使用道具 举报

ID:657280 发表于 2019-12-9 08:59 | 显示全部楼层
感谢分享,学习了!
回复

使用道具 举报

ID:671012 发表于 2019-12-23 10:22 | 显示全部楼层
各位大佬 压缩包里都包含哪些资料
回复

使用道具 举报

ID:327070 发表于 2020-2-2 15:50 | 显示全部楼层
家里有一台非自动洗衣机在改造,希望能用得上
回复

使用道具 举报

ID:725187 发表于 2020-4-10 16:32 | 显示全部楼层
你能开发了吗,可与我联系
回复

使用道具 举报

ID:668601 发表于 2020-5-9 10:34 | 显示全部楼层
感谢技术员的分享
回复

使用道具 举报

ID:769582 发表于 2020-6-6 13:43 | 显示全部楼层
图里面显示绿色数字的圆形电压表在ISIS中怎么搜?
回复

使用道具 举报

ID:782307 发表于 2020-6-17 21:34 | 显示全部楼层
楼主,能发个网盘吗?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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