www.pudn.com > PLC.rar > Read_Key.c


/* DA is key's high 4 bits   
   if (DA == 0)  
         high(key) = 1 
   else  
         high(key) = 0 
 
   if (Inc == 0) 
         low(key) = 1 
   if (Dec == 0) 
         low(key) = 2 
   if (Wri == 0) 
         low(key) = 3 
*/ 
 
#include "reg51.h" 
 
void delay(unsigned int);  
bit b_inc = 0,b_dec = 0,da_first = 0; 
sbit Inc = P1^0; 
sbit Dec = P1^1; 
sbit DA  = P1^2; 
sbit Wri = P3^2; 
unsigned char i; 
 
unsigned char Read_Key(unsigned char *d,unsigned char *pc) 
{ 
   unsigned char key; 
   P1 = P1 | 0x0f; 
   if (Inc == 0) 
   {   
       delay(10); 
	   if (Inc ==0) 
	   {    
  	       if (b_inc == 0) 
		   {   
		      delay(300); 
			  b_inc = 1; 
		   } 
		   if (DA == 0) 
      	   {    
		      key = 0x11;      // if (DA == 0) high(key) = 2;  
 			  (*pc)++; 
		   } 
		   else 	          //if (Inc == 0) low(key) = 1;   
		   {    key = 0x01; 
		        (*d)++; 
		   } 
           for ( i = 0;Inc == 0 && i < 60;i++) 
	            delay(1); 
	   } 
    } 
	else if (Dec == 0) 
    {  
       delay(10); 
	   if (Dec == 0) 
	   {  
	       if (b_dec == 0) 
		   { 
		      delay(300); 
			  b_dec = 1; 
		   } 
		   if (DA == 0) 
		   {     
		       key = 0x12; 
			   (*pc)--; 
		   } 
		   else 
		   {   
               key = 0x02; 
			   (*d)--; 
		   } 
		   for (i = 0;Dec == 0 && i < 60;i++) 
		       delay(1); 
		} 
     } 
	 else if (DA == 0) 
	 { 
	     delay(50); 
		 if (DA == 0) 
	   	 { 
  	        b_inc = b_dec = 0; 
 		    if (Wri == 0) 
			    key = 0x13; 
			else 
		    { 
                key = 0x10; 
                if (!da_first) 
                { 
                    da_first = 1; 
                    (*pc)++; 
                } 
            } 
		 } 
	 } 
	 else if (Wri == 0) 
	 {    
	     b_inc = b_dec = da_first = 0; 
	     delay(100); 
		 if (Wri == 0) 
		 { 
		    key = 0x03; 
		 } 
	 } 
	 else  
	 {   
	    b_inc = b_dec = da_first = 0; 
        key = 0x00; 
	 } 
	 return key; 
}