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

📄 xiyiji.c

📁 能实现4种洗衣程序选择 标准洗衣 经济洗衣 单独洗衣 单独脱水 选择 高低水位 强弱洗 是否开启浸泡功能 还有脱水程序选择 3、5分间歇脱水 3、5分长脱水四种
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <initial.h>

//-----初始化--------------------------------------------------------------------------
void init(void)	  
{
	WDT_CONTR=0x00; //关闭看门狗
	AUXR=0x01;	    //关闭ALE输出
	AUXR1=0x00;	    
	EA=1;			 //开中断
	ET1=1;
	ET0=1;
	TMOD=0x11;
	TH1=0x3c, TL1=0xb0;
}
//-----1ms延时程序----------------------------------------------------------------------
void delay_ms(unsigned char timedata)
{
 	unsigned char aa=250,cc=0;
	cc=timedata;
	while(cc--)
	{
		while(--aa);
	}
}
void delay(unsigned char timedata)
{
    unsigned char t1;
	unsigned long t2;
	for(t1=0;t1<timedata;t1++)
	{
	    for(t2=0;t2<1000;t2++)			//---定时125/8ms(15625us)
		{}							 
	}
}
void sing()
{
    flag=1;
	TH0=BTH0;
	TL0=BTL0;
	if(BTH0!=0||BTL0!=0)
	TR0=1;
	else TR0=0;
	delay(time2);
	flag=0;
}
//--我是奥运小福娃歌曲编码-------------------------------------------------------------------------------------
unsigned char code gqbm[]={
                           1,5,2,   1,8,2,   1,8,5,  
						   1,5,2,   1,1,2,   1,1,5,
						   1,5,2,   1,8,2,   2,1,2,   1,8,2,
						   1,10,7,
						   1,5,2,   1,8,5,   2,1,2,
						   1,10,5,  1,8,5,
						   1,5,2,   1,1,2,   1,8,2,   1,5,2,
						   1,3,7,
						   1,5,2,   1,8,2,   1,8,5,
						   1,5,2,   1,1,2,   1,1,5,
						   1,5,2,   1,8,2,   2,1,2,   1,10,2,
						   1,10,7,
						   1,8,2,   2,1,2,   2,1,2,   1,10,2,
						   1,8,2,   1,10,2,  1,5,5,
						   1,3,2,   1,1,2,   1,3,2,   1,5,2,
						   1,8,6,   1,10,2,  
						   1,8,2,   1,5,2,   1,3,2,   1,5,2,
						   1,1,7,   
						   0,0,5,   0,0,5,
 						   9,9,9
						  };

