0

Cを使ってLEDを点灯させたい、つまりパラレルポートに書き込みたい。

しかし、コードは機能しません。

char ledStatusの代わりに使用しBYTE ledStatusます。違いはありますか??

このコードの問題は何ですか?

#include <windows.h>
#include <conio.h>
#include <staio.h>
#define LED_ON  1

int main()
{
   HANDLE h;
   unsigned long  dwSize=1;
   int success;

   h = CreateFile(
      L"LPT1",
      GENERIC_WRITE, // access (read-write) mode
      0, // share mode
      NULL, // pointer to security attributes
      OPEN_EXISTING, // how to create
      FILE_ATTRIBUTE_NORMAL, // file attributes
      NULL // handle to file with attributes to copy
   );

   if (INVALID_HANDLE_VALUE == h)
   {
      //Handle Error
      printf("CreateFile failed with error %d\n", GetLastError());
      exit(1);
   }
   else
   {
      printf("CreateFile1 Successful\n");
   }

   char   ledStatus;
   // turn on LED
   ledStatus = LED_ON;
   success = WriteFile(h, &ledStatus, 1, &dwSize, NULL);
   if (success)
   {
      printf("File Write Successful - %i bytes\n", dwSize);
   }
   else
   {
      printf("File Write Failed\n");
   }

   // close port
   CloseHandle(h);
   return 0;
}
4

1 に答える 1

2

あなたの質問は非常に不十分に文書化されています.使用した信号やLEDの配線方法については説明していません. それを間違える方法はたくさんあります。しかし、標準の Windows パラレル ドライバーで動作させる見込みはありません。プリンターなどの並列デバイスをインターフェイスするために作成されました。これには、デバイスにバイトをクロックするためのハンドシェイクが必要です。ドライバは STROBE 信号をオンにします。デバイスは、バイトをコピーしたことを確認するために ACK 信号をオンにする必要があります。もちろん、それは起こりません。WriteFile() 呼び出しは、ドライバーのバッファーを埋めるだけです。

出力ラインを直接制御するには、別のドライバーが必要です。Inpout32 が一般的な選択です。Jan Axelson の本で重要なアドバイスを見つけてください。Inpout32 へのリンクも含まれています。

于 2012-10-20T15:24:28.257 に答える