全自动洗衣机程序

2019-07-16 05:23发布

求大神看看这段程序有什么问题?仿真不出来啊



#include<reg51.h>
#include<math.h>
//****************************//
#define uchar unsigned char
#define uint unsigned int
//****************************//
sbit key_on = P3^5;           // 开始按键
sbit s1=P3^0;  //   L298的In 1
sbit s2=P3^1;  //   L298的In 2
//****************************//
sbit led_in = P0^0;                         //            进水指示灯
sbit led_xi = P0^1;                    //      洗涤指示灯
sbit led_out = P0^2;                    //      排水指示灯
sbit led_piao = P0^3;                //      漂洗指示灯
sbit led_tuo = P0^4;            //      脱水指示灯
sbit led_over = P0^5;           //      洗衣结束指示灯
sbit ena = P3^2;                      //           洗衣电源控制开关
//******************************//
void delay(uint i);     //        延时子程序
void in();        //        进水子程序
void out();              //        出水子程序
void xi();              //        洗涤子程序
void piao();      //    漂洗子程序
void tuo();       //        脱水子程序
void over();      //    结束子程序
void SEG_display();         // 显示时间子程序
void key_scan();   //   按键扫描子程序
void on();         //  工作on处理子程序
//******************************//
char sec =0;                  //  时间秒
char min =0;                  //  时间分
uchar t=0;                      //  中断计数
uchar flag=0;                  //  洗衣机工作状态标志
uchar quan = 0;       //  正反转计数
//              进水子程序
//*********************************//
uchar code num[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//******************************//
//      工作on处理子程序
//********************************//
void on()
{       
   TMOD=0x01;
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
        EA=1;
        ET0=1;
        TR0=1;
        P0 = 0xff;
        if(flag == 0)
            in();
        if(flag == 1)
            xi();
        if(flag == 2)
            out();
        if(flag == 3)
            piao();
        if(flag == 4)
            tuo();
}
//*********************************//
void in()
{       
        P0 = 0xff;
        led_in = 0;
        ena=0;
        s1 = 0;
        s2 = 0;
        min = 0;
        sec = 9;
}
//                洗衣子程序
//*********************************//
void xi()
{         
     P0 = 0xff;
          led_xi = 0;
          ena=1;
          s1 = 1;
          s2 = 0;
          min = 1;
          sec = 0;
          quan = 0;
}
//                 排水子程序
//*********************************//
void out()
{       
        P0 = 0xff;
        led_out = 0;
        ena=0;
        s1 = 0;
        s2 = 0;
        min = 0;
        sec = 5;
}
//           漂洗子程序
//*********************************//
void piao()
{         
        P0 = 0xff;
        led_piao = 0;
        ena=1;
        s1 = 1;
        s2 = 0;
        min = 0;
        sec = 30;
        quan = 0;
}
//                脱水子程序
//*********************************//
void tuo()
{       
        P0 = 0xff;
        led_tuo = 0;
        ena=1;
        s1 = 0;
        s2 = 1;
        min = 0;
        sec = 20;
}
//                 结束子程序
//*********************************//
void over()
{
        P0 = 0xff;
        ena=0;
        s1=0;
        s2=0;
        led_over = 0;
        EA=0;
}
//*********************************//
//        显示子程序
//*********************************//
void SEG_display()
{
        P1=0x01;
        P2 = num[min/10];
        delay(10);
        P1 = 0x02;
        P2 = num[min%10];
        delay(10);
        P1 = 0x04;
        P2 = num[sec/10];
        delay(10);
        P1 = 0x08;
        P2 = num[sec%10];
        delay(10);

}
//                   按键扫描子程序
//*********************************//
void key_scan()
{
   P3=0xff;
        if(key_on == 0)
        {
                delay(5);
                if(key_on == 0)
                {
                        while(!key_on);
                        on();
                }
        }
}
//     延时子程序
//****************************//
void delay(uint i)
{
        uint x,y;
        for(x=i;x>0;x--)
        { for(y=120;y>0;y--);
        }
}

//       主函数
//*********************************//
void main()
{
         led_in=0;
    while(1)
        {
                SEG_display();
           key_scan();
        }
}
//            定时器0中断处理程序
//**********************************//
void timer0(void) interrupt 1
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
         t++;
    if(t==20)
        {       
                 t = 0;
                sec--;
                if((flag==1)||(flag==3))
                {
                    quan++;
                        switch(quan)
                         {
                                 case 1: s1=1;s2=0;break;
                                case 10:s1=0;s2=0;break;
                                case 15:s1=0;s2=1;break;
                                case 25:s1=0;s2=0;break;
                                default:;
                         }
             if(quan==30)
                        {
                           quan=0;
                        }

         //**********************************//
                if((sec==0)&&(min!=0))
                {
                  min--;
                  sec=59;
                 }
          //**********************************//
                if((sec<0)&&(min==0)&&(flag==0))         //进水结束
                {         
                         flag=1;
                }
         //**********************************//
                if((sec<0)&&(min==0)&&(flag==1))   //洗涤结束
                {         
                     flag=2;
                }
                 //**********************************//
                if((sec<0)&&(min==0)&&(flag==2))         //出水结束
                {         
                         flag=3;
                }
         //**********************************//
                if((sec<0)&&(min==0)&&(flag==3))   //漂洗结束
                {         
                flag=4;
                }
       
         //***********************************//洗衣结束
                if((sec<0)&&(min==0)&&(flag==4))
                {         
                    sec=0;
                         over();
           }
                }
        }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。