51 마이크로컨트롤러로 TTP229 매트릭스 터치 키 모듈 구동하기 - 16키 입력有効모드

TTP229 TonTouch IC 개요

TTP229 TonTouch IC는 정전 용량感应 원리를 기반으로 설계된 터치chip입니다. 이 chip에는 터치 센서용 레귤레이터 회로가 내장되어 있어 다양한 응용 분야에서 안정적인 터치 효과를 제공할 수 있습니다. 인체 터치 패널은 비전도성 절연 재료를 통해 연결할 수 있으며, 주로 기계 스위치나 버튼을 대체하는 용도로 사용됩니다. 이 chip은 독립적으로 8개 또는 16개의 터치 키를 지원할 수 있습니다.

입력 키数目 선택

TTP229는 8키 입력 모드와 16키 입력 모드를 제공합니다. 이 두 모드는 TP2(KYSEL) 포트가 VSS로 고저항 저항을 연결하는지에 따라 결정됩니다. 기본값은 TP2(KYSEL)에 저항을 연결하지 않으면 8키 입력 모드가 되고, 고저항 저항을 VSS에 연결하면 16키 입력 모드가 됩니다. 본 모듈에서는 TP2에 고저항 저항을 GND에 연결하여 16키 입력 모드로 설정되어 있습니다.

데이터 출력 모드

TTP229는 8포트 직접 출력 모드와 두 가지 직렬 출력 모드를 가지고 있습니다. 16키 입력 모드에서는 직렬 출력 방식만 사용할 수 있습니다. 본 모듈에서는 2선 출력 모드를 채택하고 있습니다.

키 작동 모드

TTP229는 단일 키有効와 다중 키有効 기능을 갖추고 있습니다. 이러한 기능들은 TP3(SKMS1)과 TP4(SKMS0) 포트로 설정합니다. 전체 16개 키는 한 그룹 또는 두 그룹으로 설정할 수 있습니다. 첫 번째 그룹에는 TP0, TP1, TP2, TP3, TP8, TP9, TP10, TP11 키가 포함되고, 두 번째 그룹에는 TP4, TP5, TP6, TP7, TP12, TP13, TP14, TP15 키가 포함됩니다. 설정 방식은 다음 표와 같습니다.

TP3 TP4 기능 설명
0 0 전체 다중 키有効: 한 그룹으로 설정(16키)
0 1 2그룹 설정: 첫 번째 그룹=>단일 키; 두 번째 그룹=>다중 키
1 0 2그룹 설정: 첫 번째 그룹=>단일 키; 두 번째 그룹=>단일 키
1 1 전체 단일 키有効: 한 그룹(16키)

참고사항:

  • 한 그룹으로 설정: TP0~TP15 전체 포함
  • 두 그룹으로 설정: 첫 번째 그룹=>TP0, TP1, TP2, TP3, TP8, TP9, TP10, TP11; 두 번째 그룹=>TP4, TP5, TP6, TP7, TP12, TP13, TP14, TP15
  • 8 모드 사용 시 TP0~TP7이 입력 키
  • TP3와 TP4의 선택 상태에서 "0" 상태는 고저항 저항을 VSS에 연결한 것이고, "1" 상태는 연결하지 않은 것
  • 단일 키有効 기능에서 키 감지 우선순위는 키 스캔 순서(TP0부터 TP15까지)에 따르며, 동시에 여러 키가 터치되면 키가 터치된 강도가 아닌 스캔 순서에 따라 결정됨

본 모듈은 TP3와 TP4에 고저항 저항을 GND에 연결하여 전체 다중 키有効, 한 그룹(16키) 설정입니다.

모듈과 8051 마이크로컨트롤러 연결

TTP229 8051 마이크로컨트롤러
V 5V
G GND
SCL P1.0
SDA P1.1

TTP229의 시퀀스와 프로그램

모듈은 2선 직렬 통신 방식을 채택하고 있습니다.

2선 직렬 통신 방식 시퀀스

모듈 설정은 TP1=1, TP2=0, 16키 모드, 로우 레벨 유효입니다.

데이터 읽기 프로그램

unsigned int read_touch_key(void)
{
    unsigned char loop_cnt;
    unsigned int key_value = 0;
    
    data_pin_output = 0;
    delay_microsecond(10);
    data_pin_output = 1;
    delay_microsecond(1);
    
    for(loop_cnt = 0; loop_cnt < 16; loop_cnt++)
    {
        key_value >>= 1;
        clock_pin = 0;
        if(data_pin_input == 0)
        {
            key_value |= 0x8000;
        }
        clock_pin = 1;
    }
    
    return key_value;
}

메인 프로그램 및 데이터 처리 프로그램

void main(void)
{
    unsigned int key_buffer = 0;
    
    serial_init();
    
    while(1)
    {
        key_buffer = read_touch_key();
        
        if(key_buffer == 0x0001) {
            serial_transmit('1');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0002) {
            serial_transmit('2');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0004) {
            serial_transmit('3');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0008) {
            serial_transmit('A');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0010) {
            serial_transmit('4');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0020) {
            serial_transmit('5');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0040) {
            serial_transmit('6');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0080) {
            serial_transmit('B');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0100) {
            serial_transmit('7');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0200) {
            serial_transmit('8');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0400) {
            serial_transmit('9');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x0800) {
            serial_transmit('C');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x1000) {
            serial_transmit('*');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x2000) {
            serial_transmit('0');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x4000) {
            serial_transmit('#');
            serial_print("\r\n");
        }
        else if(key_buffer == 0x8000) {
            serial_transmit('D');
            serial_print("\r\n");
        }
        
        delay_millisecond(100);
    }
}

실험 결과

각 키에 해당하는 핀을 누르면 시리얼 모니터에 해당 값이 출력됩니다.

유의사항

  • 모듈은 오작동이 발생할 수 있으므로 손가락으로 최대한 중앙 부분을 누르세요.
  • 모듈 뒷면에 금속 물질이 없어야 합니다.

태그: 8051 TTP229 touch-sensor matrix-keypad capacitive-touch

6월 20일 20:52에 게시됨