Nicht, dass die folgenden Programmzeilen besonders elegant oder effizient wären, aber zum Verständnis, was ich meine:
(beschränkt auf das Wesentliche)
Nebeneffekt "at first", weil ja alle Matrixbits auf 0 stehen: ALLE Tasten on, und dann gleich ALLE Tásten OFF.Code:static char Matrix[12]; //-------------------------------------------------------------- void KEY_Check (int index, int maske) { if ( Matrix[index] ^= ( PORTB & maske ) ) // änderung alt/neu { if ( PORTB & maske) // alt=0,neu =1 SendKeyOFF( index) else SendKeyON( index ) Matrix[index] = PORTB & maske; // merken } } signed int KEY_Scancode (void) { spalte1 = 0; spalte2 = 1; spalte3 = 1; KEY_Check (0 , 1); KEY_Check (1 , 2); KEY_Check (2 , 4); KEY_Check (3 , 8); spalte1 = 1; spalte2 = 0; spalte3 = 1; KEY_Check (4 , 1); KEY_Check (5 , 2); KEY_Check (6 , 4); KEY_Check (7 , 8); spalte1 = 1; spalte2 = 1; spalte3 = 0; KEY_Check (8 , 1); KEY_Check (9 , 2); KEY_Check (10 , 4); KEY_Check (11 , 8); }
Man müsste daher ganz am Anfang alle tasten auf "aus" stellen
for (int ix=0; ix < 12; ix++)
Matrix[ix] = 0xFF;







Zitieren

Lesezeichen