Включить светодиод с помощью 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.

Другие вопросы по тегам