====== Keypad Input ======
This application demonstrates interfacing to a 4x4 keypad and displaying
the results on a 4 digit seven segment module (CSG module)
{{ :cubloc:keypad_input:keypadinput.png?nolink |}}
The CSG module is a 4 digit seven segment LED module that can be
connected via CUNET or the I2C interface to display numbers and custom
characters.
{{ :cubloc:keypad_input:csgmodule.png?nolink |}}
Const Device = CB280
Set I2c 9,8
Dim i As Byte
Do
CsgDec 0,i
i = i + 1
Loop
If you connect the CSG to the CuNet connector and execute the program
above, the CSG module will show incrementing numbers.
The key matrix can be easily read using the KeyPad command. If you look
carefully at the keypad, you will see that the scan code does not match the
actual key pressed. In order to read the correct key, we will use a Byte
array (KEYTABLE) to map the scan codes to the appropriate key.
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
And now we will make a simple program that receives input. When a
number key input is received, it is displayed to the CSG module as a 4 digit
number. The number is stored int the variable K, which is in BCD format.
We then use the BCD2Bin command to convert the BCD value back into
binary
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
When there is no input, the returned scan code is 255. Using the statment
Do While keypad(0) < 255, we wait until a key is released which will
return a scan code of 255. This is to allow the processor to stop reading
input while a key is being pressed. Otherwise, the processor might receive
multiple key inputs since the Cubloc's execution speed is very fast.
Using _D(0) = M, you can pass the scan code to Ladder Logic's D0 register.
If you need to use a keypad in Ladder Logic, you can make minor
modifications to this code to quickly get your results.