Delphi-PRAXiS
Seite 3 von 4     123 4      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Lauflicht mit 8LED's (https://www.delphipraxis.net/53047-lauflicht-mit-8leds.html)

Sharky 30. Sep 2005 18:17

Re: Lauflicht mit 8LED's
 
Zitat:

Zitat von Assun
...doch wie kann ich genau diese auch wieder ausschalten ? :gruebel:

:gruebel:
In dem Du out32(888,0) machst?

Assun 1. Okt 2005 14:03

Re: Lauflicht mit 8LED's
 
Neee eben nicht :( wenn ich das mache dann werden ALLE LEDs ausgeschaltet..aber wie erreiche ich dass nur EINE bestimmte LED ausgeht ?

THX Schonmal

turboPASCAL 1. Okt 2005 14:32

Re: Lauflicht mit 8LED's
 
Delphi-Quellcode:
// zB. PinNummer = 64 

Out32(888, PinNummer and 1);  // für das einschalten

//bzw.
Out32(888, PinNummer and 255); // für das ausschalten
oder war das so: ? :gruebel:

Delphi-Quellcode:
// zB. PinNummer = 64 

Out32(888, PinNummer {and 0});  // für das einschalten

//bzw.
Out32(888, PinNummer and 254); // für das ausschalten
[Edit=turboPASCAL] :P Das ist grosser Quark was hier steht ! :mrgreen: [/Edit]

hibbert 1. Okt 2005 16:37

Re: Lauflicht mit 8LED's
 
also ich mache das so:
Delphi-Quellcode:
procedure leuchten(led1,led2,led3,led4,led5,led6,led7,led8:boolean);
var x:integer;
begin
x:=0;

// soll LED 1 leuchten ?
if led1 = true then x:= x +1;
// soll LED 2 leuchten ?
if led2 = true then x:=x+2;
// soll LED 3 leuchten ?
if led3 = true then x:= x +4;
{...}


Out32(888,x);
end;
(Der Source ist ungetestet aus'm Kopf aufgeschrieben....:wink:)

hibbert

turboPASCAL 1. Okt 2005 22:48

Re: Lauflicht mit 8LED's
 
Liste der Anhänge anzeigen (Anzahl: 3)
Nach dem Vorschlag von hibbert so: :wink:
Delphi-Quellcode:
const
  LPT_Port = $378; // LPT Port 1 (dezimal 888)

procedure LEDs(led1,led2,led3,led4,led5,led6,led7,led8: Boolean);
var
  Value: Byte;
begin
  Value := 0;

  if led1 then Value := Value +   1;
  if led2 then Value := Value +   2;
  if led3 then Value := Value +   4;
  if led4 then Value := Value +   8;
  if led5 then Value := Value +  16;
  if led6 then Value := Value +  32;
  if led7 then Value := Value +  64;
  if led8 then Value := Value + 128;

  Out32(LPT_Port, Value);
end;

// Aufruf zB so:
LEDs(True, False, False, False, False, False, False, False);
Es geht aber doch viel einfacher:

Delphi-Quellcode:
const
  LPT_Port = $378; // LPT Port 1 (dezimal 888)

procedure SetLEDs(Value: Byte);
begin
  Out32(LPT_Port, Value);
end;

// Aufruf:

SetLEDs($00000001); // Setzt die LED 1
SetLEDs($00000011); // Setzt die LED 1 & 2
SetLEDs($10000001); // Setzt die LED 1 & 8
SetLEDs($00000000); // alles aus
oder einfach so:
Delphi-Quellcode:
Out32($378, $00000001); // Setzt die LED 1
...
Out32($378, $10000001); // Setzt die LED 1 & 8

Bitte mal Testen...

Sharky 2. Okt 2005 08:10

Re: Lauflicht mit 8LED's
 
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;

Clane 5. Nov 2005 10:17

Re: Lauflicht mit 8LED's
 
wie kann ich die funktionen aus der dll angucken ??

zebrafalke 28. Feb 2006 16:57

Re: Lauflicht mit 8LED's
 
Wenn ich bei mir den Code von TurboPASCAL compilieren will, bleibt er stehn und zeigt den Code des Projects an und compiliert es nicht! :wall:
Genau das gleiche passiert, wenn ich das in ein eigenes Programm schreibe! :wall: :wall:

*nixkapier* Was mache ich denn falsch?


zebrafalke

turboPASCAL 28. Feb 2006 17:06

Re: Lauflicht mit 8LED's
 
Zitat:

Zitat von zebrafalke
Wenn ich bei mir den Code von TurboPASCAL compilieren will, bleibt er stehn und zeigt den Code des Projects an und compiliert es nicht!

Ja und wo (im Quellcode) was für eine Fehlermeldung.

Welche Delphiversion und welche Windowsversion hast du ?

zebrafalke 28. Feb 2006 20:17

Re: Lauflicht mit 8LED's
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich benutze Delphi 2005 und WinXP

Er zeigt den Quelltext von "Project1" an und markiert das "begin" rot und sagt: "E2156 Ausdruck zu komplex"

Was sagt mir das? :gruebel: :coder2:

Im Anhang ein Screenshot davon.

zebrafalke


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:08 Uhr.
Seite 3 von 4     123 4      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz