Did you know that you can navigate the posts by swiping left and right?

keypad 실습

12 Feb 2018 . category: tech . Comments
#atmega128 #mechatronics #science knowledge

저번에 만들기로 했던 나무상자의 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 에서 도움을 얻었습니다.


Me

github를 이용해 만들어본 블로그입니다.