#ifndef _KEY_METRIC_H_
#define _KEY_METRIC_H_
#ifndef F_CPU
#define F_CPU 16000000UL // 16 MHz
#include <util/delay.h>
#endif
#define SELECT_BUTTON PORTB
#define CHECK_BUTTON PINB
#define SELECT_PORT DDRB
void key_init()
{
SELECT_PORT = 0x0f;
}
unsigned char peek_key()
{
SELECT_BUTTON = 0xf0;
_delay_us(10);
if(CHECK_BUTTON == 0xf0)
return 0;
else
return 1;
}
volatile unsigned char getkey(void)
{
unsigned char i = 0, j = 0, temp = 0xff;
while(temp == 0xff)
{
for(i = 0; i<4;i++)
{
PORTB = ~(0x01 << i);
_delay_us(3);
for(j = 0;j<4;j++)
{
if((~PINB) & (0x10<<j))
{
temp = i +j*4; // 입력 버튼 번호 저장
while(peek_key());// 버튼 때기 감지
return temp;
}
}
}
}
return -1; // temp 초기화 실패
}
#endif



덧글