السلام عليكم
أنا أعتذر على التأخير حيث أن السنة الدراسية بدأت هذا الاسبوع فأصبحت مشغولاً قليلاً
أشكر الأخ alaa bitar و الأخ Mgh على هذه الردود الجميلة التي تدل على سعيهم لطلب العلم والمعرفة ، والآن الدرس الثاني وهو معقد قليلاً ولكن إذا قرأته مرتين أو ثلاث فسوف تفهمه جيداً :
الدرس الثاني : الإدخال عبر منفذ الطابعة :لقد تعلمت في الدرس السابق كيف تقوم بتشغيل ثنائي باعث للضوء "LED" باستخدام منفذ الطابعة ، طبعاً الدرس السابق كان تعليم لمبادئ الإخراج وهذا الدرس تعليم لبادئ الإدخال وبعد هاذين الدرسين سوف ننطلق إلى المشاريع الكبيرة باستخدام دوائر إلكترونية معقدة ، وهذا ما أسعى لإيصاله لكم ، والآن دعونا نبدأ بتعلم مبادئ الإدخال.
لقد تعلمت طريقة إعطاء الأوامر إلى دائرة إلكترونية عبر منفذ الطابعة في الدرس السابق والآن سوف تتعلم كيف تأخذ المعلومات من الدائرة الإلكترونية ، فتخيل مثلاً أننا نريد عمل إنسان آلي "روبوت" طبعاً لكي نأمر الإنسان الآلي بالتحرك إلى الأمام علينا بإرسال إشارة له باستخدام أوامر الإخراج وهذا تعرفت عليه سابقاً ولكن لنفرض أن هذا الإنسان الآلي واجه أمامه حائط إذاً على الإنسان الآلي أن يقوم بإرسال بعض المعلومات عن هذا الحائط إلى جهاز الكمبيوتر الذي هو بمثابة العقل عند الإنسان لكي يقوم الكمبيوتر بعد ذلك بتغيير وجهة الإنسان الآلي ، إذاً الحاجة إلى أوامر الإدخال ضرورية جداً بقدر ما نحتاج إلى أوامر الإخراج ، في أوامر الإخراج كنا نتعامل بالنظام الثنائي ، وكذلك في أوامر الإدخال فهي بالنظام الثنائي مع اختلافات بسيطة بين الإخراج والإدخال ، حيث أننا في أوامر الإخراج كانت لدينا ثمانية فتحات تمثل ثمانية مراتب فالفتحة الأولى كانت قيمتها 1 والثانية 2 والثالثة 4 والرابعة 8 وهكذا أي أننا نبدأ من الرقم واحد ثم نضربه بـ 2 والناتج كذلك نضربه بـ 2 ونقوم بهذه العملية ثماني مرات إلى أن نصل إلى العدد 256 ولكن فتحات الإدخال عددها خمسة فتحات هي 15 و 13 و 12 و 10 و 11 ، لاحظ أن الفتحة رقم 14 ليست من ضمن فتحات الإدخال ، وطبعاً نظام العد الثنائي لهذه الفتحات الخمس بالترتيب يبدأ من الرقم 8 ثم 16 ثم 32 ثم 64 ثم 128 ، مع بداية تشغيل البرنامج الذي سوف تعرف طريقة تصميمه بعد قليل سوف تصل إشارة قيمتها 120 ذلك لأن جميع الفتحات تكون بوضع التشغيل تلقائياً إلا الفتحة رقم 11 ففيها بوابة NOT فتعكس الإشارة ، الآن ألم تسأل نفسك كيف عرفت أن القيمة 120 هي التي سوف تصل للبرنامج تلقائياً؟
لقد قلت قبل قليل بأن كل فتحة لها قيمة فالفتحة 15 قيمتها 8 والفتحة 13 قيمتها 16 والفتحة 12 قيمتها 32 والفتحة 10 قيمتها 64 والفتحة 11 قيمتها 128 نقوم بجمع هذه القيم كالتالي :
8 + 16 + 32 + 64 + 128 = 248
وكما قلنا بأن الفتحة 11 فيها بوابة NOT إذاً نطرح قيمة الفتحة 11 من المجموع :
248 – 128 = 120
وهذه هي القيمة التي سوف تصل للكمبيوتر ، وإذا أحضرنا مقاومة كهربائية أو سلك عادي ووصلنا بين الفتحة 10 وإحدى فتحات الأرضي مثل الفتحة 25 سوف ترسل إشارة إلى الكمبيوتر قيمتها هي القيمة التلقائية " 120 " مطروح منها قيمة الفتحة 10 كالتالي :
120 – 64 = 56
ماذا نستفيد من العمليات الحسابية السابقة ؟
إن العمليات الحسابية السابقة سوف تفيدنا كثيرة في عمل البرنامج الذي سوف يعرف المعلومات التي تصل إليه من الدائرة الإلكترونية " مثلاً روبوت " حيث أنك سوف تقوم بعمل البرنامج ليستجيب لهذه القيم فمثلاً إذا قمت بإرسال الإشارة عبر الفتحة 10 فإنك تعلم بأن القيمة التي سوف تصل لبرنامجك هي 56 وإذا قمت بإرسال الإشارة عبر أي فتحة فأنت تستطيع باستخدام عملية حسابية بسيطة معرفة القيمة التي سوف تصل للبرنامج.
الآن جاء وقت البرمجة وتعلم أوامر الإدخال ، طبعاً يجب علينا تعريف المكتبة الخاصة بمنفذ الطابعة وهذه المكتبة هي نفسها الخاصة بالإخراج والإدخال ولكن تعريف الإخراج يختلف عن تعريف الإدخال ، وسوف أضع لك الآن تعريف الإخراج وتعريف الإدخال لتعرف الفرق بينهما :
تعريف الإدخال :
Code Sample |
Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer
|
تعريف الإخراج :
Code Sample |
Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)
|
التعريفان السابقان مكانهما هو ملف البرمجة MODULE ، ودرسنا هذا يحتاج لتعريف الإدخال فقط ولكن بعد أن تعرف المبادئ الأساسية للإدخال والإخراج تستطيع أن تستخدم التعريفين " لعمل الروبوت مثلاً " ، الآن ضع مؤقت TIMER1 وضع كذلك مربع نص LABEL1 ثم ضع الأوامر التالية في الحدث الخاص بالتحميل للنموذج Form_Load :
Code Sample |
Private Sub Form_Load() Label1.Caption = “” Timer1.Interval = 5 End Sub
|
الأوامر السابقة تقوم بإفراغ مربع النص وتجعل الوقت الخاص بتنفيذ الأوامر التي في Timer1 هو خمسة مللي ثانية ، الآن ضع الأوامر التالية في الحدث الوحيد للمؤقت Timer1_Timer :
Code Sample |
Private Sub Timer1_Timer() Label1.Caption = Inp(&H379) End Sub
|
الأوامر السابقة تقوم بملأ مربع النص بالقيمة التي تصل للبرنامج من فتحات الإدخال ، طبعاً كما ترى أن دالة الإدخال فيها العنوان &H379 وهذا العنوان خاص بفتحات الإدخال وفي الدرس السابق كان العنوان هو &H378 حيث أنها فتحات الإخراج.
انتهى الدرس حيث تعلمنا طريقة الإدخال من الدوائر الإلكترونية إلى الكمبيوتر وهذا أمر مهم وسوف تعرف أهميته في الدروس اللاحقة الخاصة بعمل بعض الدوائر الإلكترونية وربطها بالكمبيوتر.
بعد هذا الدرس أكون قد وصلت إلى نهاية تعليم المبادئ حيث سوف تكون الدروس التالية مشتركة بيني وبينكم يا خبراء الإلكترونيات فسوف نصمم مشاريع جماعية عبر وضع المخططات الإلكترونية للدوائر والأوامر البرمجية لعملية الربط ثم نستخدم هذه البرامج في ما يفيدنا فمثلاً نستطيع عمل دائرة إلكترونية ترسل أشعة تحت الحمراء إلى دائرة إلكترونية أخرى فإذا تم قطع الاتصال بين هاتين الدائرتين فسوف نرسل إشارة إلى الكمبيوتر ليقوم مثلاً بإشعال مصباح كهربائي ، طبعاً العملية ليست صعبة وأتمنى من المبتدئين عدم محاولة ربط مصباح كهربائي موصل لمصدر تغذية متردد AC فهذا خطير جداً ولكن في الدروس القادمة سوف نوضح أفضل الطرق لتوصيل المصباح الكهربائي لكي لا يتضرر جهاز الكمبيوتر لديك.
أي شخص يواجه صعوبة في فهم هذان الدرسان عليه بوضع استفساراته وأسئلته هنا
لقد أرفقت الملفات البرمجية التي تحتوي الأكواد السابقة لمن يواجه صعوبة في تصميم البرنامج السابق
وشكراً لكم