65.9K
CodeProject 正在变化。 阅读更多。
Home

使用电脑控制电器

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (53投票s)

2004 年 5 月 31 日

CPOL

5分钟阅读

viewsIcon

489851

downloadIcon

16277

使用PC控制电器。

Sample Image - circuit

引言

大家好,我一直在网上搜索一种方法来通过PC控制电器,并在这里找到了它。这里有一个电路(图1),用于使用PC的打印机端口,通过软件和一些接口硬件来控制电器。该接口电路连同给出的软件,可以与任何PC的打印机端口一起使用,控制多达八件设备。

图1中所示的接口电路由一位设备绘制,由25针并行端口的D0位(引脚2)控制。其余数据位D1到D7(引脚3到9)的相同电路需要以类似的方式连接。光电耦合器的使用确保了PC与继电器驱动电路的完全隔离。

背景

并行端口是构建计算机控制设备和项目的简单且经济的工具。其简单性和易于编程性使其在电子爱好者中广受欢迎。并行端口常用于计算机控制机器人、Atmel/PIC编程器、家庭自动化等。这里是一个关于并行端口接口和编程的简单教程,包含一些示例。

每个人都知道什么是并行端口,它在哪里,以及它的用途。并行端口的主要用途是连接打印机到计算机,并且它是为此目的而专门设计的。因此,它通常被称为打印机端口或Centronics端口(这个名字来自一家流行的打印机制造公司“Centronics”,该公司为并行端口制定了一些标准)。您可以在PC的后面板上看到并行端口连接器。它是一个25针的母头(DB25)连接器(打印机连接到这里)。几乎所有的PC都只有一个并行端口,但您可以通过购买和安装ISA/PCI并行端口卡来增加更多端口。

并行端口模式

1994年发布的IEEE 1284标准定义了并行端口的五种数据传输模式。它们是:

  1. 兼容模式
  2. Nibble模式
  3. Byte模式
  4. EPP
  5. ECP

本教程中的程序、电路和其他信息几乎兼容所有类型的并行端口,可以毫无问题地使用(未经测试,仅凭信心!)。

硬件

DB25连接器的引脚排列如下面的图片所示

DB25连接器中的线路分为三组:

  1. 数据线(数据总线)
  2. 控制线
  3. 状态线

顾名思义,数据通过数据线传输。控制线用于控制外围设备,当然,外围设备通过状态线向计算机返回状态信号。这些线路在内部连接到数据、控制和状态寄存器。并行端口信号线的详细信息如下:

引脚号(DB25) 信号名称 方向 寄存器 - 位 反转
1
nStrobe
输出
Control-0
2
Data0
输入/输出
Data-0
3
Data1
输入/输出
Data-1
4
Data2
输入/输出
Data-2
5
Data3
输入/输出
Data-3
6
Data4
输入/输出
Data-4
7
Data5
输入/输出
Data-5
8
Data6
输入/输出
Data-6
9
Data7
输入/输出
Data-7
10
nAck
In
Status-6
11
忙碌
In
Status-7
12
缺纸
In
Status-5
13
Select
In
Status-4
14
换行
输出
Control-1
15
nError
In
Status-3
16
nInitialize
输出
Control-2
17
nSelect-Printer
输出
Control-3
18-25
地线
-
-
-

并行端口寄存器

正如您所知,数据、控制和状态线连接到计算机内部相应的寄存器。因此,通过在程序中操作这些寄存器,可以使用“C”和BASIC等编程语言轻松地读写并行端口。

标准并行端口中的寄存器是:

  1. 数据寄存器
  2. 状态寄存器
  3. 控制寄存器

正如其名称所示,数据寄存器连接到数据线,控制寄存器连接到控制线,状态寄存器连接到状态线。(这里“连接”一词并不意味着数据/控制/状态线之间存在物理连接。寄存器与相应的线路是虚拟连接的。)因此,您写入这些寄存器的任何内容都会以电压的形式出现在相应的线路上。当然,您可以用万用表测量它。而且,您提供给并行端口的电压(受一些限制)可以从这些寄存器中读取。例如,如果我们向数据寄存器写入“1”,则Data0线将驱动到+5v。就像这样,我们可以通过编程来开启和关闭任何数据线和控制线。

这些寄存器在哪里?

在IBM PC中,这些寄存器是I/O映射的,并且具有唯一的地址。我们需要找到这些地址才能使用并行端口。对于典型的PC,LPT1的基地址是0x378,LPT2的基地址是0x278。数据寄存器位于此基地址,状态寄存器位于基地址+1,控制寄存器位于基地址+2。因此,一旦我们有了基地址,我们就可以以这种方式计算每个寄存器的地址。下表显示了LPT1和LPT2的寄存器地址。

Register LPT1 LPT2
数据寄存器(基地址+0) 0x378 0x278
状态寄存器(基地址+1) 0x379 0x279
控制寄存器(基地址+2) 0x37a 0x27a

使用代码

我将为Win 98/NT/2000/XP使用Inpout32.dll(或hwinterface.ocx)。该DLL具有以下特性:

  1. 与所有Windows版本(Win 98、NT、2000和XP)无缝协作
  2. 使用嵌入在DLL中的内核模式驱动程序
  3. 无需特殊的软件或驱动程序安装
  4. 驱动程序将在DLL加载时自动安装并配置
  5. 无需特殊的API,只需两个函数Inp32Out32
  6. 可以轻松地与VC++、VB或C#一起使用。
val=axHwinterface1.InPort(888);
axHwinterface1.OutPort(888,(short)(val|2));

上面的代码从端口0x378(十进制888)读取值,然后与值2进行OR运算。这段代码将向D1发送值1。

提示

对于值=0,所有输出(D0-D7)都关闭。对于值=1,D0开启,值=2,D1开启,依此类推。例如,如果值=29(十进制)=00011101(二进制),则D0、D2、D3、D4开启,其余关闭。

关注点

您可以使用语音识别(或DTMF)通过这种方法控制您的房屋(智能家居)。

© . All rights reserved.