사용자 도구

사이트 도구

English

cublocapp:an31003:index

AN31003 - 키패드 입력

큐블록에는 키패드를 직접 연결할 수 있는 Keypad 와 eKeypad 명령어가 있습니다.

Keypad는 최대 16개까지, Ekeypad는 최대 64개까지 키를 읽어올 수 있습니다.

Keypad 사용예

4 x 4 키 매트릭스로부터 키 입력상태를 읽어, 4 DIGIT 7 SEGMENT 모듈 (CSG 모듈)에 표시하는 프로그램을 작성해 보도록 하겠습니다.

CSG 모듈은 7 SEGMENT LED 를 4 DIGIT 표시하는 디스플레이 모듈입니다. CUBLOC 의 CUNET 또는 I2C 와 연결하며, 간단한 명령어 만으로 구동할 수 있습니다.

다음은 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 사용예

이 명령으로는 키를 최대 64키까지 읽을 수 있는 명령입니다. 매트릭스를 사용하기 때문에 단 16개 포트만 필요로합니다.

두개의 포트 블록에 연결된 8 x 8 키 매트릭스의 키 입력 상태까지 읽어올 수 있습니다. 입력 측 포트블록과 출력 측 포트블록을 따로 지정해 주어야 합니다. 입력 측 포트블록은 입력으로 사용 가능한 포트블록을 사용해야 합니다. 마찬가지고 출력 측 포트블록은 출력으로 사용하는 한 포트블록을 사용해야 합니다.

입력 측 포트블록 중 사용하지 핀은 반드시 저항을 사용해서 5V와 연결해두어야 합니다. 이 핀을 다른 용도로 사용하는 것은 불가능합니다.

출력 측 포트블록 중 사용하지 않는 핀은 OPEN상태로 두십시오. 이 핀을 다른 용도로 사용할 수 없습니다. 다음 회로는 포트블록0을 입력 측으로 블록 1을 출력 측으로 사용한 경우의 회로입니다.

키를 누르면 해당 스캔코드를 리턴하고, 아무키도 눌려지지 않았으면 255를 리턴합니다.

주의 : 이 방식으로는 멀리 떨어진 곳의 키패드를 연결할 수 없습니다. 보드내 동일공간에 키패드를 연결할 경우에만 사용하십시오.

    Dim A As Integer   
    Wait 500
    Do
       A = Ekeypad(0, 1)   
       Debug Dec A,cr
       Wait 500
    Loop

위 프로그램을 CUBLOC STUDIO에서 실행시키면, 아래와 같이 DEBUG창에 눌려진 키보드의 키스캔코드가 표시됩니다.

큐블록 어플리케이션 노트

cublocapp/an31003/index.txt · 마지막으로 수정됨: 2017/10/16 00:58 저자 Comfile Technology