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 回答