Hai,
da es Sonntagmorgen ist und ich gerade Lust hatte hier noch mein Lösungsansatz:
Delphi-Quellcode:
const
LPT_Port = $378;
var
LEDStatus: byte;
procedure PruefeLED (aNumber : Byte);
begin
if (aNumber > 7)
then
begin
raise exception.create('
LED Nummer ist größer als das Maximum');
end;
end;
procedure SetzePort;
begin
Out32(LPT_Port, LEDStatus);
end;
procedure LEDEin(aNumber: byte);
begin
PruefeLED(aNumber);
LEDStatus := LEDStatus
or (1
shl (aNumber));
SetzePort;
end;
procedure LEDAus(aNumber: byte);
begin
PruefeLED(aNumber);
LEDStatus := LEDStatus
and (
not (1
shl aNumber));
SetzePort;
end;
procedure InvertLED(aNumber : byte);
begin
PruefeLED(aNumber);
LEDStatus := LEDSTatus
xor (1
shl aNumber);
SetzePort;
end;
procedure AlleLEDEin(aStatus: boolean = True);
begin
if (aStatus)
then
begin
LEDStatus := $FF
end
else
begin
LEDStatus := $0
end;
SetzePort;
end;
procedure SchiebeLEDLinks;
begin
LEDStatus := LEDSTatus
SHL 1;
SetzePort;
end;
procedure SchiebeLEDRechts;
begin
LEDStatus := LEDSTatus
SHR 1;
SetzePort;
end;
Dabei werden die LEDs von rechts nach links gezählt (0 bis 7).
Aufrufen dann so:
Delphi-Quellcode:
procedure TForm1.btn_SetLEDClick(Sender: TObject);
begin
LEDEin(0);
LEDEin(5);
LEDEin(7);
end;
procedure TForm1.btn_LEDAusClick(Sender: TObject);
begin
LEDAus(0);
LEDAus(5);
LEDAus(7);
end;
procedure TForm1.btn_InvertClick(Sender: TObject);
begin
InvertLED (5);
end;
procedure TForm1.btn_SchiebenClick(Sender: TObject);
begin
SchiebeLEDLinks;
end;
procedure TForm1.btn_rechtsClick(Sender: TObject);
begin
SchiebeLEDRechts;
end;
Stephan B.
"Lasst den Gänsen ihre Füßchen"