D
Habe in den letzten Tagen mal mit einem Freund eine Relaiskarten Steurung geschrieben. Man kann den Port einstellen (->e/a Bereich). Das Programm ist so geschrieben das es bei seinem Start alle Ports auf null setzt und diese dann durch Eingabe des Kanals 1-8 (1 entsricht D0 als Signalleitung) auf low bzw high setzt. Im Quellcode einfach den Port ändern
x=0xE800;
hier z.B bei e/a Bereich E800
Bei dem Normalen Port für LPT1
x=0x378;
wenn ich mich nicht irre?(e/a Bereich kann man unter Gerätemanager->Lpt-Port (z.B LPT1) und dann Resourcen) ? Ich habe bereits eine Gui (mit Tray Icon) in Visual C++ dazu geschrieben. Wenn jemand daran interesiert ist veröffentliche ich sie gerne auch. Zur inbetriebnahme inpout32.dll herunterladen und ins Verzeichnis des Projektes/ der Exe packen.
Hier ein kleiner Screenshot.
http://files.darthmatch.de/lptacess.JPG
Und der Quellcode:
//-------------------
// Written Nov 2008
//-------------------
// Copyright Darthrake 2008
//-------------------
// Do not remove this code
// Es ist verboten diesen Copyright Header zu entfernen
//-------------------
// Main code and funktion by Darthrake
// Strukture, fixes and Usage by Darthmatch
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>
typedef short _stdcall (*inpfuncPtr)(short portaddr);
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum);
int main(int argc, char *argv[])
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;
short i[8];
short y;
int x,z;
unsigned int j;
//Port
x=0xE800;
hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL)
{
printf("LoadLibrary Failed (Forgotten inpout32.dll?).\n");
system("Pause");
return -1;
}
printf("LoadLibary Passed.\n");
inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) {
printf("GetProcAddress for Inp32 Failed.\n");
system("Pause");
return -1;
}
printf("GetProcAddress for Inp32 Passed.\n");
oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) {
printf("GetProcAddress for Oup32 Failed.\n");
system("Pause");
return -1;
}
printf("GetProcAddress for Inp32 Passed.\n\n");
for(z=0; z<9; z++){
i[z]=0;
}
//Alle Ports auf aus
(oup32)(x,0x0000);
printf("--------------------------------\n");
printf("Usage: \n");
printf("--------------------------------\n");
printf("Inputs: \n");
printf(" 1-8\tChannel 1-8 on/off \n");
printf(" 9\tAll On \n");
printf(" 10\tAll OFF \n");
printf(" 0\tExit \n");
printf("--------------------------------\n\n");
//
//Eingabe
//
do
{
printf("Luefter\t: 1-2-3-4-5-6-7-8 \n");
printf("Status\t: %x-%x-%x-%x-%x-%x-%x-%x \n",i[0],i[1],i[2],i[3],i[4],i[5],i[6],i[7], i[8]);
printf("Eingabe\t: ");
fflush(stdin);
scanf("%d",&j);
//Kanäle Setzen
if (j==1) {if (i[0]== 0) {i[0]=1;} else {i[0]=0;};};
if (j==2) {if (i[1]== 0) {i[1]=1;} else {i[1]=0;};};
if (j==3) {if (i[2]== 0) {i[2]=1;} else {i[2]=0;};};
if (j==4) {if (i[3]== 0) {i[3]=1;} else {i[3]=0;};};
if (j==5) {if (i[4]== 0) {i[4]=1;} else {i[4]=0;};};
if (j==6) {if (i[5]== 0) {i[5]=1;} else {i[5]=0;};};
if (j==7) {if (i[6]== 0) {i[6]=1;} else {i[6]=0;};};
if (j==8) {if (i[7]== 0) {i[7]=1;} else {i[7]=0;};};
if (j==0) {if (i[8]== 0) {i[8]=1;} else {i[8]=0;};};
//Alle an
if (j==9)
{
i[0]=1;
i[1]=1;
i[2]=1;
i[3]=1;
i[4]=1;
i[5]=1;
i[6]=1;
i[7]=1;
};
//Alle aus
if (j==10)
{
i[0]=0;
i[1]=0;
i[2]=0;
i[3]=0;
i[4]=0;
i[5]=0;
i[6]=0;
i[7]=0;
};
if (j>10)
{
//Letzte Ziffer
printf("Groesser: %x\n", j);
};
y=i[0]+i[1]*2+i[2]*4+i[3]*8+i[4]*16+i[5]*32+i[6]*64+i[7]*128;
(oup32)(x,y);
}
while(i[8]==0); //Wenn 0 eingegeben wurde siehe oben
system("PAUSE");
return 0;
}