\
/ \
/ \
/ \
/ \
/ \
/
so 2 Tasten werden nun gleichzeitig erkannt.
verodert und per led anzeige auf portD und auf dem display in dezimal dargestellt.
es lag an einem timing problem.
in jeder spalten abfrage funktionierten ja nur die letzten beiden if abfragen richtig sobalt 2 Tasten gedrückt waren.
mit 100µs wartezeit nachdem die zu scanende spalte aktiviert wurde funktionierte auch die 2. zeile richtig.
und nu mit 200µs klappt alles.
Code:
signed int KEY_Scancode (void)
{
signed int code=0x0000;
INTCON2bits.RBPU=0; //pull-up's an
TRIS_KEY = 0b11110000; // KEY-PORT bit 0,1,2,3 = Ausgänge (bit 0 für LCD_E=0)
PORTKEY = 0b11111110;
//*******1.Spalte(1,4,7,*)*************************************************************************
TRIS_KEY = 0b11111100;
spalte1 = 0;
delay100us(2);
if (zeile1==0) code = code | 1; //1
if (zeile2==0) code = code | 8; //4
if (zeile3==0) code = code | 64; //7
if (zeile4==0) code = code |512; //*
//*******2.Spalte(2,5,8,0)*************************************************************************
TRIS_KEY = 0b11111010;
spalte2 = 0;
delay100us(2);
if (zeile1==0) code = code | 2; //2
if (zeile2==0) code = code | 16; //5
if (zeile3==0) code = code |128; //8
if (zeile4==0) code = code |1024; //0
//*******3.Spalte(3,6,9,#)*************************************************************************
TRIS_KEY = 0b11110110;
spalte3 = 0;
delay100us(2);
if (zeile1==0) code = code | 4; //3
if (zeile2==0) code = code | 32; //6
if (zeile3==0) code = code |256; //9
if (zeile4==0) code = code |2048; //#
return code;
}
erste stufffe ist erklommen \
/
jetzt gehts weiter mit der erkennung ob eine taste gedrückt ist, ob sie noch festgechalten wird, oder schon losgelassen wurde.
PicNick schrieb:
Ich persönlich würde für alle Tasten eine Bit-Matrix anlegen, die ich beim scannen einzeln vergleiche.
Matrix-Bit = 1 und TastenPin=1 --> nix zu tun
Matrix-Bit = 1 und TastenPin=0 --> taste (neu) gedrückt ->sende ON
Matrix-Bit = 0 und TastenPin=0 --> taste festgehalten, nix zu tun
Matrix-Bit = 0 und TastenPin=1 --> taste ausgeslassen--> sende OFF
und dann den Tastenpin in der Matrix merken
Das kann man nun unterschiedlich geschickt machen, aber das Prinzip bleibt
Was ist mit Marix-Bit gemeint, und womit wird er verglichen.
bin gespannt auf eire anregungen.
Lesezeichen