key_metric.h

#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


 


트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://rapel.egloos.com/tb/3355361 [도움말]

덧글

댓글 입력 영역