找回密码
 立即注册

QQ登录

只需一步,快速开始

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

基于51单片机的洗衣机程序

[复制链接]
ID:444545 发表于 2018-12-11 23:20 | 显示全部楼层 |阅读模式
题目:设置过程,有一个水位选择按键,选择6个水位之一,相应的有六个水位检测点,仿真时用六个开关表示。有一个程序选择按键,选择8个程序之一。一个启动/停止键,按照所选程序自动洗衣。(2)洗衣过程,模拟完成其中两个自动洗衣程序——标准洗和轻柔洗的执行过程。打开进水电磁阀,(电磁阀用一个LED灯模拟),人工闭合开关表示水位到了该开关代表的水位检测器,关闭进水电磁阀,然后电机(proteus里面有)反复正转、反转,并用PWM波控制电机转速,轻柔洗转速慢,换向快,甩干转速最快......,直到洗完。为缩短演示时间,应把各步骤时间缩短。
程序
#include <REG51F.H>
//#include<reg52.h>
//#include <math.h>
//#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit sw=P1^3;
sbit ms=P1^5;
sbit qt=P1^7;
sbit aa=P1^6;
sbit bb=P1^4;
sbit cc=P0^7;
sbit p0_5=P0^5;
sbit p0_4=P0^4;
sbit p0_3=P0^3;
sbit p0_2=P0^2;
sbit p0_1=P0^1;
sbit p0_0=P0^0;
uint g,m,l;
uchar i,j,k;

void delay(void)
{
        for (g=0;
        g<1000;
        g++);
}

void init_T2(void)        
{
        T2CON =0;
        T2MOD =0;
        RCAP2H =(65536-50000)/256;
        RCAP2L =(65536-50000)%256;
        TH2 =(65536-50000)/256;
        TL2 =(65536-50000)%256;
        ET2 = 1;
        PT2 = 1;
        TR2 = 1;
}

void swxz(void)  
{
        if(sw==0)
        {
                delay();
                if(sw==0)
                i++;
                if(i==7)
                i=1;
                while(sw==0);
        }
        switch(i)
        {
                case 1:{p0_0=0;p0_1=1;p0_2=1;p0_3=1;p0_4=1;p0_5=1;}
                break;
                case 2:{p0_0=1;p0_1=0;p0_2=1;p0_3=1;p0_4=1;p0_5=1;}
                break;
                case 3:{p0_0=1;p0_1=1;p0_2=0;p0_3=1;p0_4=1;p0_5=1;}
                break;
                case 4:{p0_0=1;p0_1=1;p0_2=1;p0_3=0;p0_4=1;p0_5=1;}
                break;
                case 5:{p0_0=1;p0_1=1;p0_2=1;p0_3=1;p0_4=0;p0_5=1;}
                break;
                case 6:{p0_0=1;p0_1=1;p0_2=1;p0_3=1;p0_4=1;p0_5=0;}
                break;
                default:break;
        }
}

void swjc(void)  
{
        switch(i)
        {
                case 1:{if(P3==0x03)
        {EA=1;k=4;}}
                break;
                case 2:{if(P3==0x07)
        {EA=1;k=4;}}
                break;        
                case 3:{if(P3==0x0f)
        {EA=1;k=4;}}
                break;        
                case 4:{if(P3==0x1f)
        {EA=1;k=4;}}
                break;        
                case 5:{if(P3==0x3f)
        {EA=1;k=4;}}
                break;        
                case 6:{if(P3==0x7f)
        {EA=1;k=4;}}
                break;
                default:{EA=0;P3=0xff;};
        }
}
               
void qdtz(void)  
{
        if(qt==0)
        {
                delay();
                if(qt==0)
                k++;        
                while(qt==0);
        }
        switch(k)
        {
                case 2:cc=0;
                break;
                case 5:{aa=1;bb=1;EA=0;i=10;j=10;}
                break;               
                default:cc=1;
        }
}

void biaozhun(void)  
{
        qdtz();
        swjc();
}

void qita(void)  
{}
        
void msxz(void)  //Ä£ê½Ñ¡Ôñoˉêy
{
        if(ms==0)
        {
                delay();
                if(ms==0)
                {
                        j++;
                        if(j==9)
                        j=1;
                }
                while(ms==0);
        }
        switch(j)
        {
                case 1:{P2=0xfe;biaozhun();}
                break;
                case 2:{P2=0xfd;qita();}
                break;
                case 3:{P2=0xfb;qita();}
                break;
                case 4:{P2=0xf7;qita();}
                break;
                case 5:{P2=0xef;qita();}
                break;
                case 6:{P2=0xdf;qita();}
                break;
                case 7:{P2=0xbf;qita();}
                break;
                case 8:{P2=0x7f;qita();}
                break;
                default:P2=0xff;
        }
}

void main(void)  //Ö÷oˉêy
{
        i=0,j=0,k=1,l=1,m=0,aa=1,bb=1,cc=1;
        init_T2();

        while(1)
        {
                swxz();
                msxz();
                if(m==1)
                {
                        aa=1;
                        bb=0;
               
                }
                if(m==40)
                {
                        l++;
                        aa=~aa;
                        bb=~bb;
                        m=2;
                                
                }
                if(l==10)
                {
                        i=7;
                        EA=0;
                        aa=1;
                        bb=1;
                }

        }
}

void dingshi(void) interrupt 5  
{
        m++;
        TF2=0;
}

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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