我想用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;
}
答案 0 :(得分:2)
你的问题记录很少,你没有描述你使用的信号或你如何连接LED。有很多方法可以解决这个问题。但是你没有希望让它与标准的Windows并行驱动程序一起工作。它被写入接口并行设备,如打印机。这需要握手才能将一个字节计时到设备。驱动器打开STROBE信号,器件必须打开ACK信号以确认它复制了该字节。那当然不会发生,WriteFile()调用只填充驱动程序中的缓冲区。
你需要另一个驱动程序来直接控制输出线,Inpout32是一个常见的选择。在Jan Axelson's book中查找基本建议,还包括指向Inpout32的链接。