/* Projekt Convac-Ätzer
Zugriff auf das Tastenfeld (6 Spalten, 3 Zeilen)
Henrik Haftmann, 161012
Beim Controller ist angeschlossen, siehe
http://www.tu-chemnitz.de/~heha/enas/Convac-Ätzer/Eagle.zip/Terminal.wmf?as=SVG
A0 Spaltendekoder low-aktiv
A1 Spaltendekoder
A2 Spaltendekoder
!CSK Auswahl = !SEL1
An den Datenbusleitungen liegen 4 Zeilenleitungen invertiert.
Tastenverteilung:
╔═══════╦═══════╤═══════╤═══════╤═══════╤═══════╤═══════╗
║ ║0 │1 │2 │3 │4 │5 ║
╠═══════╬═══════╪═══════╪═══════╪═══════╪═══════╪═══════╣
║0 ║ F1 │ F2 │ F3 │ F4 │ F5 │ F6 ║
╟───────╫───────┼───────┼───────┼───────┼───────┼───────╢
║1 ║ 5 │ 6 │ 7 │ 8 │ 9 │ SET ║
╟───────╫───────┼───────┼───────┼───────┼───────┼───────╢
║2 ║ 0 │ 1 │ 2 │ 3 │ 4 │ ↲ ║
╚═══════╩═══════╧═══════╧═══════╧═══════╧═══════╧═══════╝
Es kann nur eine Taste gleichzeitig gedrückt sein.
*/
#include "Convac.h"
static PROGMEM const byte map[3][6]={
{0xF1,0xF2,0xF3,0xF4,0xF5,0xF6},
{ '5', '6', '7', '8', '9','\n'},
{ '0', '1', '2', '3', '4','\r'}};
byte KEYS::readkey() {
for (byte i=0; i<6; i++) { // Spalten durchgehen
byte b=BUS::ioRead(BUS::BA_KEYPAD+i)&0x07;
switch (b) {
case 0: break; // keine Taste: weitersuchen
case 1: return pgm_read_byte(map[0]+i);
case 2: return pgm_read_byte(map[1]+i);
case 4: return pgm_read_byte(map[2]+i);
default: return 0; // mehrere Tasten oder Tastatur nicht angeschlossen
}
}
return 0; // keine Taste gedrückt
}
byte KEYS::readkey(byte n) {
byte k=last;
do{
byte kb=k;
k=readkey();
if (k==kb) break; // mehrfach einlesen (Tastenprellen)
}while(--n);
return k;
}
// Prüft ob neue Taste gedrückt, zur Vermeidung überflüssiger Bildaufbauten
void KEYS::peek() {
byte k=readkey(4); // mehrfach einlesen (Tastenprellen)
if (last!=k) {
last=k;
if (k) buffer=k;
}
}
byte KEYS::last;
byte KEYS::buffer;
Vorgefundene Kodierung: UTF-8 | 0
|