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

📄 jisuanqi.txt

📁 使用proteus keil等软件,模拟智能洗衣机的工作
💻 TXT
字号:
//----键盘扫描法程序-------
//----用数码管显示相应的键值-----
//P1.0--P1.3接行-------
//P1.4---P1.7接列-------
#include<reg51.h>

unsigned char key,c,k,s;
unsigned int *i,j;
unsigned int anjian=0xff,iob,r3,address,add_data=0x00,temp=0x01;
unsigned char code a[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x.07,0x7f,0x6f}; //0到F的16个键植
unsigned int b[4]={0x01,0x02,0x04,0x08} ;
unsigned int buffer[5]={0x73,0x00,0x00,0x00,0x00};
unsigned int tab[5]={0x00,0x00,0x00,0x00,0x00};
unsigned int add[3]={0x00};
unsigned int flag=0x00;
void cheng();
void updata(unsigned int j);
void buffer_data(void);
void clear_data(void);
void cancell();
void disp();
void clear();
void getkey();
void write();
void sure();
void jia(void);
void chu(void);
void jian(void);
void Delay(unsigned char t);//延时函数

void main(void)
{ 
	clear();
	while(1)
	{    
	           disp();
	           clear();
		       getkey();
               write();
			   Delay(200);
	}
	
}

void Delay(unsigned char t)//延时函数
{
 unsigned char i;
   for(t=0;i<=t;t++)
     for(i=0;i<255;i++);
}



void disp(void)
{   
for(iob=0;iob<4;iob++)
   	{  
		 P2 = 0x0;
         switch(iob)
         {
        	case 0: P0=buffer[0];break;
           	case 1: P0=buffer[1];break;
         	case 2: P0=buffer[2];break;
         	case 3: P0=buffer[3];break;
            default:break;     
          }
		  P2=b[iob];
		  Delay(50);
     }
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
void clear()//////////////////////////////////清屏子程序,
{
	for(iob=0;iob<4;iob++)
	{
		P2=b[iob]  ;    //扫描4个led端口,显示黑屏代码
		 P0=0x00;       
   		Delay(10);
	}
}
bit pkey(void)//判断键的否被按下,通过返回值确定
 {
 P1=0xf0;
  if(P1!=0xf0)
    {
     Delay(100);
      if(P1!=0xf0)
       return 1;
      else 

       return 0;
    }
  else
      return 0;
}//1
void getkey( )

{//1   



 
  while(1)
     {   
	 	if(pkey()==1)
		{
	       P1=0xfe;
	       k=0xfe;
	       for(c=0;c<4;c++)
	       { 
	         s=P1&0xf0;
	         switch(s)
	    	{
		     case 0xe0: key=4*c+0; break; 
		         case 0xd0: key=4*c+1; break;
		      case 0xb0: key=4*c+2; break;
		      case 0x70: key=4*c+3; break;
		      default: break; 
	    	}
			    k=(k<<1)|0x01;
			    P1=k;
	       }//for
	    //if
	  //if((P1&0xf0)==0xf0)
	      switch(key)
	 
	 
	                 {//5
		                case 0x00 :anjian=7;   break;
			            case 0x01 :anjian=8;   break;
			            case 0x02 :anjian=9;   break;
			            case 0x03 :flag=0x03;buffer_data();clear_data();break;
			            case 0x04 :anjian=4;     break;
			            case 0x05 :anjian=5;      break;
			            case 0x06 :anjian=6;       break;
			            case 0x07 :flag=0x04;buffer_data();clear_data();break;
						case 0x08 :anjian=1;     break;
						case 0x09 :anjian=2;     break;
						case 0x0a :anjian=3;     break;
						case 0x0b :flag=0x02;buffer_data();clear_data();break;
						case 0x0c :cancell();     break;
						case 0x0d :anjian=0;     break;
						case 0x0e :sure();     break;
						case 0x0f :flag=0x01;buffer_data();clear_data();break;
	
			            default:anjian=0xff; break;     
	            	 }//5
					 while(pkey()==1);
				}else
					break;
   }
 }

//////////////////////////////////////////////////////////////////////////////////////////////////////
void write()
{  
    	 
         if(anjian != 0xff)
          {///////////////////////////////////////////////////////////////////////////////////////////
            tab[0]=tab[1];
           tab[1]=tab[2];
          	tab[2]=tab[3];
          	tab[3]=anjian;    //扫描按键数据送往数据缓冲区
		   	////////////////////////////////////////////////////////////
          	buffer[0]=a[tab[0]];
          	buffer[1]=a[tab[1]];
          	buffer[2]=a[tab[2]];
		   	buffer[3]=a[tab[3]];//输出数据送到缓冲区
		 
		   /////////////////
		   	address=(tab[0]*8*8*8)+(tab[1]*8*8)+(tab[2]*8)+tab[3];
		   	
          }  
		    anjian=0xff;

          

	
}
void cancell()
{
	        buffer[3]=buffer[2];
          	buffer[2]=buffer[1];
          	buffer[1]=buffer[0];
		   	buffer[0]=0x3f;//输出数据送到缓冲区
		   ///////////////////////////////////////////////////////////////////////////////////////////
		   	tab[3]=tab[2];
          	tab[2]=tab[1];
          	tab[1]=tab[0];
		   	tab[0]=0x00;  //扫描按键数据送往数据缓冲区
		   //////////////////////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////
             

void sure()
{  
//////////////////////////////////////////////
	switch(flag)
                    
	{		      case 0x01 :jia() ; break;
		          case 0x02 :jian(); break;
		          case 0x03 :chu();  break;
		           case 0x04 :cheng();break;  
		          default:anjian=0xff; break; 
	}
}
//////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////
//加法功能键子程序
void jia(void)
{    buffer_data();
     add[2]=add[0]+add[1];
     updata(add[2]);	
}
void jian(void)
{    buffer_data();
	 add[2]=add[0]-add[1];
     updata(add[2]);
}
void chu(void)
{    buffer_data();
     add[2]=add[0]/add[1];
     updata(add[2]);
}
void cheng()
{   buffer_data();
    add[2]=add[0]*add[1];
	updata(add[2]);
}
void updata(unsigned int j)
{  
   tab[3]=j%10;
   j=j/10;
   tab[2]=j%10;
   j=j/10;
   tab[1]=j%10;
   j=j/10;
   tab[0]=j%10;
   ///////////////////////
   buffer[0]=a[tab[0]];
   buffer[1]=a[tab[1]];
   buffer[2]=a[tab[2]];
   buffer[3]=a[tab[3]];//
}

////////////////////////////void updata(unsigned int j)
void clear_data(void)
{
	        tab[0]=0x00;
          	tab[1]=0x00;
          	tab[2]=0x00;
          	tab[3]=0x00;    
		   	////////////////////////////////////////////////////////////
          	buffer[0]=a[tab[0]];
          	buffer[1]=a[tab[1]];
          	buffer[2]=a[tab[2]];
		   	buffer[3]=a[tab[3]];
	
}
////////////////////////////
void buffer_data(void)
{
	        add_data=(tab[0]*10*10*10)+(tab[1]*10*10)+(tab[2]*10)+tab[3];
		   	add[0]=add[1];
		   	add[1]=add_data;
}

⌨️ 快捷键说明

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