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

📄 洗衣机源程序.c

📁 用C语言实现的单片机洗衣机程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*全自动洗衣机程序清单*/
#include<reg51.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
/* LCD address*/
#define w_c_add XBYTE[0x2070] 
#define w_d_add XBYTE[0x2071]
#define r_s_add XBYTE[0x2072]
#define r_d_add XBYTE[0x2073]
/*keybord  address*/
#define COM XBYTE[0x2021]
#define DAT XBYTE[0x2020]
#define IN0 XBYTE[0x2030]       /* 通道0地址        */

/*定义变量*/
static uchar idata ad[8];     /*定义数据存储区      */
uchar bdata status;
sbit busy=status^7;
sbit p10=P1^0;
sbit p11=P1^1;
sbit p12=P1^2;
sbit p13=P1^3;
sbit p14=P1^4;
sbit p30=P3^0;
sbit p31=P3^1;
uint st=0;    
uint dlbjdj;   /*步进电机延时时间*/
uint key;
bit yes=1;    /*倒计时标记位*/
uchar  count;
/*控制字*/
uchar idata plus[10]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09,0x00};
uchar idata minu[10]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x00};
/*显示数据*/
uchar idata number[]={0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30,0x20,0x20,0x20,0x20,0x20,0x20};
uchar code welcom0[]="欢迎使用洗衣机! ";
uchar code welcom1[]="制作者   ";
uchar code welcom2[]="         ";
uchar code welcom3[]="         ";
uchar code menu[]= "主菜单         ";
uchar code menu0[]="请选择工作模式 ";
uchar code menu1[]="1 手动  2 自动 ";
uchar code shuiwei[]="请选择水位     ";
uchar code yiji[]="1 一级           ";
uchar code erji[]="2 二级           ";
uchar code sanji[]="3 返回           ";
uchar code water0[]="上水......    ";
uchar code water1[]="上水完毕      ";
uchar code water2[]="下水......    ";
uchar code water3[]="下水完毕      ";
uchar code xidi[]="剩余时间  秒    ";
uchar code tuoshui0[]="脱水....       ";
uchar code tuoshui1[]="脱水完毕       ";
uchar code jinpao0[]="浸泡.....      ";
uchar code jinpao1[]="浸泡完毕       ";
uchar code piaoxicishu0[]="选择漂洗次数    ";
uchar code piaoxicishu1[]="1.一次  2.二次  ";
uchar code piaoxicishu2[]="3.返回          ";
uchar code shuaigan0[]="甩干......      ";
uchar code shuaigan1[]="甩干完毕        ";
uchar code zidong0[]="自动洗衣中....";
uchar code zidong1[]="自动洗衣完毕  ";
uchar code zidong2[]="欢迎下次使用  ";
uchar code handwash[]="自选工作菜单   ";
uchar code piaoxi0[]="漂洗....       ";
uchar code piaoxi1[]="漂洗完毕       ";
uchar code qiangxi0[]="强洗....        ";
uchar code qiangxi1[]="强洗完毕        ";
uchar code qingxi0[]="轻洗.....        ";
uchar code qingxi1[]="轻洗完毕       ";
uchar code ruoxi0[]="弱洗......      ";
uchar code ruoxi1[]="弱洗完毕        ";
uchar code xidicaidan[]="洗涤强度菜单   ";
uchar code fangshi0[]="1 强轻弱 2轻弱   ";
uchar code fangshi1[]="3 返回          ";
uchar code space[]="                   ";
uchar code list21[]="1 加水 2浸泡     ";
uchar code list22[]="3 洗涤 4漂洗     ";
uchar code list23[]="5 甩干 6返回     ";
/*子函数*/
void initial();
void run();
void Welcome();
void mainmenu();
void mainlyinterface();
void IntensitySelectMenu();
void washtime();
void choose();
void delay(uint n);
void dlms(uint n);
void ctrl(bit cf,uint n);
void lcd_busy(void);
void clear();
void display(uint m,uchar *p);
void display1(uchar time);
uint getkey();                  /*键盘函数*/
uint ifkey(void);        
void delay1(void);
void delaymm(void);
void adc0809 (uchar idata *x);  /* ADC0809采样函数   */
void adc0809A(uchar idata *x);


