커뮤니티>자료실
   
   
 
    Tact Switvh Detect방법 1 Edge Exchange Detect   2013.01.25
    Tact Switvh Detect방법 1 Edge Exchange Detect
   
 

본 내용은 마이컴으로 외부 Push Swich를 입력 받음에 있어 xor 로직(두 입력이 같으면 0, 다르면 1을 출력함)을 이용한 것입니다.

#define KEY_CHA 0x01
#define KEY_CHB 0x02

unsigned char KeyInCount,KeyInValue,KeyInTempBuffer,KeyInOldValue,KeyTemp;

//타이머를 이용하여 일정한 tick으로 포트로 부터 입력을 스캔한다.

// Timer 0 overflow interrupt service routine
#pragma savereg+
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
TCNT0=0xB5;
b4msec=1;
#asm("wdr"); //complement
KeyInDetect();

}
#pragma savereg-

//실제 스캔하고 이전의 값과 비교하고 Key의 채터링을 제거한다.

void KeyInDetect(void)
{
KeyTemp=~(PINB & 0x03);
if(KeyInTempBuffer == KeyTemp){
if(KeyInCount==5){
KeyInCount=6;
KeyInValue=KeyTemp;
}
else{
if(KeyInCount<5){
++KeyInCount;
}
}
}
else{
KeyInTempBuffer = KeyTemp;
KeyInCount=0;
}
}

//detect된 키 값을 처리한다.

//본 함수는 while문 속에 둔다-즉 폴링처리한다.

void KeyProc(void)
{
unsigned char val;
val= KeyInValue ^ KeyInOldValue;
if(val){
if(val & KEY_CHA){
if(KeyInValue & KEY_CHA){
//키의 상태가 Low에서 High로 변했슴

}
else{
//키의 상태가 High에서 Low로 변했슴

}
}
if(val & KEY_CHB){
if(KeyInValue & KEY_CHB){
//키의 상태가 Low에서 High로 변했슴

}
else{
//키의 상태가 High에서 Low로 변했슴

}
}
KeyInOldValue=KeyInValue;
}
}


 
 
   
 
주소: 인천광역시 서구 봉수대로 141 가좌시범공단 B동 505호    대표자 : 김시석    전화번호 : 032)672-2966    팩스번호 : 032)672-2965
사업자등록 번호 : 225-14-00080    콘트롤러개발,전자제품개발 아테크