Schaltung
Eine 3x4 Tastatur mit 4 Zeilen und 3 Spalten ist am Port B
angeschlossen.
RB1 bis RB3 sind über 2,7 kOhm Widerstände mit den
Spaltenleitungen
verbunden, RB4 bis RB7 mit den Zeilenleitungen. RB0 wird nicht
benutzt.
Die Widerstände dienen dem Schutz vor Kurzschlüssen, falls
mehrere
Tasten gleichzeitig gedrückt werden. Die Schaltung entspricht
funktionell
der LCD-Tastatur-Platine ohne
LCD-Display,
verbunden mit der 16F84-Testplatine
oder die 16F84-Miniplatine mit
einer
LED-Platine
am Port A.
RB1 -RB3 sind Ausgänge und liegen im Ruhezustand auf
"1". Die
anderen Pins des Port B (RB4-7) sind Eingänge, ihre aktivierten Pull-up-Widerstände
sorgen für eine "1"-Pegel im Ruhezustand.
Die Ausgänge werden nacheinander auf "0" gelegt und dabei die Eingänge RB4-RB7 ausgewertet. Liegt dabei ein Eingang auf "0", so muss dieser durch eine gedrückte Taste mit dem aktiven Ausgang verbunden sein. Jedem Eingangs/Ausgangs-Paar ist ein Taste zugeordnet. Am Port A werden LEDs zur Anzeige benötigt. Hier werden
die unteren
4 Bit des Tastencodes angezeigt. |
Programmablauf
Zur Vorbereitung muss man:
Das Unterprogramm zur Tastaturabfrage ist etwas umständlich,
erlaubt
es aber jeder Taste individuelle Werte zuzuordnen. Da die Ausgabe an
eine
LED-Zeile unkritisch ist, wurde auf eine Entprellung der Tasten
verzichtet.
Programmlisting
Das Beispiel ist für einen 16F84 bzw. 16F84A ausgelegt. Wer es für einen 16F628 oder 16F87x umschreiben will, muss die Analogfalle beachten.
list
p=16f84 ;********************************************************** ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 LED ;* 1 LED ;* 2 LED ;* 3 LED ;* 4 LED ;* PORTB: 0 ;* 1 Keyboard 1 4 7 * ;* 2 Keyboard 2 5 8 0 ;* 3 Keyboard 3 6 9 # ;* 4 ---------I I I I ;* 5 -----------+ I I ;* 6 -------------+ I ;* 7 ---------------+ ;* ;********************************************************** ; ;sprut (zero) Bredendiek 05/2000 (mod. 01/2002; 10/2002) ; ; Matrixtastatur abfragen ; Tastencode an LED-Zeile darstellen ; ;********************************************************** ; Includedatei für den 16F84 einbinden #include <P16f84.INC> ; Configuration festlegen
__CONFIG
_PWRTE_ON &
_WDT_OFF
& _XT_OSC ; Variablen festlegen Taste Equ 0x20 ; Constanten festlegen Ini_con Equ
B'00000000'
; Interrupt disable ;**********************************************************
Init
bsf
STATUS, RP0 ; Bank 1 ; das Folgende ist die Hauptschleife, die endlos durchlaufen wird Main ;**********************************************************
Row1
equ
1
;Keyboard
1 4 7 * ; ist eine Taste gedrückt? und welche? Tastatur
;
Tastencode nach Taste
bsf
PORTB, Row2
bsf
PORTB, Row1
bsf
PORTB, Row2
movwf
Taste key1
end |
Autor: sprut
erstellt 2000
letzte Änderung: 27.10.2003