找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 7856|回复: 0
收起左侧

简单洗衣机控制基于单片机

[复制链接]
ID:349491 发表于 2018-6-12 08:57 | 显示全部楼层 |阅读模式
本帖最后由 席成 于 2018-6-12 08:58 编辑

洗衣机内容
    设自动洗衣机的控制要求是:启动后先开启进水阀进水,水位到达设定值后关闭,然后波轮按正转5秒、反转5秒,正、反转之间停3秒的规律不断循环转动,直至达到设定时间停止,之后打开排水阀放水,水放完后洗衣桶旋转脱水,1分钟后停止并关闭排水阀,洗衣过程结束。要求水位设置不少于高、中、低三档,洗衣时间在3——12分钟范围内可调,以1分钟为单位,排水时间定为1分钟。运动执行器用指示灯模拟,水位用开关模拟,试设计该洗衣机的控制电路。
  洗衣机要求:
1. 画出控制系统的框图,说明系统方案设计的思路、理由或依据;
2. 选择、确定组成控制系统的各个单元,并阐述选择确定的原则或依据;
3. 画出完整的电气原理图,介绍整体电路的工作原理、性能或特点;
4. 如采用单片机控制,给出单片机程序的流程图和清单,说明程序的工作原理。
5. 制作实物电路,验证设计、制作是否正确。
  完整程序:
