Did you know that you can navigate the posts by swiping left and right?
저번에 만들기로 했던 나무상자의 keypad를 수령하고 본격적으로 납땜과 테스트 코딩을 시작하였다. keypad에는 총 7개의 핀을 연결할수 있는데 뒷면을 보면 대략 각 핀들이 어느 위치에 연결되있는지 확인할 수 있다.
위 이미지는 내가 쓰고 있는 멤브레인 키패드의 뒷면을 가져온것이다.
오른쪽 끝핀이 첫번째 가로줄을 가르키고 차례로 오른쪽 기준 4번째까지 각각의 가로줄을 연결하고 있고 5번째부터 7번째까지는 세로줄을 연결하여 맨오른쪽핀부터 4번째까지는 각각 PORTA0 ~ PORTA3까지 연결해주고 5번째부터 7번째까지는 PORTA4 ~ PORTA6을 연결해주었다.
위 이미지는 각각의 번호들과문자가 어느핀들과 대칭되어 연결되는지 표시해보았다. (나중에 봐도 이해하기 쉽게) 코드는 PA0~PA3까지는 출력으로 받아놓는 상태를 해놓고 PA4~PA5를 입력으로 받아 번호,문자를 누르면 대칭되는 핀으로 신호를 받는식으로 짜보았다.
char KeyScan(void)
{
char KeyBuf=0xFF; //키 값이 들어갈 버퍼, 초기값 0xFF
PORTA = 0xFF; //포트 초기값, 입력핀 내부풀업저항 사용
DDRA = 0x0F; // 비트 0,1,2,3 출력으로 지정
PORTA.0=0; // 1번째 줄 선택
delay_ms(100);
if(!PINA.4)KeyBuf='1';
if(!PINA.5)KeyBuf='2';
if(!PINA.6)KeyBuf='3';
PORTA.0=1; // 1번째 줄 해제
PORTA.1=0; // 2번째 줄 선택
delay_ms(100);
if(!PINA.4)KeyBuf='4';
if(!PINA.5)KeyBuf='5';
if(!PINA.6)KeyBuf='6';
PORTA.1=1; // 2번째 줄 해제
PORTA.2=0; // 3번째 줄 선택
delay_ms(100);
if(!PINA.4)KeyBuf='7';
if(!PINA.5)KeyBuf='8';
if(!PINA.6)KeyBuf='9';
PORTA.2=1; // 3번째 줄 해제
PORTA.3=0; //4번째 줄 선택
delay_ms(100);
if(!PINA.4)KeyBuf='*';
if(!PINA.5)KeyBuf='0';
if(!PINA.6)KeyBuf='#';
PORTA.3=1; //4번째 줄 해제
return KeyBuf;
}
일단 keypad 관련 함수만 해보고 공부해보았다.
코드출처는
https://m.blog.naver.com/PostView.nhn?blogId=ga1267&logNo=220132892005&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F 에서 도움을 얻었습니다.