Parallel-Port Steurung (Port Einstellbar!, z.B für Relaiskarte) in C mit Dev-C++
-
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 LPT1x=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; }