⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c程序.txt

📁 基于89C51单片机的洗衣机控制器
💻 TXT
字号:
#include "at89x51.h"
unsigned char data flag1,mode=0,m1=0;
unsigned int m=0,flag;
void disp();
void ms();
void T();
unsigned char code ddisp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//段显0123456789,P0口
unsigned char code wdisp[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//位选,P2口
void time0(void ) interrupt 1 using 1
{TH0=0xb3;
TL0=0x70;
flag++;
}                                  //20ms定时
void time1(void ) interrupt 3 using 3
{TH1=0xb3;
TL1=0x70;
flag1++;
}                                  //20ms定时
void main( void )                   //主函数。
 {
 TMOD=0x11;
 EA=1;
 ET0=1;
 ET1=1;
 PT1=1;
 TH0=0xb3;
 TL0=0x70;
 TH1=0xb3;
 TL1=0x70;
 flag=flag1=0;
while(1)
{T();

while((mode==1)&&(m!=0))                  //标准
{while((flag<=150)&&(TR1==1)) {P1_1=0;P1_2=1;disp();T();}       //run 3s 正转
 flag=0;
 while((flag<=50)&&(TR1==1))  {P1_1=1;P1_2=1;disp();T();}      //stop 1s 
 flag=0;
 while((flag<=150)&&(TR1==1)) {P1_2=0;P1_1=1;disp();T();}       //run 3s 反
 flag=0;
 while((flag<=50)&&(TR1==1))  {P1_2=1;P1_1=1;disp();T();}      //stop 1s
 flag=0;
 }

while((mode==2)&&(m!=0))                     //轻柔
{while((flag<=50)&&(TR1==1))   {P1_1=0;P1_2=1;disp();T();}       //run 1s 正转
 flag=0;
 while((flag<=100)&&(TR1==1))  {P1_1=1;P1_2=1;disp();T();}       //stop 2s 
 flag=0;
 while((flag<=50)&&(TR1==1))   {P1_2=0;P1_1=1;disp();T();}       //run 1s 反转
 flag=0;
 while((flag<=100)&&(TR1==1))  {P1_2=1;P1_1=1;disp();T();}       //stop 2s
 flag=0;
}

while((mode==3)&&(m!=0))                        //强洗
{P1_1=0;disp();T();}

}
 }






void disp()
{
unsigned char k,S,S1,S2,M,M1,M2;
P2=wdisp[0];                       //选中位
S=m%60;
S1=S%10;                           //数制转换
for(k=0;k<50;k++)
 {P0=ddisp[S1];}                   //显示段码
P0=0x00;                           //关显示
if(P2_7==0)
  { ms();
  if(P2_7==0)
   {do{}while(P2_7==0);             //键盘除颤判断s5的状态
   mode=2;                          //方式2 弱洗
   P1_3=0;
   P1_4=1;
   P1_5=1;}                         
  }
 
P2=wdisp[1];
S2=(S-S1)/10;
 for(k=0;k<50;k++)
 {P0=ddisp[S2];} 
P0=0x00;
if (P2_7==0)
    { ms();
	 if(P2_7==0)
     {do{}while(P2_7==0);          //键盘除颤判断s4的状态 
      mode=1;                      //中洗
      P1_3=1;
      P1_4=0;
      P1_5=1;}    
    } 
P2=wdisp[2];
M=((m-S)/60)%60;
M1=M%10;
 for(k=0;k<50;k++)
 {P0=ddisp[M1]+0x80; }             //显示小数点
P0=0x00;
if (P2_7==0)
    { ms();
	   if(P2_7==0)
        {do{}while(P2_7==0);            //键盘除颤判断s3的状态
          mode=3;
          P1_3=1;
          P1_4=1;
          P1_5=0;}                      //强洗
    }

P2=wdisp[3];
M2=(M-M1)/10;
for(k=0;k<50;k++)
{P0=ddisp[M2];} 
P0=0x00;
if ((P2_7==0)&&(TR0==0)&&(TR1==0))
    { ms();
	   if((P2_7==0)&&(TR0==0))
        {do{}while(P2_7==0);            //键盘除颤判断s3的状态
         m1++;
         if(m1==60) m1=0;}              //总时间加1
    }
P2=wdisp[4];
P0=0x00;
if ((P2_7==0)&&(TR0==0)&&(TR1==0))
    { ms();
	   if((P2_7==0)&&(TR0==0))
        {do{}while(P2_7==0);            //键盘除颤判断s3的状态
        TR1=1;
        TR0=1;}                         //启动
    }
P2=wdisp[5];
P0=0x00;
if((TR0==0)&&(TR1==0)) m=60*m1;
}


void ms()                        //除颤程序
{unsigned int n;
for(n=0;n<1000;n++)
{ } 
}


void T()
{do{disp();}while(flag1<50);       // 1s 定时
 if(m==0) 
 {flag=flag1=0;
 TH0=0xb3;
 TL0=0x70;
 TH1=0xb3;
 TL1=0x70;
 P1_1=1;
 P1_2=1;
 TR0=0;
 TR1=0;
 m=m1=0;
 }                                  //时间到关定时器T0,T1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -