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 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;
    }
    

Anmelden zum Antworten