Das eBook Angewandte Mikroelektronik wurde von Hans Lohninger zur Unterstützung verschiedener Lehrveranstaltungen geschrieben. Weitere Informationen finden sie hier.


Experiment: Ansteuerung einer Tastatur mit 16 Tasten

Das folgende Experiment soll ein Verfahren zur Ansteuerung einer Tastatur zeigen. Dazu wird eine Tastatur aus 16 Aus-/Ein-Tastern aufgebaut. Die Tasten werden quadratisch in Reihen zu je vier Elementen angeordnet und die entstandene Tastenmatrix wird mit insgesamt acht Leitungen an die PIO angeschlossen. Die PIO wird nun so programmiert, dass vier Leitungen (in diesem Beispiel die horizontalen Leitungen) als Eingänge geschaltet sind und die anderen vier als Ausgänge.

Bedienung einer Tastatur mit 16 Tasten

Das Abtasten der Tastenmatrix geschieht nun in der Weise, dass von den Ausgangsleitungen jeweils eine auf HIGH gelegt wird und alle Eingangsleitungen gelesen werden. Sind eine oder mehrere Tasten, die mit der gerade aktiven Ausgangsleitung verbunden sind, gedrückt, so spiegelt sich dies in den Bits des Eingangsmusters wider. Nach der Ansteuerung aller Ausgangsleitungen hat man ein Abbild aller gedrückten Tasten in Form einer Bitmap.

Nachdem das unten aufgeführte Steuerprogramm die Schnittstelle entsprechend initialisiert hat, läuft es in einer Endlosschleife, in der zuerst die Tastatur entsprechend dem eben beschriebenen Verfahren abgetastet wird und dann die Bitmap (Variable INPAT) zu einer 16-Bit-Variablen zusammengefasst und als Zahl am Display ausgegeben wird. Ist keine Taste gedrückt, so zeigt die Anzeige den Wert null an.

;===================================================
;------ Experiment: Tastaturabfrage ----------------
;===================================================
;
            .GLOBAL PIOKEY
PIOKEY:     LD      A,0CFH      ;Modus 3
            OUT     (PIOAC),A
            LD      A,00001111B ;Eingang: Bit 0-3
            OUT     (PIOAC),A   ;Ausgang: Bit 4-7
            LD      A,00000111B ;keine Interrupts
            OUT     (PIOAC),A
;
$2          LD      B,4         ;4 Leitungen scannen
            LD      A,10H
            LD      (OUTPAT),A  ;Scanmuster ausgeben
            LD      HL,INPAT    ;Zeiger auf Bit-Feld
$1:         LD      A,(OUTPAT)  ;1 Leitung aktivieren
            OUT     (PIOAD),A
            ADD     A,A         ;nächste Leitung
            LD      (OUTPAT),A
            IN      A,(PIOAD)   ;Rückmeldung lesen
            AND     0FH
            LD      (HL),A      ;und speichern in
            INC     HL          ;  Bit-Feld
            DJNZ    $1
;
            LD      DE,INPAT    ;Auswertung
            LD      HL,0
            LD      B,4
$3:         ADD     HL,HL       ;Bits in HL setzen
            ADD     HL,HL
            ADD     HL,HL
            ADD     HL,HL
            LD      A,(DE)
            OR      L
            LD      L,A
            INC     DE
            DJNZ    $3
            CALL    DSPHL       ;Ergebnis anzeigen
            LD      HL,10000
            CALL    DELAY
            JR      $2
            RET
;
            .DATA
OUTPAT      DEFB    0           ;Ausgangsmuster
INPAT       DEFB    0,0,0,0     ;Eingangsmuster
            .CODE


Last Update: 2008-05-31