Einzelnen Beitrag anzeigen

Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#26

Re: Lauflicht mit 8LED's

  Alt 2. Okt 2005, 09:10
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"
  Mit Zitat antworten Zitat