【032】直控按键多个键值处理2007-05-02 19:01:00
			
			【评论】
			【打印】
			【字体:大 中 小】
			本文链接:http://blog.pfan.cn/wentao/25478.html
			
			
			
			
			  
  
  
  
  
  
  
  
  
  
  
key_v equ 30h                 
key_t equ 31h                 
            
         org   0000h  
         ajmp  start   
start:   mov   p1,#0xff       
         mov   p0,#0xff       
         mov   key_v,#0xff    
key:                          
         mov   a,p1           
         mov   key_t,a        
         xrl   a,key_v        
         jz    key            
         lcall d_10ms         
         mov   a,p1           
         mov   key_t,a        
         xrl   a,key_v        
         jz    key            
            
         mov   key_v,key_t    
         lcall key_to         
            
         ajmp  key            
            
key_to:                       
         mov   a,key_v        
         cjne  a,#0xef,next   
         cpl   p0.0           
         ret  
next:    cjne  a,#0xdf,over   
         cpl   p0.1           
over:    ret  
  
d_10ms:  mov   r5,#20         
temp1:   mov   r6,#255        
         djnz  r6,$   
         djnz  r5,temp1   
         ret  
end 
 
 
 
 
 
 
 
 
 
  
  
#include <reg51.h>   
  
#define uchar unsigned char   
  
sbit P00 = P0^0;            
sbit P01 = P0^1;            
  
void key_to(uchar key_s);   
void delay_ms(uchar ms);    
  
void main()   
{   
  uchar data key_v = 0xff;      
  uchar data key_t = 0x00;      
     
    P1 = 0xff;                    
  P0 = 0xff;                    
    while(1)                      
    {   
      key_t = P1;               
      if(key_t != key_v)        
      {   
        delay_ms(10);         
        key_t = P1;           
        if(key_t != key_v)    
        {   
          key_v = key_t;    
          key_to(key_v);    
        }   
      }   
    }   
}   
void key_to(uchar key_v)          
{   
  if(key_v == 0xef)             
    P00 = !P00;               
  else  
  {   
      if(key_v == 0xdf)         
          P01 = !P01;           
    }   
}   
void delay_ms(uchar ms)           
{   
    uchar i;   
    while(ms--)   
        for(i = 0; i < 124; i++);   
} 

 
			阅读(10067) | 评论(0)
			
版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!
			
			                
					 
	
评论