안녕하세요.
Mp3 플레이어를 만들고 있는데요,
숏키는 구현했는데, 롱키 구현이 잘 안되어서 문의드립니다.
아래는 숏키를 구현한 소스인데요,
여기에 롱키 루틴을 집어넣어야 하는데,
어떤식으로 해야하는지, 롱키 해보신분 계신가요.
###########################################################
void Timer0_ISR
{
KeyIn(); // 1ms마다 주기적으로 인터럽트가 걸립니다.
}
void main (void)
{
while(1)
{
KeyPro(); // 키에 대한 동작을 실행하는 루틴
}
############################################################
//----------------------------------------------------------------------------
// 키가 눌렸는지 체크하는 루틴
//----------------------------------------------------------------------------
void KeyIn(void) // 키를 스캔하여 값을 저장
{
unsigned char tData;
if(KeyInDeFlg)
return;
tData = (poDATA^0xff) & 0x1f;
if(tData != OldKeyData) // 이전 키값과 같지 않다면..
{
KeyInChatCnt = 0;
OldKeyData = tData;
}
else // 이전 키 값과 같다면, 55번 똑같은 신호 감지후, 키 값을 넘겨줌.
{
KeyInChatCnt++;
if(KeyInChatCnt > 55) // 채터링 방지
{
KeyInChatCnt = 0;
if((KEYFLG.all == 0)&& tData)
{
KeyInFlg = SET;
}
KEYFLG.all = tData; // 키 값을 넘겨준다.
}
}
}
//----------------------------------------------------------------------------
// 키가 눌렸다면 그 버튼에 대한 기능 수행.
//----------------------------------------------------------------------------
void KeyPro(void)
{
if(!KeyInFlg)
return;
KeyInFlg = CLR;
if(KEY_PLAY_STOP) // 재생/정지 키가 눌렸다면
key_play_stop();
if(KEY_PREV) // 이전곡 키가 눌렸다면
key_prev();
if(KEY_NEXT) // 다음곡 키가 눌렸다면
key_next();
if(KEY_VOLUP) // 볼륨+ 키가 눌렸다면
{
key_vol_up(); // 볼륨을 올리고
}
if(KEY_VOLDOWN) // 볼륨- 키가 눌렸다면
{
key_vol_down(); // 볼륨을 내리고
}
}
키스캔 로직이 하드웨어로 구현되어 있다고 가정한다면
KeyPressed event가 발생하면 타이머를 동작시킵니다.
타이머가 expire되기 전에 KeyReleased event가 들어오면 short키로 처리하고
반대로 KeyReleased event보다 타이머 event가 먼저오면 long키로 처리합니다.