PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tastenfeldabfrage.



jibyz
04.01.2006, 20:02
Hallo,

ich möchte ein programm schreiben, das eine 7*8 tastenmatrix abfragt,
den zustand vermerkt und Änderungen (Drücken oder Lösen) von Tasten
durch seriellen Protokoll überträgt!

So viel wie ich gelesen habe: soll ich die Tastaturmatrix in den µP einlesen,
sodaß alle Tasten ein eigenes Bit bekommen: 7 x 8 Byte einlesen.
Anschließend kann ich die insgesamt 56 Bit (byteweise) entprellen;
Aber ich verstehe trozdem das nicht ganz!

Ein kleiner code, der ich mal geschrieben habe sieht so aus:
/* Description

GND = Signal ground
VCC = +5 supply voltage
Vo = Voltage input for display contrast
RS = register select input
R/W = read/write signal input
EN = enable signal input
D0-D7 = data bits from D0 to D7 (I used 4 bits data bus, so only D7 - D4 are used!!)
V1+ = positive supply for the background light (if the display has one!)
V1- = negative supply for the background light (-//-)
*/

static char screenpos [2][40] = {0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89
0x8A,0x8B,0x8C,0x8D,0x8E,0x8F,0x90,0x91,0x92,0x93
0x94,0x95,0x96,0x97,0x98,0x99,0x9A,0x9B,0x9C,0x9D
0x9E,0x9F,0xA0,0xA1,0xA2,0xA3,0xA4,0xA5,0xA6,0xA7
},
{0xC0,0xC1,0xC2,0xC3,0xC4,0xC5,0xC6,0xC7,0xC8,0xC9
0xCA,0xCB,0xCC,0xCD,0xCE,0xCF,0xD0,0xD1,0xD2,0xD3
0xD4,0xD5,0xD6,0xD7,0xD8,0xD9,0xDA,0xDB,0xDC,0xDD
0xDE,0xDF,0xE0,0xE1,0xE2,0xE3,0xE4,0xE5,0xE6,0xE7
},



tastpos [8][7] = {0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09 ,0x10,0x11,0x0E}
{0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22}
{0x26,0x23,0x24,0x25,0x0F,0x0A,0x0C,0x0B,0x0D}
{0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D}
{0x2E,0x2F,0x30,0x31,0x32,0x33,0x34}
{0x35,0x36,0x37,0x38,0x39,0x3A,0x3B}
{0x3C,0x3D,0x3E,0x3F,0x13,0x14,0x15}
{0x16,0x17,0x18,0x19,0x1A,0x1B,0x12}

//ScanToAscii()
/*übersetzt den Tastatur-Scancode in Ascii-Code.*/
char ScanToAscii (char scan)
{
switch (scan){
case 0x00: return('SP');
case 0x01: return('"');
case 0x02: return(''');
case 0x03: return('*');
case 0x04: return('/');
case 0x05: return('+');
case 0x06: return('-');
case 0x07: return('=');
case 0x08: return('<');
case 0x09: return('>');
case 0x0A: return('/|\');
case 0x0B: return('\|/');
case 0x0C: return(',');
case 0x0D: return('.');
case 0x0E: return('?');
case 0x0F: return('@');
case 0x10: return('$');
case 0x11: return('&');
case 0x12: return('0.');
case 0x13: return('1.');
case 0x14: return('2.');
case 0x15: return('3.');
case 0x16: return('4.');
case 0x17: return('5.');
case 0x18: return('6.');
case 0x19: return('7.');
case 0x1A: return('8.');
case 0x1B: return('9.');
case 0x1C: return('0');
case 0x1D: return('1');
case 0x1E: return('2');
case 0x1F: return('3');
case 0x20: return('4');
case 0x21: return('5');
case 0x22: return('6');
case 0x23: return('7');
case 0x24: return('8');
case 0x25: return('9');
case 0x26: return('A');
case 0x27: return('B');
case 0x28: return('C');
case 0x29: return('D');
case 0x2A: return('E');
case 0x2B: return('F');
case 0x2C: return('G');
case 0x2D: return('H');
case 0x2E: return('I');
case 0x2F: return('J');
case 0x30: return('K');
case 0x31: return('L');
case 0x32: return('M');
case 0x33: return('N');
case 0x34: return('O');
case 0x35: return('P');
case 0x36: return('Q');
case 0x37: return('R');
case 0x38: return('S');
case 0x39: return('T');
case 0x3A: return('U');
case 0x3B: return('V');
case 0x3C: return('W');
case 0x3D: return('X');
case 0x3E: return('Y');
case 0x3F: return('Z');

}
}

// Datei: Tastatur.c

#define KEYPORT PORTB

#define PORTD PD
#define PORTC PC

#define COL 8 //number of column
#define COL0 PORTD.0 //B00000001
#define COL1 PORTD.1 //B00000010
#define COL2 PORTD.2 //B00000100
#define COL3 PORTD.3 //B00001000
#define COL4 PORTD.4 //B00010000
#define COL5 PORTD.5 //B00100000
#define COL6 PORTD.6 //B01000000
#define USED_COLS (COL0 |COL1 | COL2 | COL3 | COL4 |COL5 | COL6)

#define ROW 8 //number of line
#define ROW0 PORTC.0 //B00000001
#define ROW1 PORTC.1 //B00000010
#define ROW2 PORTC.2 //B00000100
#define ROW3 PORTC.3 //B00001000
#define ROW4 PORTC.4 //B00010000
#define ROW5 PORTC.5 //B00100000
#define ROW6 PORTC.6 //B01000000
#define ROW7 PORTC.7 //B10000000
#define USED_ROWS (ROW0 | ROW1 | ROW2 | ROW3 | ROW4 | ROW5 | ROW6 | ROW7)
Es ist bestimmt ganz falsch aber ich weiß halt nicht viel auch von dem
thema und bin aber interessiert!
Mein Zeichensatz enthält aber 64 Zeichen!
Würde mich freuen über eine Hilfe! Das ganze möchte ich in C-Sprache!
Gruß,
Didier