Включить светодиод с помощью C
Я хочу включить светодиод, используя C, что означает, что я хочу писать на параллельном порту.
но код не работает.
я использую 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 ответ
Ваш вопрос очень плохо задокументирован, вы не описали, какой сигнал вы использовали или как подключили светодиод. Множество способов ошибиться. Но у вас нет надежды заставить его работать со стандартным параллельным драйвером Windows. Он был написан для интерфейса параллельных устройств, таких как принтеры. Что требует рукопожатия для синхронизации байта с устройством. Драйвер включает сигнал STROBE, устройство должно включить сигнал ACK, чтобы подтвердить, что он скопировал байт. Это, конечно, не происходит, вызовы WriteFile() только заполняют буфер в драйвере.
Вам понадобится другой драйвер для прямого управления выходными линиями, Inpout32 - это обычный выбор. Найти важный совет в книге Яна Аксельсона, также содержит ссылку на Inpout32.