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.
Die Schaltung ist mit einem PIC16F84 beschrieben,
lässt
sich aber mit minimalen Softwareänderungen
auch z.B. mit einem PIC16F628A betreiben.
Unten befinden sich Links zum Download der ASM-
und HEX-Files für beide Microcontrollertypen.
RB1 -RB3 sind Ausgänge und liegen im Ruhezustand auf
"1". Die
anderen Pins des Port B 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 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 wird die Nummer der gedrückten Taste als Binärzahl angezeigt. |
Programmablauf
Dieses Problem haben wir ja eigentlich schon gelöst, aber die
Lösung war nicht besonders elegant. Insbesondere, wenn die Zahl
der
Spalten und Reihen weiter ansteigt, bläst sich der Quelltext der
einfachen
Lösung zu unakzeptabler Größe auf.
Die folgende Lösung ist eleganter. Es werden die Tasten
durchgezählt,
bis man auf die Taste trifft, die gedrückt wurde. Dieser Code kann
auch große Tastaturen abfragen.
Zur Vorbereitung muss man:
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 02/2003 (patch am 27.02.2007) ; ; Matrixtastatur abfragen ; Tastencode an LED-Zeile darstellen ; ;********************************************************** ; Includedatei für den 16F84 einbinden #include <P16f84.INC> ERRORLEVEL -302 ;SUPPRESS BANK SELECTION MESSAGES ; Configuration festlegen
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC ;**************************************************************
; Variablen ;**************************************************************
mainloop ;**************************************************************
end |