
Habe im Herbst mal eine Matrixtastatur von dx.com bestellt und in i-net nach Beispielen gesucht. Im Quelltext sind eine Anschlußvariante und der für 3 Matrixanordnungen gültige Tasten-String angegeben (bei der 12- Tasten-Variante von dx wird einfach die letzte Spalte ignoriert/weggelassen).
Auch die Ansteuerports sind frei wählbar, es müssen aber für die BASCOM-Routine alle Tastenanschlüsse an einem Port liegen. Aufpassen bei PC6 (Reset), den nicht verwenden!
Entscheidend für die Tastenzuordnung ist der String "Asciichars".
Um es leichter zu haben, habe ich zu Testzwecken den Tastencode auf ein LCD-Display ausgegeben.
Gruß Bussard
'######################################################################################
'ATMEGA8 Universalplatine von Bussard
'Ansteuerung LCD-Display 2x16 Zeichen an Port C (Pin 0 bis 5, Pin 6= /Reset frei)
'Keyboard an Port D
'
' Quellen: mikrokontroller.net, halvar.at
' erstellt am : 12.10.2012
' letzte Änderung: 17.10.2012
'
'##### Init ###################################################
$regfile = "m48def.dat"
$crystal = 1000000 'Werkseinstellung
'LCD am Port C
Config Lcd = 16 * 2 '2 x 16 Zeichen Display (1602A weiß auf blau)
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
Waitms 200
Cls
Cursor Off
'oder auch Cursor On, Blink
'Keyboard 0..9, *, #
Dim Keycode As Byte
Dim Asciichars As String * 16
'dx.com #117718 (3x4 Matrix Pin1 an PD6, Pin7 an PD0), (4x4 Matrix #117720)
Asciichars = "147*2580369#ABCD"
'Asciichars = "123 456 789 *0# " 'Conrad.de Matrix nach Halvar.at
Config Kbd = Portd , Debounce = 20 , Delay = 10 ' Tastatur an Port D0 bis D6 angeschlossen
'Variablen
Dim Bt As Byte
Dim S As String * 2
Dim Taste As String * 2
'##### Main ##################################################
Cls 'loesche das LCD Display
Locate 1 , 1 'Cursor auf 1 Zeile, 1 Spalte
Lcd "Hallo Bussard_BB" 'String auf Display anzeigen
Waitms 500
Do
Keycode = Getkbd()
If Keycode <> 16 Then ' 16 = KEINE Taste gedrückt
Keycode = Keycode + 1
Locate 2 , 1
Lcd " "
Locate 2 , 1
Lcd "Code " ; Keycode
Locate 2 , 9
Taste = Mid(asciichars , Keycode , 1)
'Lcd "Taste" ; Chr(34) ; Mid(asciichars , Keycode , 1) ; Chr(34)
Lcd "Taste" ; Chr(34) ; Taste ; Chr(34)
Waitms 200
End If
Loop
'##########################################################################
End