void delay1()                  /*延时程序*/
{   int x=100000;
    while(x--);
}

void T0_srv(void) interrupt 1 using 2  /*T0中断程序*/
  {
    TH0=-25000/256;
    TL0=-25000%256;
    count++;
    if(count==10)
     {count=0;
      yes=1;
   	 }
   	 while(!p30);
  }
  
void stop() interrupt 2 using 1
{   
        st=1;	
}

void main()           /*主程序入口*/
{
      initial();
	  run();
}
/*单片机功能子函数*/

void initial()        /*初始化*/
{   TH0=-25000/256;
    TL0=-25000%256;
	TMOD=0X01;
    ET0=1;
    TR0=1;
    EA=1;
	IT0=1; 
	EX0=1;
	Welcome();	
    delay(2);
    mainmenu();
}

void run()            /*运行函数*/
{   uchar  sum=0;
	uint getkey1;
	uint getkey2;
	uint getkey3;
	uint getkey4;
	uint flag1=1;
	uint flag2=1;
	uint flag3=1;
	uint flag4=1;
	while(1)
	{   
	    while(INT0) {;}
	    key=getkey();
		switch(key)
		  {
/*手动操作*/ case 1:{
		              clear();
		  	          mainlyinterface();
		  	          while(flag1) 
		  	           {
		  	             getkey1=getkey();
		  	             switch(getkey1)
		  	             {
		  		  	      
 /*设定水位并上水*/	              case 1:{ 	       			 
                                       clear(); 
			                           choose();
			                           while(flag4)
			                            {	
			    	                      getkey4=getkey();
			                                  switch(getkey4)
			                                    {
				                                  case 1:{
				        	                             p31=0;
				        	                             clear();
				                                         display(0x90,water0);
				                                         delay(2);
				                                         while(!p31)          /*上水检验*/
			                                             {adc0809(ad);}				                 
				                                          clear();
				                                          display(0x90,water1);
				                                           delay(2);
				                                           choose();
				                                           break;	
			  	                                           }
	  		                                      case 2:{ p31=0;
	  		             	                               clear();
				                                           display(0x90,water0);
				                                           delay(2);
				                                           while(!p31)
			                                               {adc0809(ad);}				                 
				                                           delay(3);
				                                           clear();
				                                           display(0x90,water1);
				                                            delay(2);
				                                           choose();
				                                            break;	
			  	                                            }
	  		                                      default:{ 	 flag4=0;
						                                      mainlyinterface();
						                                          break;	
						                                   }
  		                                                 }
	                                                    }
	                                                   }      
	  		
                        /*浸泡选择*/	  	          case 2:{     
	                                                  clear();         
					                                  display(0x80,jinpao0);
		         	                                  while(sum<10)
		      	                                       {
			                                             display1(sum);
			                                             while(!yes);
			                                             yes=0;
			                                             sum++;
		                                                 }
		                                                 sum=0;		    
			                                             clear();
			                                             display(0x90,jinpao1);
			                                             delay(2);
			                                             clear();
				                                         mainlyinterface();
				                                         break;
				                                       }

/*选择洗涤强度*/	case 3:{    
				IntensitySelectMenu();
				while(flag2) 
				{	
				getkey2=getkey();
				switch(getkey2)
					{
					 case 1:{
					 	     clear();
						   	display(0x80,qiangxi0);/*显示强度*/
		                    dlbjdj=40;
		                    while(sum<10)
			              { 
			                display1(sum);         /*倒计时显示*/
			                while(!yes)
			               {ctrl(0,10);
		                     ctrl(1,10);}
			                 yes=0;
			                 sum++;
		                   }
		                      sum=0;	
			                  clear();
			                  display(0x90,qiangxi1);
			                  delay(2);
			                  clear();
			
			                  sum=4;
	                          display(0x80,qingxi0);
			                  dlbjdj=55;
				              while(sum<10)
			              { 
			                 display1(sum);
			                 while(!yes)
			                {ctrl(0,7);
		                     ctrl(1,7);}
			                 yes=0;
			                 sum++;
		                    }
		                     sum=4;	
			                 clear();
			                 display(0x90,qingxi1);
			                 delay(2);
		                     clear();
		    	
		                     display(0x80,ruoxi0);
		                     dlbjdj=70;
		    	             while(sum<10)
			                { 
			                  display1(sum);
			                  while(!yes)
			                 {ctrl(0,7);
		                      ctrl(1,7);}
			                   yes=0;
			                   sum++;
		                     }
		                    sum=0;	 
			                clear();
			                display(0x90,ruoxi1);
			                delay(2);
			                clear();	   
						    IntensitySelectMenu();
						    break;
					        }
		 		case 2:{      sum=4;	
					          display(0x80,qingxi0);
			                  dlbjdj=55;
				              while(sum<10)
			               { 
			                 display1(sum);
			                 while(!yes)
			                {ctrl(0,7);
		                     ctrl(1,7);}
			                 yes=0;
			                 sum++;
		                    }
		                     sum=4;	
			                 clear();
			                 display(0x90,qingxi1);
			                 delay(2);
		                     clear();
		    	
		                     display(0x80,ruoxi0);
		                     dlbjdj=70;
		    	             while(sum<10)
			                { 
			                  display1(sum);
			                  while(!yes)
			                 {ctrl(0,6);
		                      ctrl(1,6);}
			                   yes=0;
			                   sum++;
		                     }
		                    sum=4;	 
			                clear();
			                display(0x90,ruoxi1);
			                delay(2);
			                clear();	   
						IntensitySelectMenu();
						break;
						}
				default:{ 
						flag2=0;
						mainlyinterface();
						break;	
						}
 					}
				}  
 				break;
				}
				
/*选择漂洗次数*/	case 4:{	
			             washtime();
			             while(flag3)
			            {getkey3=getkey();
			             delay(1);
			             switch(getkey3)
			            {
			     	     case 1:{
				         	p31=0;
			                clear();
		                 	display(0x90,water0);
			                delay(3);
			                while(!p31)
			                {adc0809(ad);}		
			                clear();
			                display(0x90,water1);
			                delay(3);
			                clear();	
				         	
				         	dlbjdj=50;
			                display(0x80,piaoxi0);	        	            
	        	            while(sum<10)
			              { 
			                display1(sum);
			                while(!yes)
			               {ctrl(0,10);
		                    ctrl(1,10);}
			                yes=0;
			                sum++;
		                   }
		                     sum=0;	 
		                 	clear();
			                display(0x90,piaoxi1);
			                delay(2);			
			                clear();
				            
				            p31=1;
			                display(0x80,water2);	
			                while(p31)
			                {adc0809A(ad);}	
			                 p31=1;
			                clear();
			                display(0x80,water3);	
			                delay(2);			            
				            mainlyinterface();
				            break;	
				          }
				          
		     /*       case 2:{              
				            p31=0;
			                clear();
		                 	display(0x90,water0);
			                delay(3);
			                while(!p31)
			                {adc0809(ad);}		
			                clear();
			                display(0x90,water1);
			                delay(3);
			                clear();	  	
				         	dlbjdj=50;
			                display(0x80,piaoxi0);	        	            
	        	            while(sum<10)
			              { 
			                display1(sum);
			                while(!yes)
			               {ctrl(0,10);
		                    ctrl(1,10);}
			                yes=0;
			                sum++;
		                   }
		                     sum=0;	 
		                 	clear();
			                display(0x90,piaoxi1);
			                delay(2);			
			                clear();
				            
				            p31=1;
			                display(0x80,water2);	
			                while(p31)
			                {adc0809A(ad);}	
			                 p31=1;
			                clear();
			                display(0x80,water3);	

⌨️ 快捷键说明

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