使用C打开LED

时间:2012-10-20 11:33:14

标签: winapi led parallel-port

我想用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;
}

1 个答案:

答案 0 :(得分:2)

你的问题记录很少,你没有描述你使用的信号或你如何连接LED。有很多方法可以解决这个问题。但是你没有希望让它与标准的Windows并行驱动程序一起工作。它被写入接口并行设备,如打印机。这需要握手才能将一个字节计时到设备。驱动器打开STROBE信号,器件必须打开ACK信号以确认它复制了该字节。那当然不会发生,WriteFile()调用只填充驱动程序中的缓冲区。

你需要另一个驱动程序来直接控制输出线,Inpout32是一个常见的选择。在Jan Axelson's book中查找基本建议,还包括指向Inpout32的链接。