====== AN31003 - 키패드 입력 ====== 큐블록에는 키패드를 직접 연결할 수 있는 Keypad 와 eKeypad 명령어가 있습니다. Keypad는 최대 16개까지, Ekeypad는 최대 64개까지 키를 읽어올 수 있습니다. ===== Keypad 사용예 ===== 4 x 4 키 매트릭스로부터 키 입력상태를 읽어, 4 DIGIT 7 SEGMENT 모듈 (CSG 모듈)에 표시하는 프로그램을 작성해 보도록 하겠습니다. {{ :cublocapp:an31003:keypad_sch.png?nolink |}} CSG 모듈은 7 SEGMENT LED 를 4 DIGIT 표시하는 디스플레이 모듈입니다. CUBLOC 의 CUNET 또는 I2C 와 연결하며, 간단한 명령어 만으로 구동할 수 있습니다. {{ :cublocapp:an31003:csg_picture.png?nolink |}} 다음은 csg에 숫자를 표시하는 프로그램입니다. Const Device = CB280 Set I2c 9,8 Dim I As Byte Do Csgdec 0,I I = I + 1 Loop CUNET(I2C)에 CSG 모듈을 연결하고, 이 프로그램을 실행시키면 CSG 모듈에 증가되는 숫자가 표시됩니다. 키 매트릭스는 KEYPAD 라는 명령으로 쉽게 읽어올 수 있습니다. 회로도 옆에 있는 키패드를 보면 키 스캔코드 값이 키 이름과 정확히 일치되지 않는 것을 알 수 있습니다. 키 스캔코드를 실제의 키 이름과 일치시키기 위해서 테이블 변환을 거친 후, CSG 모듈에 표시하는 프로그램입니다. Const Device = CB280 Set I2c 9,8 Dim I As Integer Dim K As Integer Const Byte KEYTABLE = (1,4,7,10,2,5,8,0,3,6,9,11,12,13,14,15) Do I=Keypad(0) If I < 16 Then I = KEYTABLE(I) Csgdec 0,I End If Loop 자, 이제 숫자 입력 프로그램을 작성해 보겠습니다. 키의 숫자 키를 누르면 4 자리의 숫자를 구성하여 표시합니다. 진행과정에서 K 에 저장되는 값은 BCD 코드형태이므로, 최종 값인 M 에 BCD2BIN 함수를 이용해서 바이너리 값으로 바꾸어서 저장합니다. Const Device = CB280 Set I2c 9,8 Dim I As Integer Dim K As Integer Dim M As Integer K = 0 Const Byte KEYTABLE = (1,4,7,10,2,5,8,0,3,6,9,11,12,13,14,15) Do I=Keypad(0) If I < 16 Then I = KEYTABLE(I) If I < 10 Then K = K << 4 K = K + I Csghex 0,K End If ' ' WAIT UNTIL KEY DEPRESS ' Do While Keypad(0) < 255 Loop M = Bcd2bin(K) Debug Dec M,CR End If Loop Keypad 함수에서 키 입력이 없을 때에는 스캔코드가 255 를 반환합니다. Do While keypad(0) < 255 문장은 키를 일단 누른 후, 누른 상태가 지속되는 것이 끝나는 지점을 찾기 위해 사용합니다. 사용자 입장에서는 짧게 누른 것 같지만, 큐블록에서 처리하는 속도는 무척 빠르므로, 여러 번 입력된 것으로 판단하기 때문에, 한번 누른 후 손을 띌 때까지 대기하는 루틴을 작성해 놓은 것입니다. _D(0) = M 과 같은 형태로 저장하게 되면, 최종 입력 값을 LADDER LOGIC 에서도 참조할 수 있게 됩니다. ===== Ekeypad 사용예 ===== {{ :cublocapp:an31003:ekeypad_board.jpg?nolink |}} 이 명령으로는 키를 최대 64키까지 읽을 수 있는 명령입니다. 매트릭스를 사용하기 때문에 단 16개 포트만 필요로합니다. 두개의 포트 블록에 연결된 8 x 8 키 매트릭스의 키 입력 상태까지 읽어올 수 있습니다. 입력 측 포트블록과 출력 측 포트블록을 따로 지정해 주어야 합니다. 입력 측 포트블록은 입력으로 사용 가능한 포트블록을 사용해야 합니다. 마찬가지고 출력 측 포트블록은 출력으로 사용하는 한 포트블록을 사용해야 합니다. 입력 측 포트블록 중 사용하지 핀은 반드시 저항을 사용해서 5V와 연결해두어야 합니다. 이 핀을 다른 용도로 사용하는 것은 불가능합니다. 출력 측 포트블록 중 사용하지 않는 핀은 OPEN상태로 두십시오. 이 핀을 다른 용도로 사용할 수 없습니다. 다음 회로는 포트블록0을 입력 측으로 블록 1을 출력 측으로 사용한 경우의 회로입니다. 키를 누르면 해당 스캔코드를 리턴하고, 아무키도 눌려지지 않았으면 255를 리턴합니다. **주의 : 이 방식으로는 멀리 떨어진 곳의 키패드를 연결할 수 없습니다. 보드내 동일공간에 키패드를 연결할 경우에만 사용하십시오.** {{ :cublocapp:an31003:ekeypad.gif?nolink |}} Dim A As Integer Wait 500 Do A = Ekeypad(0, 1) Debug Dec A,cr Wait 500 Loop 위 프로그램을 CUBLOC STUDIO에서 실행시키면, 아래와 같이 DEBUG창에 눌려진 키보드의 키스캔코드가 표시됩니다. {{ :cublocapp:an31003:epad_debug.png?nolink |}} [[cublocapp:index|큐블록 어플리케이션 노트]]