//-----数码管位选----------------------------------------------------------------------
void WX_SM(unsigned char c,unsigned char b,unsigned char a)
{
	a0=a;
	a1=b;
	a2=c;
}
//-----led数据传送---------------------------------------------------------------------
void sendbyte(unsigned int num)
{    
		 unsigned char c;
		 send=0; 																	
         for(c=0;c<16;c++)
         {
             CLK=0;
             DAT=num&0x0001;
             CLK=1;
             num>>=1;
         }
		 send=1;
}
//-----键盘扫描------------------------------------------------------------------------	
void key_saomiao(void)
{
  key3=0;key4=1;
  if(key5==0) s1_biao=0;
  if(key6==0) s2_biao=0;
  if((key5==1)&&(key6==1)) 
  {
    key3=1;key4=0;
	if(key5==0) s3_biao=0;
	if(key6==0) s4_biao=0;
	if((key5==1)&&(key6==1))
	{
	  key3=1;key4=1;
	}
	else  key_que(); 
  }
  else  key_que();	 
}
//-----去抖动,是否有键按下-------------------------------------------------------------	
void key_que(void)
{
    switch(KeyState)
    {
        case 0:
            if((key5==0)||(key6==0))  //有键
            {
                KeyState=1;
				delay_ms(20);
            }
            break;
        case 1:
            if((key5==0)||(key6==0))  //有键
            {
                KeyState=2;
				flag=1;
                BTH0=0xfe;						  
			    BTL0=0xf4;
			    TH0=0xfe;
			    TL0=0xf4;
			    key_han();
				TR0=1;
			    delay(1);
			    TR0=0;
				flag=0;
				delay_ms(100);
            }
            else
            {
                KeyState = 0;
            }
            break;
        case 2:
            if((key5==0)||(key6==0))  //有键
            {
				KeyState=3;
				flag=1;
                BTH0=0xfe;						  
			    BTL0=0xf4;
			    TH0=0xfe;
			    TL0=0xf4;
			    key_han();
			    TR0=1;
			    delay(1);
			    TR0=0;
				flag=0;
                delay_ms(50);
            }
            else
            {
                KeyState = 0;
            }
            break;
        case 3:
            if((key5==0)||(key6==0))  //有键
            {
				flag=1;
                BTH0=0xfe;						  
			    BTL0=0xf4;
			    TH0=0xfe;
			    TL0=0xf4;
			    key_han();
				TR0=1;
			    delay(1);
			    TR0=0;
				flag=0;
				delay_ms(200);
            }
            else
            {
                KeyState = 0;
            }
            break;
        default:
            break;
    }
}
//-----读取键值--------------------------------------------------------------------------
void key_han(void)
{
   if(key3==0)
   {
     if((key5==0)&&(s1_biao==0))
	 {
	    s1_biao=1;
		cout=1;
	 }
	 if((key6==0)&&(s2_biao==0))
	 {
	    s2_biao=1;
		cout=2;							  //2键表示增加
	 }
   }
   if(key4==0)
   {
      if((key5==0)&&(s3_biao==0))
	  {
	   	s3_biao=1;
		cout=3;							 //3键表示减少
	  }
	  if((key6==0)&&(s4_biao==1))
	  {
	    s4_biao=1;
		cout=4;
	  }
   }
}
//-----进水程序------------------------------------------------------------------------------
void xy_jinshui(void)
{
      jinsf=0;		  //进水阀打开
	  m1=0,m0=0,s1=2,s0=0;
	  TR1=1;				//定时器1开始进水20分钟计时
	  while(flag!=1)	 //等待进水
	  {
	    if(((k==4)&&(gaos==0)&&(dis==0)&&(pais==0))||((k==5)&&(gaos==1)&&(dis==0)&&(pais==0)))		  //判断是否达到设置高低水位
	    {
	  	   TR1=0;		  //达到设置水位,关闭定时器T1,关闭进水阀
		   jinsf=1;
		   flag=1;
		}	  		  
		while(dsd==1)    //当20分钟内还未到达设置水位,则声光报警
		{
		   m1=0,m0=0,s1=20,s0=0;
		   TR1=1;
		   errcode=1;				  //设置故障代码:1表示在20分钟内未注入设定的水量
		   alarm();
		   key_saomiao();			
		   if(cout==4) dsd=0,stop=0;		//4键关闭报警
		   		//报警20分钟若无任何人为动作,则自动关机
	    }
		led();
	  }
	  flag=0;
	  P0=0xff;
}
//-----洗涤程序------------------------------------------------------------------------------------------
void xy_xidi(void)
{
	      while(q!=0)	   
	      {
		     q--;
			 if(qr==6)				//当判断为强洗时
		     {
		         zhengz=0;
		         delay_s(4);	   //正转4s
		         zhengz=1;
		         delay_s(1);	  //停止1s
		         fanz=0;
		         delay_s(4);  //反转4s
		         fanz=1;
		         delay_s(1);	    //停止1s
		      }
		      if(qr==7)				//当判断为弱洗时
		      {
		         zhengz=0;
		         delay_s(3);	   //正转3s
		         zhengz=1;
		         delay_s(2);	  //停止2s
		         fanz=0;
		         delay_s(3);	  //反转3s
		         fanz=1;
		         delay_s(2);	    //停止2s
		      }   
		    }
}
//-----排水程序-------------------------------------------------------------------------
void xy_paishui(void)
{
		    while(flag!=1)
		    {
			  if((gaos==1)&&(dis==1)&&(pais==1))		//排水是否完成
			  {
			      TR1=0;
			      flag=1;
			  }
			  while(dsd==1)    //当20分钟内还未到达设置水位,则声光报警
		      {
				 TR1=1;
		         errcode=2;			  //设置故障代码:2表示在20分钟内洗涤水未排干净
			     alarm();
		         key_saomiao();			
		         if(cout==4) dsd=0;		//4键关闭报警
		         if(gj==1)   stop=0;		//报警20分钟若无任何人为动作,则自动关机
	          }
		      led();
		    }
			flag=0;
}
//-----间歇脱水----------------------------------------------------------------------------------
void tuoshui_jianxie(void)
{
			   zhengz=0;
		       delay_s(4);   
			   zhengz=1;
			   delay_s(3);
												
}
//-----衣物离心修正函数-------------------------------------------------------------------------------------------------------
void xiuzheng(void)
{
 	     zhengz=0;
		 paisf=1;
		 xy_jinshui();
	     m1=0,m0=1,s1=0,s0=0;
	     TR1=1;	 
		 while(dsd!=1)	   //强洗涤1分钟
		 {
		         zhengz=0;
		         delay_s(4);	   //正转4s
		         zhengz=1;
		         delay_s(1);	  //停止1s
		         fanz=0;
		         delay_s(4);  //反转4s
		         fanz=1;
		         delay_s(1);	    //停止1s
		 }
		 dsd=0;
}
//-----报警子函数------------------------------------------------------------------------------------------
void alarm(void)
{
	P0=led_code[errcode];	   //报警同时显示故障代码
	WX_SM(1,1,1);
	senddata=tab[15];
	senddata=senddata&lastdata; 
	sendbyte(senddata);
    delay_ms(10);
	q=80;
	while(q--!=0)
	{
	    feng=0;delay_ms(1);
		feng=1;delay_ms(1);
	}
	flag=0;
	P0=0xff;
	senddata=tab[16];
	senddata=senddata&lastdata; 
	sendbyte(senddata);
	delay_ms(200);
}
//-----显示子函数-------------------------------------------------------------------------------------------
void led(void)
{
        P0=led_code[s0];			//倒数计时个位
	    WX_SM(1,1,1);
	    delay_ms(2);
	    P0=led_code[s1];
	    WX_SM(1,1,0);
	    delay_ms(2);
    	P0=led_code[m0];		   //倒数计时分钟位
    	WX_SM(1,0,1);
    	delay_ms(2);
    	P0=led_code[m1];
	    WX_SM(1,0,0);
	    delay_ms(2);
		P0=0xff;
}
void int_0(void) interrupt 0 using 1
{
    

⌨️ 快捷键说明

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