Woher hast du den Code? Du wirst damit nicht erreichen können was du willst.
Mit fopen("LPT1", "w") macht nämlich das Betriebssystem die Ansteuerung der Pins, in dem es ein Byteprotokoll fährt, was abhängig von den Daten alle möglichen Pins setzt und liest; und auch erwartet da auch dass der Drucker Befehle ordentlich bestätigt. Im schlimmsten Fall ist hinter dem Port "LPT1" gar kein Parallelport-Drucker angeschlossen, sondern irgend ein virtueller Drucker der gar nicht erst Pins hat.
In deinem Fall hast du ja aber keinen Drucker angeschlossen, sondern eine eigene Schaltung ohne Logik. Das heisst du musst die Pin auch selber setzen, und das geht dann nicht mit einem Byteprotokoll, sondern auf PCs klassischerweise mit den INP/OUT Befehlen.
Lass dich von folgendem Text nicht abschrecken, klingt und sieht alles furchtbar kompliziert aus, das hier ist eher eine grobe Zusammenfassung; ich erkläre aber gerne alles nochmals im Detail:
Spoiler anzeigen
Die Idee dahinter ist, dass jeder Pin ein Bit einer Addresse zugewiesen bekommt. Für LPT1 sind das klassischerweise die Adressen 0x378-0x37f (kann aber variieren). Hier die Übersicht, welcher Pin welche Addresse hat: https://en.wikipedia.org/wiki/Parallel_port#Port_addresses
Die Idee ist also, dass wenn du z.B. den Pin Nr. 5 (D3) ansprechen willst, dass du in der Tabelle da nachschlägst, und dann siehst: Pin Nr. 5 ist in der Base-Adresse (also 0x378) das das 4. Bit.
Der Code um das Bit zu setzen würde dann in etwa so aussehen (Pseudocode, hab weder Windows, noch C++ oder gar nen Parallelport hier):
short base = 0x378; // Base-Adressechar byte = 1 << 3; // schreibt die Eins von der 1. Stelle 3x nach rechts, so dass sie an 4. Stelle stehtOut32(base, byte); // setzt Pin Nr. 5 (D3) auf 1, alle anderen auf 0
Das Auslesen der Pins funktioniert ähnlich mit inp32, ist allerdings etwas mehr Bitfiddling. Beispiel Pin Nr. 10 (ACK) =Adresse base+1, Bit 7:
char data = !!(Inp32(base+1) & (1 << 6));
Unter modernen Windows Versionen funktioniert das leider aus Sicherheitsgründen leider nicht mehr direkt, aber es gibt extra Treiber namens "inpout32.dll" dafür, siehe: http://logix4u.net/parallel-port/…dows-982000ntxp (kitsunes Link verwendet den ebenfalls, da hast du auch den Code drin wie man den Laden muss).