Hi tzechienchu ,
我以成功用VB.NET控制LED 1,2,3 & 4.
可是我还不懂怎样读LED or Port 的status. 还有为什么CreateFile 一定要用"LED1:"为filename? 如果换成别的filename将会失败控制GPIO???
chees
ec lim
**************************************************
Module modMain
Declare Function LoadCursor Lib "coredll.dll" (ByVal zeroValue As Integer, ByVal cursorID As Integer) As Integer
Declare Function SetCursor Lib "coredll.dll" (ByVal cursorHandle As Integer) As Integer
Declare Function CreateFile Lib "coredll" ( _
ByVal lpFileName As String, _
ByVal dwDesiredAccess As Integer, _
ByVal dwShareMode As Integer, _
ByVal lpSecurityAttributes As Integer, _
ByVal dwCreationDisposition As Integer, _
ByVal dwFLagsAndAttributes As Integer, _
ByVal hTemplateFile As Integer) As Integer
Declare Function DeviceIoControl Lib "coredll.dll" ( _
ByVal hDevice As Integer, _
ByVal dwIoControlCode As Integer, _
ByVal lpInBuffer() As Byte, _
ByVal nInBufferSize As Integer, _
ByVal lpOutBuffer() As Byte, _
ByVal nOutBufferSize As Integer, _
ByRef lpBytesReturned As Integer, _
ByVal lpOverlapped As Integer) As Integer
Public Declare Function ReadFile Lib "Coredll" ( _
ByVal hFile As Long, _
ByVal lpBuffer() As Byte, _
ByVal nNumberOfBytesToRead As Long, _
ByVal lpNumberOfBytesRead() As Byte, _
ByVal lpOverlapped As Long) As Long
Public Declare Function CloseHandle Lib "Coredll" (ByVal hObject As Integer) As Integer
Public Const OPEN_EXISTING As Integer = 3
Public Const INVALID_HANDLE_VALUE = -1
Public Const GENERIC_READ As Integer = &H80000000
Public Const GENERIC_WRITE As Integer = &H40000000
Public Const LED_ON = &H1
Public Const LED_OFF = &H6
Public Const IO_CTL_LED_1_ON As Integer = &H1
Public Const IO_CTL_LED_2_ON As Integer = &H2
Public Const IO_CTL_LED_3_ON As Integer = &H3
Public Const IO_CTL_LED_4_ON As Integer = &H4
Public Const IO_CTL_LED_ALL_ON As Integer = &H5
Public Const IO_CTL_LED_1_OFF As Integer = &H6
Public Const IO_CTL_LED_2_OFF As Integer = &H7
Public Const IO_CTL_LED_3_OFF As Integer = &H8
Public Const IO_CTL_LED_4_OFF As Integer = &H9
Public Const IO_CTL_LED_ALL_OFF As Integer = &HA
End Module
***************************************************************
Public Class frmMain
Dim hPort As Integer = -1
Private Sub btnOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOpen.Click
hPort = CreateFile("LED1:", GENERIC_READ + GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, 0, IntPtr.Zero)
If hPort = INVALID_HANDLE_VALUE Then
MessageBox.Show("Open Led Driver Fail")
Else
MessageBox.Show("Open Ok." & hPort.ToString)
End If
End Sub
Private Sub btnOnLed1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOnLed1.Click
OnLED(1)
End Sub
Private Sub btnOffLED1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOffLED1.Click
OffLED(1)
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
CloseHandle(hPort)
End Sub
Private Sub btnONLED2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnONLED2.Click
OnLED(2)
End Sub
Private Sub OnLED(ByVal PortNo As Integer)
Dim IO_CTL_LED_Value As Integer = 0
Select Case PortNo
Case 1
IO_CTL_LED_Value = IO_CTL_LED_1_ON
Case 2
IO_CTL_LED_Value = IO_CTL_LED_2_ON
Case 3
IO_CTL_LED_Value = IO_CTL_LED_3_ON
Case 4
IO_CTL_LED_Value = IO_CTL_LED_4_ON
Case 5
IO_CTL_LED_Value = IO_CTL_LED_ALL_ON
End Select
Dim byteLED(1) As Byte
Dim byteOut(10) As Byte
DeviceIoControl(hPort, IO_CTL_LED_Value, byteLED, 0, byteOut, 0, 0, IntPtr.Zero)
End Sub
Private Sub OffLED(ByVal PortNo As Integer)
Dim IO_CTL_LED_Value As Integer = 0
Select Case PortNo
Case 1
IO_CTL_LED_Value = IO_CTL_LED_1_OFF
Case 2
IO_CTL_LED_Value = IO_CTL_LED_2_OFF
Case 3
IO_CTL_LED_Value = IO_CTL_LED_3_OFF
Case 4
IO_CTL_LED_Value = IO_CTL_LED_4_OFF
Case 5
IO_CTL_LED_Value = IO_CTL_LED_ALL_OFF
End Select
Dim byteLED(1) As Byte
Dim byteOut(10) As Byte
DeviceIoControl(hPort, IO_CTL_LED_Value, byteLED, 0, byteOut, 0, 0, IntPtr.Zero)
End Sub
Private Sub btnONLEDALL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnONLEDALL.Click
OnLED(5)
End Sub
Private Sub btnONLED3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnONLED3.Click
OnLED(3)
End Sub
Private Sub btnONLED4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnONLED4.Click
OnLED(4)
End Sub
Private Sub btnOffLED2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOffLED2.Click
OffLED(2)
End Sub
Private Sub btnOffLED3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOffLED3.Click
OffLED(3)
End Sub
Private Sub btnOffLED4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOffLED4.Click
OffLED(4)
End Sub
Private Sub btnOFFALL_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOFFALL.Click
OffLED(5)
End Sub
Private Sub btnReadLED1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnReadLED1.Click
'##################################################
'Please take notes that this routine is not working
'##################################################
Dim byteRead(6) As Byte
Dim byteRead2(6) As Byte
ReadFile(hPort, byteRead, 6, byteRead2, IntPtr.Zero)
Me.Label1.Text = ""
For i As Integer = 0 To byteRead.GetUpperBound(0)
Me.Label1.Text += byteRead(i).ToString
Next
End Sub
End Class
[ 此帖被eclim在2010-03-23 09:18重新编辑 ]