#include <reg51.h>
#define uint unsigned int
#define uchar unsigned char
uchar gewei,shiwei;
uchar xiyitime,num3;
uchar shuiweizhi,shuiwei;
uint num1,num2;
sbit wei1=P1^0;
sbit wei2=P1^1;
sbit wei3=P1^2;
sbit wei4=P1^3;
sbit shuiwei0=P1^4;        //
sbit shuiwei1=P1^5; //低水位
sbit shuiwei2=P1^6;        //中水位
sbit shuiwei3=P1^7; // 高水位
sbit shezhi_key=P2^0;
sbit qidong_key=P2^1;
//sbit xiyi_key=P2^0;
sbit up_key=P2^2;
sbit down_key=P2^3;
sbit shuifa=P2^4;
sbit paishuifa=P2^5;
sbit zhengzhuang=P2^6;
sbit fanzhuang=P2^7;
sbit tuoshui=P3^6;
sbit zhishiled=P3^7;
//此表为 LED 的字模, 共阴数码管 0-9  -
unsigned char code segtab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //段码控制
unsigned char code segtab1[]={0x40,0x4F,0x24,0x30,0x19,0x12,
0x02,0x78,0x00,0x10};  //共阴0-9带小数点编码
//延时X毫秒函数11.0592Mhz
void delay_xms(uint xms)
{
uint i,j;
for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
//延时X秒函数
void delay_s(uint xs)
{
uint x;
for(x=xs;x>0;x--)
   delay_xms(1000);
}
//延时X分钟函数
void delay_min(uint xmin)
{
uint m,n;
for(m=xmin;m>0;m--)
   for(n=60;n>0;n--)
     delay_s(1);
}
//取操作数的个十位
void chuli(uint num)
{
  gewei=num%10;
  shiwei=(num/10)%10;
}
//按键扫描函数
void keysaomiao()
{
uchar jianzhi;
if(shezhi_key==0)
   {
     delay_xms(10);
         if(!shezhi_key)
          {
            jianzhi++;
                if(jianzhi>2)
                  jianzhi=1;
            while(!shezhi_key);
          }
   }
  if(jianzhi==1)        //水位设置
   {
         if(up_key==0)
           {
             delay_xms(10);
             if(up_key==0)
               {
                     shuiwei++;
                     if(shuiwei>3)
                       {
                         shuiwei=0;
                       }
                     while(!up_key);
                  }
           }
         if(down_key==0)
           {
             delay_xms(10);
             if(down_key==0)
               {
                     if(shuiwei<=0)
                       {
                         shuiwei=3;
                       }
                     shuiwei--;
                     while(!down_key);
                   }
          }
         chuli(shuiwei);
     P0=segtab[gewei];
     wei1=0;
     delay_xms(5);
     wei1=1;  
     P0=segtab[shiwei];
     wei2=0;
     delay_xms(5);
     wei2=1;
         P0=0xFE;
     wei3=0;
     delay_xms(5);
     wei3=1;
     P0=0x9C;
     wei4=0;
     delay_xms(5);
     wei4=1;
   }
if(jianzhi==2)
   {
     if(up_key==0)
       {
         delay_xms(10);
             if(up_key==0)
               {         
             xiyitime++;
                 if(xiyitime>12)
                   {
                     xiyitime=3;                 
                   }                          
                 while(!up_key);
           }
       }
     if(down_key==0)
       {
         delay_xms(10);
             if(down_key==0)
               {          
             xiyitime--;
             if(xiyitime<3)
                   {
                 xiyitime=12;                  
                       }
                 while(!down_key);
           }
      }
     chuli(xiyitime);
     P0=segtab[gewei];
     wei1=0;
     delay_xms(5);
     wei1=1;  
     P0=segtab[shiwei];
     wei2=0;
     delay_xms(5);
     wei2=1;
         P0=0xF7;
     wei3=0;
     delay_xms(5);
     wei3=1;
     P0=0xA3;
     wei4=0;
     delay_xms(5);
     wei4=1;
   }
}
//水位检测子函数
void shuiweijiance()
{
  if(shuiwei0==0)
    {
          delay_xms(10);
          if(shuiwei0==0)
            {
                  shuiweizhi=0;
                  while(!shuiwei0);
                }
        }
  if(shuiwei1==0)
    {
          delay_xms(10);
          if(shuiwei1==0)
            {
                  shuiweizhi=1;
                  while(!shuiwei1);
                }
        }
  if(shuiwei2==0)
    {
          delay_xms(10);
          if(shuiwei2==0)
            {
                  shuiweizhi=2;
                  while(!shuiwei2);
                }
        }
  if(shuiwei3==0)
    {
          delay_xms(10);
          if(shuiwei3==0)
            {
                  shuiweizhi=3;
                  while(!shuiwei3);
                }
        }
}
//初始化函数
void init()
{
   num2=60;
   num3=4;
   shuiweizhi=0;
   xiyitime=3;
   TMOD=0x01;
   //TH0=(65536-45872)/256;//11.0592M晶振
   //TL0=(65536-45872)%256;
   TH0 = 0xB1;//12M晶振
   TL0 = 0xE0;
   EA=1;
   ET0=1;
}
/************主函数**********************/
void main()
{
  uint i,j;
  init();
  P0=0xbf;
  wei1=0;
  wei2=0;
  wei3=0;
  wei4=0;
  while(qidong_key)
     {
       keysaomiao();//水位和洗衣时间设置
         }
   num3=xiyitime-1;
   if(qidong_key==0)
       {
             delay_xms(10);
             if(qidong_key==0)//启动键按下
              {                                                                                                             
            shuifa=0; //开进水阀进水
                    while(shuiwei!=shuiweizhi)//检测是否到达设定水位
                      {
                                shuiweijiance();
                                chuli(shuiweizhi);
                                P0=segtab[gewei];
                                wei1=0;
                                delay_xms(5);
                wei1=1;
                                P0=segtab[shiwei];
                                wei2=0;
                                delay_xms(5);
                wei2=1;
                                delay_xms(5);
                                chuli(shuiwei);
                                P0=segtab[gewei];
                wei3=0;
                delay_xms(5);
                wei3=1;  
                P0=segtab[shiwei];
                wei4=0;
                delay_xms(5);
                wei4=1;
                          }
                        while(i<100)
                          {
                            i++;
                                shuiweijiance();
                                chuli(shuiweizhi);
                                P0=segtab[gewei];
                                wei1=0;
                                delay_xms(5);
                wei1=1;
                                P0=segtab[shiwei];
                                wei2=0;
                                delay_xms(5);
                wei2=1;
                                delay_xms(5);
                                chuli(shuiwei);
                                P0=segtab[gewei];
                wei3=0;
                delay_xms(5);
                wei3=1;  
                P0=segtab[shiwei];
                wei4=0;
                delay_xms(5);
                wei4=1;                            
                          }
                        delay_s(1);                                                         
                        while(j<300)
                          {
                                j++;
                                chuli(shuiwei);                                 
                                P0=segtab[gewei];
                                wei1=0;
                                delay_xms(5);
                                wei1=1;
                                P0=segtab[shiwei];
                                wei2=0;
                                delay_xms(5);
                                wei2=1;
                                chuli(xiyitime);
                                P0=segtab[gewei];
                                wei3=0;
                            delay_xms(5);
                                wei3=1;
                                P0=segtab[shiwei];                                 
                                wei4=0;
                                delay_xms(5);                                 
                                wei4=1;                                                                                                
                           }
                        shuifa=1;
                        zhishiled=0;                       
                    TR0=1;
                    while(!num3==0)
                      {
                            if(num2>=59)
                                  zhengzhuang=0;
                            if(num2==55)
                          zhengzhuang=1;
                                if(num2==52)
                                  fanzhuang=0;
                                if(num2==46)
                                  fanzhuang=1;
                                if(num2==42)
                                  zhengzhuang=0;
                                if(num2==35)
                                  zhengzhuang=1;
                                if(num2==30)
                                  fanzhuang=0;
                                if(num2==23)
                                  fanzhuang=1;
                                if(num2==19)
                                  zhengzhuang=0;
                                if(num2==13)
                                  zhengzhuang=1;
                                if(num2==9)
                                  fanzhuang=0;
                                if(num2==3)
                                  fanzhuang=1;
                      }
                   TR0=0;
                   zhengzhuang=1;
                   fanzhuang=1;
               paishuifa=0;
               while(1)
                {
                          if(shuiwei0==0)
                        delay_xms(10);
                      if(shuiwei0==0)
                       {
                                 P0=0xbf;
                                   wei1=0;
                                   wei2=0;
                                    wei3=0;
                                   wei4=0;
                             tuoshui=0;
                             delay_min(1);
                             tuoshui=1;
                             paishuifa=1;
                                 P0=0;
                                 delay_s(2);
                                 zhishiled=1;
                                 break;
                            }
                   }
            }
          }  
}       
void zhongduangT0() interrupt 1
{
   //TH0=(65536-45872)/256;//11.0592M晶振
   //TL0=(65536-45872)%256;
   TH0 = 0xB1;//12M晶振
   TL0 = 0xE0;
   num1++;
   if(num1>=50)
    {                            
          num2--;
          num1=0;
          if(num2<=0)
            {                  
                  num2=59;
                  num3--;
                  if(num3==0)
                    {
                          TR0=0;
                        }
                }
    }
         chuli(num2);
         wei1=0;
         P0=segtab[gewei];                                 
         delay_xms(4);
         wei1=1;
         wei2=0;
         P0=segtab[shiwei];                            
         delay_xms(4);
     wei2=1;
         chuli(num3);
         wei3=0;
         P0=segtab1[gewei];                                 
         delay_xms(4);
         wei3=1;
         wei4=0;
         P0=segtab[shiwei];
     delay_xms(4);
         wei4=1;
}

流程图

流程图

简单洗衣机控制基于单片机.doc

1.12 MB, 下载次数: 63, 下载积分: 黑币 -5

文件

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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