Hallo,
ich habe hier ein Grafikdisplay mit Touch, welches per serieller den (zuvor definierten Code) einer gedrückten Taste sendet. Um diese Tasten jetzt auszuwerten, benutze ich folgendes Konstrukt:
Ich habe einen Aufzählungstypen:
Und Bitvariablen:
In einem Process schaue ich nach, ob Daten bereitliegen. Wenn ja, setzte ich die Variablen:
Innerhalb der Procedure und Funktionen kann ich dann die Vars nutzen, z.B. so:
Das funktioniert zwar, aber da ich weiß, dass ich nicht sonderlich gut programmieren kann:
Das geht bestimmt viel eleganter und sparsamer. Kann mir jemand eine Richtung zeigen?
Vielen Dank für Eure Zeit und viele Grüße aus Petershagen!
Rolf
ich habe hier ein Grafikdisplay mit Touch, welches per serieller den (zuvor definierten Code) einer gedrückten Taste sendet. Um diese Tasten jetzt auszuwerten, benutze ich folgendes Konstrukt:
Ich habe einen Aufzählungstypen:
Code
Type TKeyNames = (NullDummy, Key_OK, Key_Stunden, Key_Messen, Key_ZeitStellen,
Key_0, Key_1, Key_2, Key_3, Key_4, Key_5, Key_6, Key_7, Key_8,
Key_9, Key_Back);
Key_0, Key_1, Key_2, Key_3, Key_4, Key_5, Key_6, Key_7, Key_8,
Key_9, Key_Back);
Und Bitvariablen:
Code
TastenSatz1 : word;
TasteOK[@TastenSatz1, 0] : bit;
TasteStunden [@TastenSatz1, 1]: bit;
TasteMessen[@TastenSatz1, 2]: bit;
TasteZeitStellen[@TastenSatz1, 3]: bit;
Taste0 [@TastenSatz1, 4] : bit;
Taste1 [@TastenSatz1, 5] : bit;
Taste2 [@TastenSatz1, 6] : bit;
Taste3 [@TastenSatz1, 7] : bit;
Taste4 [@TastenSatz1, 8] : bit;
Taste5 [@TastenSatz1, 9] : bit;
Taste6 [@TastenSatz1, 10] : bit;
Taste7 [@TastenSatz1, 11] : bit;
Taste8 [@TastenSatz1, 13] : bit;
Taste9 [@TastenSatz1, 14] : bit;
TasteBack [@TastenSatz1, 15]: bit;
TasteOK[@TastenSatz1, 0] : bit;
TasteStunden [@TastenSatz1, 1]: bit;
TasteMessen[@TastenSatz1, 2]: bit;
TasteZeitStellen[@TastenSatz1, 3]: bit;
Taste0 [@TastenSatz1, 4] : bit;
Taste1 [@TastenSatz1, 5] : bit;
Taste2 [@TastenSatz1, 6] : bit;
Taste3 [@TastenSatz1, 7] : bit;
Taste4 [@TastenSatz1, 8] : bit;
Taste5 [@TastenSatz1, 9] : bit;
Taste6 [@TastenSatz1, 10] : bit;
Taste7 [@TastenSatz1, 11] : bit;
Taste8 [@TastenSatz1, 13] : bit;
Taste9 [@TastenSatz1, 14] : bit;
TasteBack [@TastenSatz1, 15]: bit;
In einem Process schaue ich nach, ob Daten bereitliegen. Wenn ja, setzte ich die Variablen:
Code
Task DatenAbfrage(idata, 4, resumed);
var
len : byte;
TastCode : byte;
begin
if SendPin = false then
SysLEDflashOnce(byte(LEDSys));
ch:= #0;
Serout(DC2);
Serout($1);
Serout($53);
Serout($66);
ch:= serinp; //ACK vom Display
ch:= serinp; //DC1 vom Display
len:= serinp; //LEN vom Display
SerinpBlock_p(@buf, word(len + 1));
if buf[1] = ord('A') then //Antwort vom Touch, dass Taste gedrückt
TastCode:= buf[3];
case TastCode of
Key_OK : incl(TasteOK);
|
Key_Stunden : incl(TasteStunden);
|
Key_Messen : incl(TasteMessen);
|
Key_ZeitStellen : incl(TasteZeitStellen);
|
Key_0 : incl(Taste0); KeyChar:= '0';
|
Key_1 : incl(Taste1); KeyChar:= '1';
|
Key_2 : incl(Taste2); KeyChar:= '2';
|
Key_3 : incl(Taste3); KeyChar:= '3';
|
Key_4 : incl(Taste4); KeyChar:= '4';
|
Key_5 : incl(Taste5); KeyChar:= '5';
|
Key_6 : incl(Taste6); KeyChar:= '6';
|
Key_7 : incl(Taste7); KeyChar:= '7';
|
Key_8 : incl(Taste8); KeyChar:= '8';
|
Key_9 : incl(Taste9); KeyChar:= '9';
|
Key_Back : incl(TasteBack); KeyChar:= 'D';
|
endcase;
endif;
SysLEDflashOnce(byte(LEDOK));
endif;
end;
var
len : byte;
TastCode : byte;
begin
if SendPin = false then
SysLEDflashOnce(byte(LEDSys));
ch:= #0;
Serout(DC2);
Serout($1);
Serout($53);
Serout($66);
ch:= serinp; //ACK vom Display
ch:= serinp; //DC1 vom Display
len:= serinp; //LEN vom Display
SerinpBlock_p(@buf, word(len + 1));
if buf[1] = ord('A') then //Antwort vom Touch, dass Taste gedrückt
TastCode:= buf[3];
case TastCode of
Key_OK : incl(TasteOK);
|
Key_Stunden : incl(TasteStunden);
|
Key_Messen : incl(TasteMessen);
|
Key_ZeitStellen : incl(TasteZeitStellen);
|
Key_0 : incl(Taste0); KeyChar:= '0';
|
Key_1 : incl(Taste1); KeyChar:= '1';
|
Key_2 : incl(Taste2); KeyChar:= '2';
|
Key_3 : incl(Taste3); KeyChar:= '3';
|
Key_4 : incl(Taste4); KeyChar:= '4';
|
Key_5 : incl(Taste5); KeyChar:= '5';
|
Key_6 : incl(Taste6); KeyChar:= '6';
|
Key_7 : incl(Taste7); KeyChar:= '7';
|
Key_8 : incl(Taste8); KeyChar:= '8';
|
Key_9 : incl(Taste9); KeyChar:= '9';
|
Key_Back : incl(TasteBack); KeyChar:= 'D';
|
endcase;
endif;
SysLEDflashOnce(byte(LEDOK));
endif;
end;
Innerhalb der Procedure und Funktionen kann ich dann die Vars nutzen, z.B. so:
Code
repeat
if KeyChar <> #0 then
if KeyChar <> 'D' then
Eingabe:= Eingabe + KeyChar;
endif;
TastenSatz1:=0;
KeyChar:=#0;
endif;
if Eingabe <> '' then
Buffer:= '#ZL1,35,' + Eingabe + #10;
DataOut;
mdelay(100);
endif;
until TasteOK;
excl(TasteOK);
if KeyChar <> #0 then
if KeyChar <> 'D' then
Eingabe:= Eingabe + KeyChar;
endif;
TastenSatz1:=0;
KeyChar:=#0;
endif;
if Eingabe <> '' then
Buffer:= '#ZL1,35,' + Eingabe + #10;
DataOut;
mdelay(100);
endif;
until TasteOK;
excl(TasteOK);
Das funktioniert zwar, aber da ich weiß, dass ich nicht sonderlich gut programmieren kann:
Das geht bestimmt viel eleganter und sparsamer. Kann mir jemand eine Richtung zeigen?
Vielen Dank für Eure Zeit und viele Grüße aus Petershagen!
Rolf