找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机控制洗衣机的Proteus电路仿真+源程序

[复制链接]
跳转到指定楼层
楼主
大家好, 今天给大家共享个基于51单片机控制洗衣机的Proteus电路仿真的资料  
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include <REG52.H>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. #define qiang_ledon qiang_led=1;
  5. #define qiang_ledoff qiang_led=0;
  6. #define biao_ledon biao_led=1;
  7. #define biao_ledoff biao_led=0;
  8. #define ruo_ledon ruo_led=1;
  9. #define ruo_ledoff ruo_led=0;
  10. #define piao_ledon piao_led=1;
  11. #define piao_ledoff piao_led=0;
  12. #define sgan_ledon sgan_led=1;
  13. #define sgan_ledoff sgan_led=0;
  14. #define jin_ledon jin_led=1;
  15. #define jin_ledoff jin_led=0;
  16. #define pai_ledon pai_led=1;
  17. #define pai_ledoff pai_led=0;
  18. unsigned char code Tab[11]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //数码管显示0~9的段码表
  19. unsigned char int_time;        //记录中断次数
  20. unsigned char second;        //储存秒
  21. uint t=0,tt=0;
  22.    sbit k1=P0^0;
  23.    sbit k2=P0^1;
  24.    sbit k3=P0^2;
  25.    sbit sg=P0^3;
  26.    sbit hk1=P0^4;
  27.    sbit hk2=P0^5;
  28.    sbit ledon=P0^7;
  29.    sbit qiang_led=P2^0;
  30.    sbit biao_led=P2^1;
  31.    sbit ruo_led=P2^2;
  32.    sbit piao_led=P2^3;
  33.    sbit sgan_led=P2^4;
  34.    sbit jin_led=P2^5;
  35.    sbit pai_led=P2^6;
  36.    sbit p30=P3^0;
  37.    sbit p31=P3^1;
  38.    sbit beepon=P2^7;
  39.    sbit sm1=P3^6;
  40.    sbit sm2=P3^7;
  41. void delay2(void)
  42.    {
  43.   unsigned char m;
  44.   for(m=0;m<200;m++)
  45.         ;
  46.    }

  47. void delay1(int s)
  48.    {
  49.    int i;
  50.    for(;s>0;s--)
  51.    for(i=0;i<65;i++);
  52.    }

  53. void delay(uint i)
  54.    {
  55.    uchar j;
  56.    for(i;i>0;i--)
  57.    for(j=255;j>0;j--);
  58.    }

  59. void DisplaySecond(unsigned char k)
  60. {
  61.    
  62.    sm1=0;        //P2.6引脚输出低电平, DS6点亮
  63.    P1=Tab[k/10];          //显示十位
  64.      delay2();
  65.      delay2();
  66.    sm1=1;
  67.    sm2=0;       //P2.7引脚输出低电平, DS7点亮
  68.    P1=Tab[k%10];         //显示个位
  69.      delay2();
  70.      delay2();
  71.    P3=0xff;     //关闭所有数码管
  72.    P1=1;        //显示个位
  73.      delay2();
  74.      delay2();
  75. }
  76.           
  77. void beep()
  78.    {
  79.           p30=0;
  80.     p31=0;
  81.            t=0;
  82.         while(1)
  83.         {
  84.           beepon^=1;
  85.       delay(300);
  86.       if(t>=80) break;
  87.         }
  88.         beepon=0;
  89.         biao_led=0;
  90.     }
  91.           
  92. void f_qiang()
  93.     {         
  94.          qiang_ledon;
  95.          t=0;
  96.          tt=0;       
  97.      int_time=0;
  98.      second=00;
  99.          while(1)
  100.     {       
  101.           if(tt>=400) break;
  102.       t=0;
  103.           while(t<80&&tt<=400)
  104.           {       
  105.             p31=0;
  106.             p30=1;        //正转 4s
  107.         DisplaySecond(second);
  108.             }
  109.           t=0;          //反转 4s       
  110.           while(t<80&&tt<=400)
  111.           {
  112.             p30=0;
  113.             p31=1;
  114.             DisplaySecond(second);
  115.             }
  116.      }
  117.           p30=0;
  118.           p31=0;          
  119.      }

  120. void f_biao()
  121.         {
  122.           qiang_led=0;
  123.       biao_led=1;
  124.           t=0;
  125.           tt=0;
  126.       int_time=0;
  127.       second=00;
  128.          while(1)
  129.      {
  130.            if(tt>=400) break;
  131.            t=0;
  132.           while(t<60&&tt<=400)
  133.            {       
  134.           p31=0;
  135.                   p30=1;        //正转3s
  136.           DisplaySecond(second);
  137.        }

  138.                 t=0;          //反转3s
  139.           while(t<60&&tt<=400)
  140.        {
  141.               p30=0;
  142.                   p31=1;
  143.                   DisplaySecond(second);
  144.                 }
  145.        }
  146.        p30=0;
  147.            p31=0;
  148.          }

  149. void f_ruo()
  150.     {
  151.           qiang_led=0;
  152.           biao_led=0;
  153.           ruo_led=1;
  154.           t=0;
  155.           tt=0;
  156.       int_time=0;
  157.        second=00;
  158.                 while(1)
  159.        {
  160.                     if(tt>=400) break;
  161.                  t=0;
  162.                while(t<40&&tt<=400)
  163.            {        p31=0;
  164.                         p30=1;        //正转2s
  165.                 DisplaySecond(second);
  166.                 }
  167.              t=0;          //反转 2s
  168.                while(t<40&&tt<=400)
  169.             {   p30=0;
  170.                         p31=1;
  171.                         DisplaySecond(second);
  172.                       }
  173.          }
  174.                 p30=0;
  175.             p31=0;
  176.        }

  177. void f_piao()
  178.         {
  179.            qiang_ledoff;
  180.            biao_ledoff;
  181.            piao_ledon;
  182.            t=0;
  183.            tt=0;
  184.        int_time=0;
  185.        second=00;
  186.                  while(1)
  187.           {
  188.                       if(tt>=400) break;
  189.                    t=0;
  190.                  while(t<40&&tt<=400)
  191.                {        p31=0;
  192.                         p30=1;        //正转2s
  193.                     DisplaySecond(second);
  194.                    }
  195.                    t=0;          //反转2s
  196.                  while(t<40&&tt<=400)
  197.                {    p30=0;
  198.                             p31=1;
  199.                              DisplaySecond(second);
  200.                        }
  201.              }
  202.           p30=0;
  203.       p31=0;
  204.           piao_ledoff;
  205.           }

  206. void pai_leds()
  207.      {
  208.             p30=0;
  209.             p31=0;
  210.                pai_led=1;        //排水阀灯亮 等待霍尔开关2
  211.             while(hk2);
  212.             if(hk2==0)  //如果闭合
  213.             pai_led=0;        //排水灯灭
  214.      }

  215. void jin()
  216.     {
  217.             p30=0;
  218.             p31=0;
  219.             jin_ledon;
  220.             while(hk1);
  221.             if(hk1==0)
  222.             jin_ledoff;
  223.      }

  224. void sgan()
  225.     {
  226.             sgan_ledon;         //甩干灯亮
  227.             t=0;
  228.         int_time=0;
  229.         second=00;
  230.              while(t<=400)
  231.             {       
  232.                             p31=0;
  233.                         p30=1;       
  234.                 DisplaySecond(second);
  235.                  }
  236.         sgan_ledoff;
  237.     }

  238. void sgan1()
  239.     {
  240.            sgan_ledon;
  241.            t=0;
  242.        int_time=0;
  243.        second=00;
  244.              while(t<=400)
  245.             {       
  246.                            p31=0;
  247.                    p30=1;       
  248.                DisplaySecond(second);
  249.                  }
  250.         piao_ledoff;
  251.         sgan_ledoff;
  252.         beep();
  253.             t=401;
  254.     }


  255. void f_an1()
  256.    {  
  257.         qiang_ledon; //方案1灯亮
  258.         jin();  //进入强洗
  259.         f_qiang();         //循环20S
  260.         delay1(4000);//延时4s
  261.         f_biao();  //循环20S
  262.         delay1(4000);//延时4s
  263.         f_ruo();  //循环20S
  264.         ruo_ledoff;       
  265.         pai_leds();
  266.         delay1(1000); //延时1S 进入甩干
  267.         sgan(); //甩干20s
  268.         sgan_ledoff;
  269.         ruo_ledoff;
  270.         piao_ledoff;
  271.         jin();
  272.         delay1(1000); //延时1S 进入漂洗
  273.         f_piao();  //循环20S
  274.         sgan_ledoff;
  275.         piao_ledoff;
  276.         pai_leds();
  277.         delay1(1000); //延时1S 进入甩干
  278.         sgan1();//最终甩干20S
  279.         delay(500);//延时       
  280.         beep();
  281.    }

  282. void f_an2()
  283.    {  
  284.         biao_ledon; //方案1灯亮
  285.         jin();
  286.         f_biao();  //循环20S
  287.         delay1(4000); //延时4S
  288.         f_ruo();  //循环20S
  289.         ruo_ledoff;
  290.         pai_leds();
  291.         delay1(1000); //延时1S 进入甩干
  292.         sgan(); //甩干20s
  293.         ruo_ledoff;
  294.         piao_ledoff;
  295.         jin();
  296.         delay1(1000); //延时1S 进入漂洗
  297.         f_piao();  //循环20S
  298.         sgan_led=0;
  299.         pai_leds();
  300.         delay1(1000); //延时1S 进入甩干
  301.         sgan();//最终甩干20s
  302.         delay(500);//延时5s
  303.         piao_led=0;
  304.         beep();
  305.    }

  306. void f_an3()
  307.   {  
  308.         ruo_led=1; //方案1灯亮
  309.         jin();
  310.         f_ruo();  //循环20S
  311.         ruo_ledoff;
  312.         pai_leds();
  313.         delay1(1000); //延时1S 进入甩干
  314.         sgan(); //甩干20S
  315.         ruo_ledoff;
  316.         piao_ledoff;
  317.         jin();
  318.         delay1(1000); //延时1S 进入漂洗
  319.         f_piao();  //循环20S
  320.         sgan_led=0;
  321.         pai_leds();
  322.         delay1(1000); //延时1S 进入甩干
  323.         sgan();//最终甩干20s
  324.         delay(500);//延时5s
  325.         piao_led=0;
  326.         p30=0;
  327.         beep();
  328.    }


  329. int main(void)
  330. {         
  331.   TMOD=0x01;       //方式1 16位计数器
  332.   TH0=-50000/256;   //设定初值
  333.   TL0=-50000%256;
  334.   EA=1;               //开总中断
  335.   ET0=1;             //开定时器0中断
  336.   TR0=1;             //启动定时器0
  337.   P2=0;
  338.   int_time=0;     //中断次数初始化
  339.   second=00;           //秒初始化
  340.          while(1)
  341.     {       
  342.           if(k1==0)
  343.         {         
  344.                 delay(10);
  345.                 if(k1==0)
  346.             {
  347.                         f_an1();
  348.                 }
  349.         }
  350.         if(k2==0)
  351.         {
  352.                 delay(10);
  353.                 if(k2==0)
  354.                 {
  355.                         f_an2();
  356.                 }
  357.         }
  358.         if(k3==0)
  359.         {
  360.             delay(10);
  361.            if(k3==0)
  362.             {
  363.                     f_an3();
  364.             }
  365.         }

  366.         if(sg==0)
  367.         {
  368.                 delay(10);
  369.                 if(sg==0)
  370.                 {
  371.                    sgan1();
  372.                 }
  373.         }
  374. }
  375.         return 0;
  376. }  


  377. void time0() interrupt 1 using 1
  378.    {  
  379.      int_time ++;        //每来一次中断,中断次数int_time自加1
  380.     if(int_time==20)   //够20次中断,即1秒钟进行一次检测结果采样
  381.       {
  382.         int_time=0;    //中断次数清0
  383.         second++;    //秒加1
  384.       }                   
  385.    TH0=-50000/256;   //50000  =50ms中断一次
  386.    TL0=-50000%256;
  387.    t++;
  388.    tt++;
  389.    }
复制代码


所有资料51hei提供下载:
洗衣机仿真.rar (360.92 KB, 下载次数: 159)


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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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