前几天写程序时候曾经参考过这个例子,但是忘记了是哪个网站的,今天好不容易找到了,赶紧记录下来。
因为觉得他里面的关于从控制端口读数据的部分非常不错,正好程序能用到。
1.对于有多个打印口,可以通过检查端口数据来确定你安装的是哪个打印口。因为可以通过电路来实现控制端口的电平高低位。比如将S7-S0中的任意几位至低电平,然后通过程序循环检查,如果符合事先设定的值,则确定打印口是安装到了这个插口上。
2.这个预先设定的值一定要考虑到其他的情况:(1)其他的打印口的默认状态是什么?(120)(2)其他打印口有打印机工作的时候状态是什么?(3)其他打印口缺纸状态是值是什么?(4)...一定要考虑周全,这样你设定的值才能被准确的检查到。
下面是文章原文。
Introduction
This is a good tutorial about interfacing with the parallel port; more inportantly reading from the port. Other articles I've seen only shown how to write to the port.
Before I get ahead of myself, the parallel port I used is an ECP (
Go to “Control Panel / System / Hardware Tab / Device Manager / Ports (Com & LPT) /
It should indicate what type you have. You can also go to the ‘Resource’ Tab to indicate the range of your port: mine is
For the ECP, there are some over headers if I was to use the data port as both input and output. Instead, I used the signal port for data processing.
If by any odd reason you don't understand the tutorial. Please refer to the explaination towards the bottom of the page. Or just email me.
Note that all information regarding the inpout.dll is on http://www.logix4u.net/
>>Please Vote so I can get an indication weither it's worth my time to update.<<
Testing
As mention before, I used a DMM to test out the ports (nothing connected to the ports yet) and I used the read function from the inpout32.dll, .ie In(Port Address), my particular port address was:
[Data Port] Addres: 0x378H or in VB Express &H378S
[Status Port] Addres: 0x379H or in VB Express &H379S
[Control Port] Addres: 0x37AH or in VB Express &H37AS
*note these port address are in HEX
Data Pins Status Pins Control Pins
Pin 9: D7 Pin 10: S6 Pin 1 : C0
Pin 8: D6 Pin 11: S7 Pin 14: C1
Pin 7: D5 Pin 12: S5 Pin 16: C2
Pin 6: D4 Pin 13: S4 Pin 17: C3
Pin 5: D3 Pin 15: S3
Pin 4: D2
Pin 3: D1
Pin 2: D0
Tutorial #1
Note that this was done in VB 2005 Express Edition.
The 2nd Tutorial: Reading from the 'status' port externally.
Step 1: Basically; once you download the inpout32.dll file. Copy it to your system directory. .ie C:\WINDOWS\system32
Step 2: Then in VB; Open a New File
Step 3: In the text box, write a name for this project. I called my 'Port_Testing'
Step 4: "Drag" a button to your form window and then "Double Click" on the button.

Step 5: Once your in the code editor declare this at follows at the beginning of your code:
Option Strict Off
Option Explicit On
Module InpOut32_Declarations
'Inp and Out declarations for port I/O using inpout32.dll.
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short)
End Module

Step 5: Scroll down to the 'event handler,' of Button1.
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
End Sub
End Class
Step 6: Now within the event handler code, write the next following 3 lines of code:
Out(&H378S, &HFFS) 'Print '1' to D7-D0 or 255 in Decimal
Dim Value1 As String 'String named Value1
Value1 = Inp(&H378S) 'Now Value1 has the values in 'data port'
MessageBox.Show(Value1) 'A popup will indicate the current value written
Step 7: Run It!!! Using 'F5 Key' or going to 'Debug/Start Debugging.'

Here is the result of our hard earn work! 255 should appear on the messagebox. If not, you screwed up. Go back and repeat. To see different results you can also modify the code by writing in any other number in hex within the 'Out(&H378S, [HEX CODE: Only from &H0S to &HFFS ]).' *Note that the range is 0 (zero) to FF hex & not O.

Tutorial #2
Step 1: If you haven't gone through Tutorial #1 and your a novice. I suggest that you should scroll up.
Step 2: Go to the 'Design Tab' and drag another button to the form window.
Step 3: Next, double click on it and then add the following code in the 'eventhandler' for Button2.
Dim Value2 As String 'String named Value2
Value2 = Inp(&H379S) 'Now Value2 has the values in 'signal port'
MessageBox.Show(Value2) 'A popup will indicate the current value written

Step 4: Run It!!! Press F5 or go to Debug/Start Debugging.
Step 5: Click on Button2 and watch for the popup window. It should read 120 Decimal.

Explaination
What are Hex, Bin, Dec?
They are representations of numbers at differnt bases.
Hex = Hexidecimal Numbers (Base 16)
Bin = Binary Numbers (Base 2)
Dec = Decimal Numbers (Base 10)
We are most familar with base 10 since we count in decimal however computers are only familary with base 2; .ie 1's and 0's or 'on' and 'off.' I'm not going to elaborate more than this. To change between bases, simply use Microsoft Calculator that is already built in. Just remember to change it from the 'Standard View' to the 'Scientific View.' Write in the numbers and then simply click on what base you would like to see the number represent in.
Using the Status Port?
In Tutorial #1; we saw the MessageBox popup window showing a value of 255. You might ask yourself, why is that. First of all, DUH! We wrote 255 Decimal or FF Hex to it and ofcourse we can write anything else (0 - FF).
In Tutorial #2; we saw the MessageBox popup window showing a value of 120. Again you might as yourself, why is that. The answer is not as obvious. You might think the value should be '0' since we wrote nothing to it & we didn't connect anything to our parallel port yet. The answer is that Bit 7 (S7) of the signal port is inverted! (Ahhhhh) and S7 - S3 are always high enable. (Yes!)
S7' = 1' = 0
S6 = 1
S5 = 1
S4 = 1
S3 = 1
S2 = 0
S1 = 0
S0 = 0
01111000bin = 120dec
So you might ask yourself, how do we use the status port!!!
Just tie any of your status pins (any red pin) to ground (any green pins) and you should see a value change when you run my program again.
You see, on the status line; the pins are 'high' .ie 5V. To enble them for reading purpose you'll have to ground your status pins. (OOOOOHHH!!!)
Examples:
Example 1: Nothing Connected to Status Pins
The result should be: 120
S7
S6
S5
S4
S3
S2
S1
S0
0
1
1
1
1
0
0
0
Example 2: Status Port (S7), pin 11 is grounded
The result should be: 248
S7
S6
S5
S4
S3
S2
S1
S0
1
1
1
1
1
0
0
0
Example 3: Status Port (S5), pin 12, is grounded
The result should be: 88
S7
S6
S5
S4
S3
S2
S1
S0
0
1
0
1
1
0
0
0
Comments & Sourcecode
There you go! I know this was very long, but I hoped it helps. If you need the code, I’ll be happy to share. It’s in VB Express although.



浙公网安备 33010602011771号