如何在C++中设置并读取并口上的引脚?

4
我正在帮助一个朋友完成他的毕业项目,其中有一个电路需要使用C++程序进行开关控制。

image of what i want

我一开始觉得这很容易,但是我没有成功实现这个程序。主要问题是:

  • Windows XP及以上版本不允许直接访问硬件,所以某些网站建议我需要编写或查找驱动程序。
  • 我也看了一些在线项目,但它们似乎只适用于Windows XP,而在Windows 7上无法使用。
  • 此外,大多数项目都是用VB或C#编写的,而我不熟悉这些语言。

问题:

  • 是否有适用于Windows XP和Windows 7的合适驱动程序?如果有,我如何在我的代码中使用它?(提供代码片段将不胜感激)
  • 是否有一种跨平台的方式来处理与并行端口的通信?

Note: "link1" is not valid, please provide a correct hyperlink in the future.

1
您的原始标题让我认为您正在寻求有关电路的帮助,这将更适合在http://electronics.stackexchange.com/上发布。希望这样更好。 - dmckee --- ex-moderator kitten
下一个问题:您在文本中写了“并行端口”(我为修改后的标题复制了该文本),您的图像显示“打印机端口”,并且您已将其标记为[串行端口]。您应该明确指出您所指的是哪一个,因为答案取决于您选择哪一个。 - dmckee --- ex-moderator kitten
2个回答

3
您不需要编写驱动程序或其他任何东西--只需使用类似"LPT1"的文件名调用CreateFile函数打开并获取与并行端口通信的句柄,然后就可以使用WriteFile函数向其写入数据。例如:
HANDLE parallelPort = CreateFile("LPT1", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL);
if(parallelPort == INVALID_HANDLE_VALUE)
{
    // handle error
}
...
// Write the string "foobar" (and its null terminator) to the parallel port.
// Error checking omitted for expository purposes.
const char *data = "foobar";
WriteFile(parallelPort, data, strlen(data)+1, NULL, NULL);
...
CloseHandle(parallelPort);

4
我认为他不想为一个能理解某些协议的“智能”外设编写数据,而只是利用并行端口的各个引脚状态来通过光电隔离器、ULN2803等控制一些负载的开关; 在这种情况下,您的方法行不通。 - Matteo Italia

3
请查看codeproject:这里这里这里。你会发现宝藏。
第一个链接适用于Windows 7 - 32位和64位。

从研究这些项目中,我意识到这是如此容易。谢谢。 - Dr Deo
#include "pt_ioctl.c" #define printerAddress 0x378OpenPortTalk(); //启动驱动程序。outp(printerAddress, 0x01);ClosePortTalk(); - Dr Deo
请回答,不要提供链接。我在你的第一个链接中找到了23个文件,不知道如何编译,也不知道哪个函数可以与LPT端口一起使用。 - Amir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接