حلو
الطريقة بسيطة وابسط مما تتخيل
الكود المستعمل في البرنامج السابق (طبعا محول للفيجوال على حسب طلبك)
ملاحظة : الbutton1 هو لتشغيل الD3
والbutton2 لإغلاقه
لو تسئلني لماذا وضعت 8 لانها تنحسب بهذي الطريقة
لدينا 8 مخارج
والبايت لديه 8 ارقام ايضا بين 0 و 1
كل خانة في البايت تعبر عن مخرج
مثلا لو كتبت 00000010 `ذلك يساوي 3 بالديسمال او outData = 3
هذا الامر يعني تشغيل المخرج D1 واغلاق البقية
لو امبي اشغل المخرج الاول والمخرج الاخير بيكون البايت جدي 10000001
ولو اردت تشغيل جميع المخارج يكون البايت 11111111
كما ترى العملية سهلة ولكن لايمككنا كتابة 11111111 وارسالها باستعمال دالة output فهي تتطلب قيمة من نوع decimal
لذلك علينا التحويل من النظام الثنائي الى العادي (ديسمال)
-
فالان 8 تساوي في الثنائي 00001000
اي تشغيل المخرج الرابع
D0,D1,D2,D3
كما ترى ترتيب المخرج هو الرابع
لذلك كتبت 8 ليتم تشغيله
ولاقوم بإطفائه قمت بسحب ال8 التي اضفتها عبر outData -= 8
--
الان لو اردت تشغيل D5 ماهو الرقم الذي يشير اليه ؟؟
احنا قلنا ان كل خانة في البايت تشير لمخرج لذلك البايت بكون جدي عشان نشغل D5
0 0 0 0 0 1 0 0
D7 D6 D5 D4 D3 D2 D1 DO
يعني 00100000
وبالتحويل للنظام العادي يصبح 32
اي لتشغيل D5 تكتب
outData += 32
ولاطفائه نقوم بسحب ال 32
outData -= 32
--
وال address هو عنوان بورت الparallel
افتراضيا هو يكون 888 اي 378 hex
ولكن اذا كان عندك بورتين راح يكون هناك عنوان مختلف لكل منهما _ يمكنك معرفة العنوان من الdevice manger
اتمنى توصل الفكرة واستفدت مني
وانا حاضر لأي استفسار
تحياتي
الطريقة بسيطة وابسط مما تتخيل
الكود المستعمل في البرنامج السابق (طبعا محول للفيجوال على حسب طلبك)
ملاحظة : الbutton1 هو لتشغيل الD3
والbutton2 لإغلاقه
PHP كود :
Imports System.Runtime.InteropServices
Partial Public Class Form1
Inherits Form
<DllImport("inpout32.dll", EntryPoint:="Out32")> _
Public Shared Sub Output(ByVal address As Integer, ByVal value As Integer)
End Sub
Private address As Integer = 888
Private outData As Integer = 0
Private IsD3Open As Boolean = False
Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
Output(address, 0)
IsD3Open = False
End Sub
Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If IsD3Open = FalseThen
outData += 8
IsD3Open = True
Output(address, outData)
End If
End Sub
Private Sub Button2_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
If IsD3Open = True Then
outData -= 8
Output(address, outData)
IsD3Open = False
End If
End Sub
End Class
لو تسئلني لماذا وضعت 8 لانها تنحسب بهذي الطريقة
لدينا 8 مخارج
والبايت لديه 8 ارقام ايضا بين 0 و 1
كل خانة في البايت تعبر عن مخرج
مثلا لو كتبت 00000010 `ذلك يساوي 3 بالديسمال او outData = 3
هذا الامر يعني تشغيل المخرج D1 واغلاق البقية
لو امبي اشغل المخرج الاول والمخرج الاخير بيكون البايت جدي 10000001
ولو اردت تشغيل جميع المخارج يكون البايت 11111111
كما ترى العملية سهلة ولكن لايمككنا كتابة 11111111 وارسالها باستعمال دالة output فهي تتطلب قيمة من نوع decimal
لذلك علينا التحويل من النظام الثنائي الى العادي (ديسمال)
-
فالان 8 تساوي في الثنائي 00001000
اي تشغيل المخرج الرابع
D0,D1,D2,D3
كما ترى ترتيب المخرج هو الرابع
لذلك كتبت 8 ليتم تشغيله
ولاقوم بإطفائه قمت بسحب ال8 التي اضفتها عبر outData -= 8
--
الان لو اردت تشغيل D5 ماهو الرقم الذي يشير اليه ؟؟
احنا قلنا ان كل خانة في البايت تشير لمخرج لذلك البايت بكون جدي عشان نشغل D5
0 0 0 0 0 1 0 0
D7 D6 D5 D4 D3 D2 D1 DO
يعني 00100000
وبالتحويل للنظام العادي يصبح 32
اي لتشغيل D5 تكتب
outData += 32
ولاطفائه نقوم بسحب ال 32
outData -= 32
--
وال address هو عنوان بورت الparallel
افتراضيا هو يكون 888 اي 378 hex
ولكن اذا كان عندك بورتين راح يكون هناك عنوان مختلف لكل منهما _ يمكنك معرفة العنوان من الdevice manger
اتمنى توصل الفكرة واستفدت مني
وانا حاضر لأي استفسار
تحياتي